Kako konfigurirati replikaciju strujanja PostgreSQL 12 u CentOS 8


PostgreSQL baza podataka podržava nekoliko rješenja replikacije za izgradnju visoko dostupnih, skalabilnih, aplikacija otpornih na kvarove, od kojih je jedna WAL (poštarina) dostava. Ovo rješenje omogućuje implementaciju rezervnog poslužitelja korištenjem otpreme dnevnika zasnovane na datotekama ili repliciranja strujanja, ili gdje je to moguće, kombinacijom oba pristupa.

Uz strujanje replikacije, poslužitelj baze podataka u stanju pripravnosti (replikacija slave) konfiguriran je za povezivanje s glavnim/primarnim poslužiteljem, koji WAL zapise usmjerava u stanje pripravnosti dok se generiraju, bez čekanja da se WAL datoteka popuni.

Prema zadanim postavkama replikacija strujanja je asinhrona gdje se podaci zapisuju na poslužitelj (e) u stanju pripravnosti nakon što je transakcija izvršena na primarnom poslužitelju. To znači da postoji malo kašnjenje između izvršavanja transakcije na glavnom poslužitelju i promjena koje postaju vidljive na čekanju poslužitelja. Jedna od loših strana ovog pristupa je da se u slučaju pada glavnog poslužitelja neovlaštene transakcije možda neće replicirati i to može prouzročiti gubitak podataka.

Ovaj vodič pokazuje kako postaviti Postgresql 12 replikaciju streaminga u glavnom stanju u pripravnosti na CentOS 8. Upotrijebit ćemo "utore za replikaciju" u stanju čekanja kao rješenje kako bismo izbjegli da glavni poslužitelj reciklira stare WAL segmente prije nego što ih je standby primio.

Imajte na umu da u usporedbi s drugim metodama, mjesta za replikaciju zadržavaju samo onaj broj segmenata za koji je poznato da je potreban.

Ovaj vodič pretpostavlja da ste se povezali sa svojim glavnim i rezervnim poslužiteljima baze podataka kao root putem SSH-a (koristite naredbu Sudo ako je potrebno ako ste povezani kao normalan korisnik s administrativnim pravima):

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

Na oba poslužitelja baze podataka mora biti instaliran Postgresql 12, inače pogledajte: Kako instalirati PostgreSQL i pgAdmin u CentOS 8.

Napomena: PostgreSQL 12 dolazi s velikim promjenama u implementaciji i konfiguraciji replikacije, kao što su zamjena recovery.conf i pretvorba параметра recovery.conf u normalne konfiguracijske parametre PostgreSQL, što olakšava konfiguriranje replikacije klastera.

Korak 1: Konfiguriranje PostgreSQL glavnog/primarnog poslužitelja baze podataka

1. Na glavnom poslužitelju prebacite se na račun postgres sustava i konfigurirajte IP adrese na kojima će glavni poslužitelj slušati veze s klijenata.

U ovom ćemo slučaju koristiti * što znači sve.

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

Naredba ALTER SYSTEM SET SQL snažna je značajka za promjenu konfiguracijskih parametara poslužitelja, izravno s SQL upitom. Konfiguracije se spremaju u datoteku postgresql.conf.auto koja se nalazi u korijenu mape podataka (npr./Var/lib/pgsql/12/data /) i čitaju se kao dodatak onima pohranjenim u postgresql.conf. No, konfiguracije u prvom imaju prednost nad onima u kasnijim i ostalim povezanim datotekama.

2. Zatim stvorite ulogu replikacije koja će se koristiti za veze s poslužitelja u stanju pripravnosti na glavni poslužitelj, pomoću programa createuser. U sljedećoj naredbi zastava -P traži lozinku za novu ulogu, a -e odjekuje naredbe koje createuser generira i šalje na poslužitelj baze podataka.

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

3. Zatim unesite sljedeći unos na kraju /var/lib/pgsql/12/data/pg_hba.conf konfiguracijske datoteke za provjeru autentičnosti klijenta s poljem baze podataka postavljenim na replikaciju kao što je prikazano na snimci zaslona.

host    replication     replicator      10.20.20.8/24     md5

4. Sada ponovo pokrenite uslugu Postgres12 pomoću sljedeće naredbe systemctl da primijenite promjene.

# systemctl restart postgresql-12.service

5. Dalje, ako imate pokrenutu uslugu vatrozida, u konfiguraciju vatrozida morate dodati uslugu Postgresql kako biste glavnom dozvolili zahtjeve poslužitelja u stanju čekanja.

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

Korak 2: Izrada osnovne sigurnosne kopije za pokretanje traka u stanju pripravnosti

6. Dalje, trebate napraviti osnovnu sigurnosnu kopiju glavnog poslužitelja od stanja čekanja; ovo pomaže u pokretanju poslužitelja u stanju čekanja. Morate zaustaviti postgresql 12 uslugu na poslužitelju u stanju čekanja, prebaciti se na postgres korisnički račun, sigurnosno kopirati direktorij podataka (/ var/lib/pgsql/12/data /), a zatim izbrisati sve ispod njega kako je prikazano, prije nego što uzmete bazu sigurnosna kopija.

# 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. Zatim upotrijebite alat pg_basebackup da biste preuzeli osnovnu sigurnosnu kopiju s pravim vlasništvom (korisnik sustava baze podataka, tj. Postgres, unutar korisničkog računa Postgres) i s pravim dozvolama.

U sljedećoj naredbi, opcija:

  • -h - određuje hosta koji je glavni poslužitelj.
  • -D - određuje direktorij podataka.
  • -U - određuje korisnika veze.
  • -P - omogućuje izvještavanje o napretku.
  • -v - omogućuje opsežni način rada.
  • -R - omogućuje stvaranje konfiguracije oporavka: Stvara datoteku standby.signal i dodaje postavke veze na postgresql.auto.conf u direktoriju podataka.
  • -X - koristi se za uključivanje potrebnih datoteka dnevnika dnevnika pisanja unaprijed (WAL datoteka) u sigurnosnu kopiju. Vrijednost toka znači strujanje WAL-a dok se izrađuje sigurnosna kopija.
  • -C - omogućuje stvaranje utora za replikaciju imenovanog opcijom -S prije pokretanja sigurnosne kopije.
  • -S - navodi naziv utora replikacije.

$ 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. Kada je postupak sigurnosne kopije gotov, novi direktorij podataka na poslužitelju u stanju čekanja trebao bi izgledati tako na snimci zaslona. Stvara se signal standby.s i postavke veze dodaju se na postgresql.auto.conf. Sadržaj možete navesti pomoću naredbe ls.

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

Podređeni uređaj za replikaciju pokrenut će se u načinu „Hot Standby“ ako je parametar hot_standby postavljen na on (zadana vrijednost) u postgresql.conf i ako je u podatkovnom direktoriju prisutna datoteka standby.signal.

9. Sada natrag na glavnom poslužitelju, trebali biste moći vidjeti utor za replikaciju zvan pgstandby1 kada otvorite prikaz pg_replication_slots na sljedeći način.

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

10. Da biste pogledali postavke veze dodane u datoteci postgresql.auto.conf, upotrijebite naredbu cat.

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

11. Sada započnite s normalnim operacijama baze podataka na pripravnom poslužitelju pokretanjem usluge PostgreSQL kako slijedi.

# systemctl start postgresql-12

Korak 3: Testiranje postgreSQL streaming replikacije

12. Nakon što se uspješno uspostavi veza između glavnog i pripravnog stanja, vidjet ćete postupak WAL prijamnika na poslužitelju u stanju čekanja sa statusom strujanja, to možete provjeriti pomoću prikaza pg_stat_wal_receiver.

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

i odgovarajući postupak pošiljatelja WAL-a na glavnom/primarnom poslužitelju sa stanjem strujanja i stanjem sinkronizacije async-a, možete provjeriti ovaj prikaz pg_stat_replication pg_stat_replication.

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

Na gornjoj snimci zaslona replikacija strujanja je asinkrona. U sljedećem odjeljku pokazat ćemo kako po želji omogućiti sinkronu replikaciju.

13. Sada testirajte radi li replikacija u redu tako što ćete stvoriti testnu bazu podataka na glavnom poslužitelju i provjerite postoji li na poslužitelju u stanju čekanja.
[master] postgres = # IZRADI BAZU PODATAKA tecmint;
[stanje čekanja] postgres = #\l

Izborno: Omogućavanje sinkrone replikacije

14. Sinkrona replikacija nudi mogućnost istovremenog izvršavanja transakcije (ili upisivanja podataka) u primarnu bazu podataka i stanje pripravnosti/repliku. Potvrđuje samo da je transakcija uspješna kada su sve promjene izvršene transakcijom prenesene na jedan ili više sinkronih poslužitelja u stanju čekanja.

Da biste omogućili sinkronu replikaciju, sinkron_commit također mora biti postavljen na uključeno (što je zadana vrijednost, dakle nema potrebe za bilo kakvim promjenama), a parametar synchronous_standby_names morate postaviti na praznu vrijednost. Za ovaj ćemo vodič postaviti sve.

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

15. Zatim ponovo učitajte uslugu PostgreSQL 12 da biste primijenili nove promjene.

# systemctl reload postgresql-12.service

16. Sada, kada još jednom upitate postupak pošiljatelja WAL-a na primarnom poslužitelju, trebao bi prikazati stanje strujanja i sync_state sync.

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

Došli smo do kraja ovog vodiča. Pokazali smo kako postaviti PostgreSQL 12 replikaciju glavnog protoka baze podataka u stanju pripravnosti u CentOS-u 8. Također smo opisali kako omogućiti sinkronu replikaciju u klasteru baza podataka PostgreSQL.

Mnogo je načina replikacije i uvijek možete odabrati rješenje koje udovoljava vašem IT okruženju i/ili zahtjevima specifičnim za aplikaciju. Za više pojedinosti idite na Rezervni poslužitelji za prijavu otpreme u dokumentaciji PostgreSQL 12.