Kako konfigurirati replikacijo pretakanja PostgreSQL 12 v CentOS 8


Podatkovna baza PostgreSQL podpira več replikacijskih rešitev za gradnjo visoko razpoložljivih, razširljivih, odpornih proti napak aplikacij, med katerimi je tudi pošiljanje dnevnika vnaprejšnjega zapisovanja (WAL). Ta rešitev omogoča, da se strežnik v stanju pripravljenosti izvede z uporabo pošiljanja dnevnikov na podlagi datotek ali kopiranja pretočnega predvajanja ali, kjer je to mogoče, kombinacije obeh pristopov.

Z replikacijo pretakanja je strežnik baze podatkov v pripravljenosti (podvojeni podrejeni) konfiguriran za povezavo z glavnim/primarnim strežnikom, ki zapise WAL pretaka v stanje pripravljenosti, ko so ustvarjeni, ne da bi čakal, da se datoteka WAL napolni.

Replikacija pretočnega predvajanja je privzeto asinhrona, kjer se podatki zapisujejo v strežnike v pripravljenosti, potem ko je bila transakcija izvršena na primarnem strežniku. To pomeni, da obstaja majhna zamuda med izvrševanjem transakcije v glavnem strežniku in spremembami, ki postanejo vidne v stanju pripravljenosti. Slaba stran tega pristopa je, da v primeru zrušitve glavnega strežnika morebitne nezavezane transakcije ne bodo ponovljene, kar lahko povzroči izgubo podatkov.

Ta priročnik prikazuje, kako nastaviti replikacijo pretočnega predvajanja v stanju pripravljenosti Postgresql 12 na CentOS 8. Za pripravljenost bomo uporabili\"reže za replikacijo" kot rešitev, da preprečimo, da glavni strežnik reciklira stare segmente WAL, preden jih ta prejme.

Upoštevajte, da v primerjavi z drugimi metodami reže za kopiranje ohranijo le število segmentov, za katere je znano, da so potrebni.

V tem priročniku se predvideva, da ste bili povezani s svojim glavnim strežnikom in strežniki baz podatkov v stanju pripravljenosti kot korenski prek SSH (po potrebi uporabite ukaz Sudo, če ste povezani kot običajni uporabnik z skrbniškimi pravicami):

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

Na obeh strežnikih baz podatkov mora biti nameščen Postgresql 12, sicer glejte: Kako namestiti PostgreSQL in pgAdmin v CentOS 8.

Opomba: PostgreSQL 12 prihaja z velikimi spremembami pri izvajanju in konfiguraciji podvajanja, kot sta zamenjava recovery.conf in pretvorba parametrov recovery.conf v običajne konfiguracijske parametre PostgreSQL, kar olajša konfiguracijo kopiranja gruč.

1. korak: Konfiguriranje strežnika PostgreSQL Master/Primary Database Server

1. Na glavnem strežniku preklopite na sistemski račun postgres in konfigurirajte naslove IP, na katerih bo glavni strežnik poslušal za povezave odjemalcev.

V tem primeru bomo uporabili * , kar pomeni vse.

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

Ukaz ALTER SYSTEM SET SQL je zmogljiva funkcija za spreminjanje konfiguracijskih parametrov strežnika, neposredno s poizvedbo SQL. Konfiguracije se shranijo v datoteko postgresql.conf.auto, ki se nahaja v korenu mape s podatki (npr./Var/lib/pgsql/12/data /) in se preberejo poleg tistih, ki so shranjene v postgresql.conf. Toda konfiguracije v prvi imajo prednost pred tistimi v poznejših in drugih sorodnih datotekah.

2. Nato s programom createuser ustvarite vlogo replikacije, ki bo uporabljena za povezave s pripravljenega strežnika na glavni strežnik. V naslednjem ukazu zastavica -P zahteva geslo za novo vlogo, -e pa odzvanja ukaze, ki jih ustvari uporabnik in jih pošlje strežniku zbirke podatkov.

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

3. Nato vnesite naslednji vnos na koncu /var/lib/pgsql/12/data/pg_hba.conf konfiguracijske datoteke za preverjanje pristnosti odjemalca, pri čemer je polje baze podatkov nastavljeno na replikacijo, kot je prikazano na posnetku zaslona.

host    replication     replicator      10.20.20.8/24     md5

4. Zdaj znova zaženite storitev Postgres12 z naslednjim ukazom systemctl, da uveljavite spremembe.

# systemctl restart postgresql-12.service

5. Nato, če imate zagnano službo požarnega zidu, morate v konfiguracijo požarnega zidu dodati storitev Postgresql, da omogočite zahteve s strežnika v stanju pripravljenosti glavnemu strežniku.

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

2. korak: Izdelajte osnovno varnostno kopijo za zagon strežnika v pripravljenosti

6. Nato morate iz rezervnega strežnika narediti osnovno varnostno kopijo glavnega strežnika; to pomaga pri zagonu strežnika v pripravljenosti. Na strežniku v pripravljenosti morate ustaviti storitev postgresql 12, preklopiti na uporabniški račun postgres, varnostno kopirati podatkovni imenik (/ var/lib/pgsql/12/data /) in nato vse, kar je pod njim, izbrisati, kot je prikazano, preden vzamete bazo rezerva.

# 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. Nato z orodjem pg_basebackup vzemite osnovno varnostno kopijo s pravim lastništvom (uporabnik sistema baze podatkov, tj. Postgres, znotraj uporabniškega računa Postgres) in s pravimi dovoljenji.

V naslednjem ukazu možnost:

  • -h - določa gostitelja, ki je glavni strežnik.
  • -D - določa podatkovni imenik.
  • -U - določa uporabnika povezave.
  • -P - omogoča poročanje o napredku.
  • -v - omogoča podroben način.
  • -R - omogoča ustvarjanje konfiguracije obnovitve: ustvari datoteko standby.signal in doda nastavitve povezave postgresql.auto.conf v podatkovnem imeniku.
  • -X - uporablja se za vključitev zahtevanih datotek dnevnika zapisovanja (datoteke WAL) v varnostno kopijo. Vrednost toka pomeni pretakanje WAL med ustvarjanjem varnostne kopije.
  • -C - omogoča ustvarjanje replike za kopiranje, imenovano z možnostjo -S, pred zagonom varnostne kopije.
  • -S - določa ime repne replike.

$ 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. Ko je postopek varnostnega kopiranja končan, mora biti novi podatkovni imenik v pripravljenosti na strežniku videti tako kot na posnetku zaslona. Ustvari se signal pripravljenosti in nastavitve povezave se dodajo postgresql.auto.conf. Vsebino lahko navedete z ukazom ls.

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

Podvojeni podrejeni sistem se bo zagnal v načinu\"Hot Standby", če je parameter hot_standby nastavljen na on (privzeta vrednost) v postgresql.conf in je v podatkovnem imeniku prisotna datoteka standby.signal.

9. Zdaj na glavnem strežniku bi morali videti režo za kopiranje, imenovano pgstandby1, ko odprete pogled pg_replication_slots, kot sledi.

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

10. Če si želite ogledati nastavitve povezave, dodane v datoteki postgresql.auto.conf, uporabite ukaz cat.

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

11. Zdaj zaženite običajne operacije baze podatkov v pripravljenosti, tako da zaženete storitev PostgreSQL, kot sledi.

# systemctl start postgresql-12

3. korak: Testiranje podvajanja pretakanja PostgreSQL

12. Ko je povezava med glavno enoto in pripravljenostjo uspešno vzpostavljena, boste v stanju pripravljenosti na strežniku videli postopek sprejemnika WAL s stanjem pretakanja. To lahko preverite v pogledu pg_stat_wal_receiver.

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

in ustrezen postopek pošiljatelja WAL v glavnem/primarnem strežniku s stanjem pretoka in sinhronizacijskim stanjem async, lahko preverite ta pogled pg_stat_replication pg_stat_replication.

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

Na zgornjem posnetku zaslona je kopiranje pretakanja asinhrono. V naslednjem poglavju bomo prikazali, kako po želji omogočiti sinhrono podvajanje.

13. Zdaj preizkusite, ali replikacija deluje dobro, tako da ustvarite preskusno bazo podatkov v glavnem strežniku in preverite, ali obstaja v pripravljenosti.
[master] postgres = # USTVARI PODATKOVNO BAZO tecmint;
[pripravljenost] postgres = #\l

Izbirno: Omogočanje sinhrone replikacije

14. Sinhrono kopiranje ponuja možnost hkratnega sprejemanja transakcije (ali zapisovanja podatkov) v primarno bazo podatkov in stanje pripravljenosti/repliko. To potrjuje le, da je transakcija uspešna, ko so bile vse spremembe, ki jih naredi transakcija, prenesene na enega ali več sinhronih strežnikov v pripravljenosti.

Če želite omogočiti sinhrono podvajanje, mora biti sinhronski_komit nastavljen tudi na on (kar je privzeta vrednost, zato ni potrebe po nobeni spremembi), prav tako pa morate na parameter, ki ni sinhrono_standby_names, nastaviti na prazno vrednost. Za ta vodnik bomo nastavili vse.

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

15. Nato znova naložite storitev PostgreSQL 12, da uveljavite nove spremembe.

# systemctl reload postgresql-12.service

16. Zdaj, ko ponovno pošljete postopek pošiljatelja WAL na primarnem strežniku, mora prikazati stanje pretakanja in sinhronizirano stanje sinhronizacije.

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

Prišli smo do konca tega vodnika. Pokazali smo, kako v CentOS-u 8 nastaviti glavno pripravljenost za kopiranje pretočne baze podatkov v stanju pripravljenosti. Pokrili smo tudi, kako omogočiti sinhrono replikacijo v gruči baz podatkov PostgreSQL.

Obstaja veliko načinov kopiranja in vedno lahko izberete rešitev, ki ustreza vašemu okolju IT in/ali zahtevam, specifičnim za aplikacijo. Za več podrobnosti pojdite na strežnike v stanju pripravljenosti za prijavo pošiljanja v dokumentaciji PostgreSQL 12.