Kif Kkonfigurat PostgreSQL 12 Streaming Replikazzjoni f'CentOS 8


Id-database PostgreSQL tappoġġja diversi soluzzjonijiet ta' replikazzjoni biex jinbnew applikazzjonijiet ta' disponibbiltà għolja, skalabbli u tolleranti għall-ħsarat, li waħda minnhom hija l-Write-Ahead Log (WAL) Shipping. Din is-soluzzjoni tippermetti li server standby jiġi implimentat bl-użu ta' log shipping ibbażat fuq fajl jew replikazzjoni ta' streaming, jew fejn possibbli, taħlita taż-żewġ approċċi.

Bi streaming replikazzjoni, server tad-database standby (replication slave) huwa kkonfigurat biex jgħaqqad mas-server prinċipali/primarju, li jgħaddi r-rekords WAL lejn l-istandby hekk kif jiġu ġġenerati, mingħajr ma jistenna li l-fajl WAL jimtela.

B'mod awtomatiku, ir-replikazzjoni tal-istreaming hija asinkronika fejn id-dejta tinkiteb lis-server(i) standby wara li tkun saret tranżazzjoni fuq is-server primarju. Dan ifisser li hemm dewmien żgħir bejn it-twettiq ta 'tranżazzjoni fis-server prinċipali u l-bidliet li jsiru viżibbli fis-server standby. Waħda negattiva ta 'dan l-approċċ hija li f'każ li s-server prinċipali jiġġarraf, kwalunkwe tranżazzjoni mhux impenjata tista' ma tiġix replikata u dan jista 'jikkawża telf ta' data.

Din il-gwida turi kif twaqqaf Postgresql 12 master-standby streaming replikazzjoni fuq CentOS 8. Se nużaw \replikazzjoni slots għall-standby bħala soluzzjoni biex jiġi evitat li s-server prinċipali milli jirriċikla segmenti WAL qodma qabel ma l-istandby tkun irċeviehom.

Innota li meta mqabbla ma 'metodi oħra, slots ta' replikazzjoni jżommu biss in-numru ta 'segmenti magħrufa li huma meħtieġa.

Din il-gwida tassumi li int konness mas-servers tad-database prinċipali u standby tiegħek bħala l-għerq permezz ta' SSH (uża l-kmand Sudo fejn meħtieġ jekk tkun konness bħala utent normali bi drittijiet amministrattivi):

Postgresql master database server: 		10.20.20.9
Postgresql standby database server:		10.20.20.8

Iż-żewġ servers tad-database għandu jkollhom Postgresql 12 installat, inkella, ara: Kif Tinstalla PostgreSQL u pgAdmin f'CentOS 8.

Nota: PostgreSQL 12 jiġi b'bidliet kbar fl-implimentazzjoni u l-konfigurazzjoni tar-replikazzjoni bħas-sostituzzjoni ta 'recovery.conf u l-konverżjoni tal-parametri ta' recovery.conf għal parametri normali ta 'konfigurazzjoni ta' PostgreSQL, li jagħmilha ħafna aktar faċli biex tiġi kkonfigurata r-replikazzjoni tal-clusters.

Pass 1: Konfigurazzjoni tal-PostgreSQL Master/Primary Database Server

1. Fuq is-server prinċipali, aqleb għall-kont tas-sistema postgres u kkonfigura l-indirizz(i) IP li fuqhom is-server prinċipali se jisma' għal konnessjonijiet mill-klijenti.

F'dan il-każ, se nużaw * li jfisser kollox.

# su - postgres
$ psql -c "ALTER SYSTEM SET listen_addresses TO '*';"

Il-kmand SQL ALTER SYSTEM SET huwa karatteristika qawwija biex tbiddel il-parametri tal-konfigurazzjoni ta 'server, direttament b'mistoqsija SQL. Il-konfigurazzjonijiet jiġu ffrankati fil-fajl postgresql.conf.auto li jinsab fl-għerq tal-folder tad-dejta (eż. /var/lib/pgsql/12/data/) u aqra flimkien ma 'dawk maħżuna f'postgresql.conf. Iżda l-konfigurazzjonijiet fl-ewwel jieħdu preċedenza fuq dawk fl-aħħar u fajls oħra relatati.

2. Imbagħad oħloq rwol ta 'replikazzjoni li se jintuża għal konnessjonijiet mis-server standby għas-server prinċipali, bl-użu tal-programm createuser. Fil-kmand li ġej, il-bandiera -P titlob password għar-rwol il-ġdid u -e tirrepeti l-kmandi li createuser jiġġenera u jibgħat lis-server tad-database.

# su – postgres
$ createuser --replication -P -e replicator
$ exit

3. Imbagħad daħħal l-entrata li ġejja fl-aħħar tal-fajl tal-konfigurazzjoni tal-awtentikazzjoni tal-klijent /var/lib/pgsql/12/data/pg_hba.conf bil-qasam tad-database issettjat għal replikazzjoni kif muri fil-screenshot.

host    replication     replicator      10.20.20.8/24     md5

4. Issa terġa 'tibda s-servizz Postgres12 billi tuża l-kmand systemctl li ġej biex tapplika l-bidliet.

# systemctl restart postgresql-12.service

5. Sussegwentement, jekk għandek is-servizz firewalld jaħdem, għandek bżonn iżżid is-servizz Postgresql fil-konfigurazzjoni firewalld biex tippermetti talbiet mis-server standby lill-kaptan.

# firewall-cmd --add-service=postgresql --permanent
# firewall-cmd --reload

Pass 2: Nagħmlu Backup Bażi biex Bootstrap is-Server Standby

6. Sussegwentement, għandek bżonn tagħmel backup bażi tas-server kaptan mis-server standby; dan jgħin biex bootstrap-server standby. Trid twaqqaf is-servizz postgresql 12 fuq is-server standby, taqleb għall-kont tal-utent postgres, tagħmel backup tad-direttorju tad-dejta (/var/lib/pgsql/12/data/), imbagħad ħassar kollox taħtu kif muri, qabel ma tieħu l-bażi backup.

# systemctl stop postgresql-12.service
# su - postgres
$ cp -R /var/lib/pgsql/12/data /var/lib/pgsql/12/data_orig
$ rm -rf /var/lib/pgsql/12/data/*

7. Imbagħad uża l-għodda pg_basebackup biex tieħu l-backup bażi bis-sjieda t-tajba (l-utent tas-sistema tad-database jiġifieri Postgres, fi ħdan il-kont tal-utent Postgres) u bil-permessi t-tajba.

Fil-kmand li ġej, l-għażla:

  • -h – jispeċifika l-host li huwa s-server prinċipali.
  • -D – jispeċifika d-direttorju tad-dejta.
  • -U – jispeċifika l-utent tal-konnessjoni.
  • -P – tippermetti r-rappurtar tal-progress.
  • -v – jippermetti l-modalità verbose.
  • -R – tippermetti l-ħolqien ta’ konfigurazzjoni ta’ rkupru: Joħloq fajl standby.signal u tehmeż is-settings tal-konnessjoni ma’ postgresql.auto.conf taħt id-direttorju tad-dejta.
  • -X – użat biex jinkludi l-fajls tal-ġurnal tal-kitba bil-quddiem meħtieġa (fajls WAL) fil-backup. Valur ta 'fluss ifisser li tixxandar il-WAL waqt li tinħoloq il-backup.
  • -C – jippermetti l-ħolqien ta’ slot ta’ replikazzjoni msemmi mill-għażla -S qabel ma tibda l-backup.
  • -S – jispeċifika l-isem tal-islott tar-replikazzjoni.

$ pg_basebackup -h 10.20.20.9 -D /var/lib/pgsql/12/data -U replicator -P -v  -R -X stream -C -S pgstandby1
$ exit

8. Meta jsir il-proċess tal-backup, id-direttorju tad-dejta l-ġdid fuq is-server standby għandu jidher bħal dak fil-screenshot. Jinħoloq standby.signal u s-settings tal-konnessjoni huma mehmuża ma' postgresql.auto.conf. Tista' telenka l-kontenut tagħha billi tuża l-kmand ls.

# ls -l /var/lib/pgsql/12/data/

Skjav tar-replikazzjoni se jaħdem fil-modalità \Hot Standby jekk il-parametru hot_standby huwa ssettjat għal fuq (il-valur default) f'postgresql.conf u jkun hemm fajl standby.signal preżenti fid-direttorju tad-dejta.

9. Issa lura fuq is-server prinċipali, għandek tkun tista 'tara l-islott ta' replikazzjoni msejjaħ pgstandby1 meta tiftaħ il-veduta pg_replication_slots kif ġej.

# su - postgres
$ psql -c "SELECT * FROM pg_replication_slots;"
$ exit

10. Biex tara l-issettjar tal-konnessjoni mehmuża fil-fajl postgresql.auto.conf, uża l-kmand tal-qtates.

# cat /var/lib/pgsql/12/data/postgresql.auto.conf

11. Issa ibda l-operazzjonijiet normali tad-database fuq is-server standby billi tibda s-servizz PostgreSQL kif ġej.

# systemctl start postgresql-12

Pass 3: Ittestjar PostgreSQL Streaming Replication

12. Ladarba konnessjoni tiġi stabbilita b'suċċess bejn il-kaptan u l-istandby, se tara proċess ta 'riċevitur WAL fis-server standby bi status ta' streaming, tista 'tiċċekkja dan billi tuża l-veduta pg_stat_wal_receiver.

$ psql -c "\x" -c "SELECT * FROM pg_stat_wal_receiver;"

u proċess ta 'mittent WAL korrispondenti fis-server prinċipali/primarju bi stat ta' streaming u sync_state ta 'async, tista' tiċċekkja din il-veduta pg_stat_replication pg_stat_replication.

$ psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

Mill-screenshot ta 'hawn fuq, ir-replikazzjoni tal-istreaming hija asinkronika. Fit-taqsima li jmiss, aħna se nuru kif b'mod fakultattiv nippermettu replikazzjoni sinkronika.

13. Issa ttestja jekk ir-replikazzjoni tkunx qed taħdem sew billi toħloq database tat-test fis-server prinċipali u ċċekkja jekk teżistix fis-server standby.
[master]postgres=# OĦLOQ DATABASE tecmint;
[standby]postgres=# \l

Fakultattiv: Attivazzjoni tar-Replikazzjoni Sinkronika

14. Replikazzjoni sinkronika toffri l-abbiltà li tikkommetti tranżazzjoni (jew tikteb data) fid-database primarja u l-istandby/replika simultanjament. Jikkonferma biss li tranżazzjoni tirnexxi meta l-bidliet kollha magħmula mit-tranżazzjoni jkunu ġew trasferiti għal server standby sinkroniku wieħed jew aktar.

Biex tippermetti r-replikazzjoni sinkronika, is-synchronous_commit għandu wkoll ikun issettjat għal fuq (li huwa l-valur default, u għalhekk l-ebda ħtieġa għal xi bidla) u għandek bżonn ukoll li tissettja l-parametru synchronous_standby_names għal valur mhux vojt. Għal din il-gwida, aħna se nissettjawha għal kulħadd.

$ psql -c "ALTER SYSTEM SET synchronous_standby_names TO  '*';"

15. Imbagħad reload is-servizz PostgreSQL 12 biex tapplika l-bidliet ġodda.

# systemctl reload postgresql-12.service

16. Issa meta mistoqsija l-proċess tal-mittent WAL fuq is-server primarju għal darb'oħra, għandu juri stat ta 'streaming u sync_state ta' sinkronizzazzjoni.

$ psql -c "\x" -c "SELECT * FROM pg_stat_replication;"

Wasalna fl-aħħar ta 'din il-gwida. Aħna wrejna kif twaqqaf PostgreSQL 12 master-standby database streaming replikazzjoni f'CentOS 8. Aħna koprejna wkoll kif nippermettu replikazzjoni sinkronika f'raggruppament ta 'database PostgreSQL.

Hemm ħafna użi ta' replikazzjoni u dejjem tista' tagħżel soluzzjoni li tissodisfa l-ambjent tal-IT tiegħek u/jew ir-rekwiżiti speċifiċi għall-applikazzjoni. Għal aktar dettalji, mur Log-Shipping Standby Servers fid-dokumentazzjoni PostgreSQL 12.