Kuidas konfigureerida PostgreSQL 12 voogesituse replikatsiooni CentOS 8-s


PostgreSQL andmebaas toetab mitut replikatsioonilahendust kõrge kättesaadavusega, skaleeritavate, tõrketaluvate rakenduste loomiseks, millest üks on Write-Ahead Log (WAL) Shipping. See lahendus võimaldab ooteserveri juurutamiseks kasutada failipõhist logi saatmist või voogesituse replikatsiooni või võimaluse korral mõlema lähenemise kombinatsiooni.

Voogesituse replikatsiooni korral on konfigureeritud ooterežiimi (replikatsiooni alam) andmebaasiserver ühenduse loomiseks põhi-/põhiserveriga, mis voogesitab WAL-kirjed nende loomisel ooterežiimi, ootamata WAL-faili täitmist.

Vaikimisi on voogesituse replikatsioon asünkroonne, kui andmed kirjutatakse ooteserverisse (serveritesse) pärast tehingu sooritamist esmases serveris. See tähendab, et põhiserveris tehingu sooritamise ja ooterežiimil nähtavate muudatuste vahel on väike viivitus. Selle lähenemisviisi üks negatiivne külg on see, et kui põhiserver jookseb kokku, ei pruugi toimumata tehinguid korrata ja see võib põhjustada andmete kadu.

See juhend näitab, kuidas seadistada PostGresql 12 peaolekus ooterežiimis voogesituse replikatsioon CentOS 8-le. Lahendusena kasutame ooterežiimis “replikatsiooniaegu”, et vältida põhiserveri vanade WAL-segmentide taaskasutust enne, kui ooterežiim on need kätte saanud.

Pange tähele, et võrreldes teiste meetoditega säilitavad replikatsioonipesad ainult teadaolevalt vajalike segmentide arvu.

Selles juhendis eeldatakse, et olete SSH kaudu juuriga ühendatud põhi- ja ooterežiimi andmebaasiserveritega (vajadusel kasutage käsku Sudo, kui olete ühendatud tavalise administraatoriõigustega kasutajana):

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

Mõlemal andmebaasiserveril peab olema installitud Postgresql 12, vastasel juhul vaadake teemat: Kuidas installida PostGreSQL ja pgAdmin CentOS 8-s.

Märkus. PostgreSQL 12 sisaldab suuri muudatusi replikatsiooni juurutamises ja konfiguratsioonis, nagu näiteks recovery.conf asendamine ja recovery.conf parameetrite teisendamine tavapärasteks PostgreSQL konfiguratsiooniparameetriteks, mis muudab klastri replikatsiooni konfigureerimise palju lihtsamaks.

1. samm: PostgreSQL Master/Primary Database Serveri konfigureerimine

1. Lülitage põhiserveris postgres-süsteemi kontole ja konfigureerige IP-aadress (id), mida põhiserver klientide ühendusi kuulab.

Sel juhul kasutame * , mis tähendab kõiki.

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

Käsk ALTER SYSTEM SET SQL on võimas funktsioon serveri konfiguratsiooniparameetrite muutmiseks otse SQL-päringuga. Konfiguratsioonid salvestatakse andmekausta juurfaili postgresql.conf.auto (nt/var/lib/pgsql/12/data /) ja loetakse lisaks postgresql.conf-i salvestatutele. Kuid eelmiste seadistused on ülimuslikud hilisemate ja muude seotud failide omadega võrreldes.

2. Seejärel looge loomisprogrammi abil replikatsiooniroll, mida kasutatakse ühenduse loomiseks ooteserverist põhiserveriga. Järgmises käsus küsib lipp -P uue rolli jaoks parooli ja -e kajab käsklused, mille looja kasutaja genereerib ja andmebaasiserverisse saadab.

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

3. Seejärel sisestage järgmine kirje /var/lib/pgsql/12/data/pg_hba.conf kliendi autentimise konfiguratsioonifaili lõppu, kui andmebaasi väli on seatud kopeerimiseks, nagu ekraanipildil näidatud.

host    replication     replicator      10.20.20.8/24     md5

4. Nüüd taaskäivitage teenus Postgres12, kasutades muudatuste rakendamiseks järgmist käsku systemctl.

# systemctl restart postgresql-12.service

5. Järgmisena peate tulemüüri teenuse töötamise ajal lisama tulemüüri konfiguratsioonis teenuse Postgresql, et lubada ooteserveri taotlusi põhihaldurile.

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

2. samm: baasvarunduse loomine ooteserveri alglaadimiseks

6. Järgmisena peate ooteserverist tegema põhiserveri baaskoopia; see aitab ooteserverit käivitada. Enne baasi võtmist peate ooterežiimiserveris peatama postgresql 12 teenuse, lülituma postgresi kasutajakontole, varundama andmekataloog (/ var/lib/pgsql/12/data /), seejärel kustutama kõik selle all näidatult. varundamine.

# 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. Seejärel kasutage tööriista pg_basebackup baasi varukoopia tegemiseks õige omandiga (andmebaasisüsteemi kasutaja, st Postgres, Postgresi kasutajakonto sees) ja õigete õigustega.

Järgmises käsus suvand:

  • -h - määrab host, mis on põhiserver.
  • -D - määrab andmekataloogi.
  • -U - määrab ühenduse kasutaja.
  • -P - võimaldab eduaruandeid.
  • -v - võimaldab üksikasjalikku režiimi.
  • -R - võimaldab luua taastekonfiguratsiooni: loob standby.signal-faili ja lisab ühenduse seaded andmekataloogi postgresql.auto.conf.
  • -X - kasutatakse vajalike ettemakstavate logifailide (WAL-failide) lisamiseks varukoopiasse. Voo väärtus tähendab WAL-i voogesitamist varukoopia loomise ajal.
  • -C - võimaldab enne varundamise alustamist luua replikatsioonipesa, mille nimi on -S-valik.
  • -S - määrab replikatsioonipesa nime.

$ 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. Kui varundamisprotsess on tehtud, peaks ooteserveri uus andmekataloog ekraanipildil selline välja nägema. Luuakse standby.signal ja ühenduse seaded lisatakse postgresql.auto.conf. Selle sisu saate loetleda käsuga ls.

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

Replikatsiooni ori töötab režiimis „Kuum ooterežiim”, kui parameeter hot_standby on postgresql.conf-s sisse lülitatud (vaikeväärtus) ja andmekataloogis on standby.signal-fail.

9. Nüüd tagasi põhiserverisse peaksite nägema pg_replication_slots vaate avamisel järgmist replikatsioonipilu nimega pgstandby1.

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

10. Faili postgresql.auto.conf lisatud ühenduse seadete kuvamiseks kasutage käsku cat.

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

11. Alustage nüüd tavapäraseid andmebaasitoiminguid ooteserveris, käivitades teenuse PostgreSQL järgmiselt.

# systemctl start postgresql-12

3. samm: PostgreSQL voogesituse replikatsiooni testimine

12. Kui põhi- ja ooterežiimi vaheline ühendus on edukalt loodud, näete ooteserveris WAL-vastuvõtjaprotsessi voogesituse olekuga. Seda saate kontrollida vaate pg_stat_wal_receiver abil.

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

ja vastavat WAL-saatjaprotsessi põhi-/põhiserveris voogesituse oleku ja asünkroonimise sünkroonjaamaga saate kontrollida seda pg_stat_replication pg_stat_replication vaadet.

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

Ülaltoodud ekraanipildilt on voogesituse replikatsioon asünkroonne. Järgmises jaotises demonstreerime, kuidas sünkroonse replikatsiooni valikuliselt lubada.

13. Nüüd kontrollige, kas replikatsioon töötab hästi, luues põhiserverisse testi andmebaasi ja kontrollige, kas see on ooteserveris olemas.
[master] postgres = # CREATE DATABASE tecmint;
[ooterežiimis] postgres = #\l

Valikuline: sünkroonse replikatsiooni lubamine

14. Sünkroonne replikatsioon pakub võimalust teha tehing (või andmeid kirjutada) esmasesse andmebaasi ja ooterežiimi/koopiat üheaegselt. See kinnitab tehingu õnnestumist alles siis, kui kõik tehinguga tehtud muudatused on viidud ühte või mitmesse sünkroonsesse ooteserverisse.

Sünkroonse replikatsiooni lubamiseks tuleb ka synchronous_commit sisse lülitada (mis on vaikeväärtus, seega pole vaja muudatusi teha) ning samuti peate seadma parameetri synchronous_standby_names väärtusele mittetühi. Selle juhendi jaoks määrame selle kõigile.

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

15. Seejärel laadige uute muudatuste rakendamiseks uuesti teenus PostgreSQL 12.

# systemctl reload postgresql-12.service

16. Nüüd, kui esitate WAL-i saatjaprotsessile veel kord päringu esmases serveris, peaks see näitama voogesituse olekut ja sünkroonimise sünkroniseerimisjaama.

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

Oleme jõudnud selle juhendi lõpuni. Oleme näidanud, kuidas seadistada PostGreSQL 12 peaolekus ooterežiimi andmebaasi voogesituse replikatsioon CentOS 8-s. Samuti käsitlesime, kuidas lubada sünkroonne replikatsioon PostgreSQL-i andmebaasiklastris.

Replikatsiooni on palju ja saate alati valida lahenduse, mis vastab teie IT-keskkonnale ja/või rakenduspõhistele nõuetele. Lisateabe saamiseks minge PostgreSQL 12 dokumentatsioonis jaotisse Log-Shipping Standby Servers.