Kuinka määrittää PostgreSQL 12 -suoratoiston replikointi CentOS 8:ssa


PostgreSQL-tietokanta tukee useita replikointiratkaisuja korkean käytettävyyden, skaalautuvien, vikasietoisten sovellusten rakentamiseen, joista yksi on Eteenpäin kirjoitusloki (WAL). ) Laivaus. Tämä ratkaisu mahdollistaa valmiustilan palvelimen toteuttamisen käyttämällä tiedostopohjaista lokien toimitusta tai suoratoiston replikointia tai, mikäli mahdollista, molempien yhdistelmää.

Suoratoistoreplikaatiossa valmiustilan (replikointiorja) -tietokantapalvelin määritetään muodostamaan yhteys isäntä-/ensisijaiseen palvelimeen, joka suoratoistaa WAL-tietueet valmiustilaan sitä mukaa kun niitä luodaan odottamatta WAL-palvelinta. tiedosto täytettäväksi.

Suoratoiston replikointi on oletusarvoisesti asynkroninen, jossa tiedot kirjoitetaan valmiuspalvelimille sen jälkeen, kun tapahtuma on tehty ensisijaisella palvelimella. Tämä tarkoittaa, että tapahtuman suorittamisen pääpalvelimessa ja muutosten näkymisen välillä valmiuspalvelimella on pieni viive. Yksi tämän lähestymistavan haittapuoli on, että jos pääpalvelin kaatuu, sitomattomia tapahtumia ei ehkä voida replikoida, mikä voi aiheuttaa tietojen menetyksen.

Tässä oppaassa kerrotaan, kuinka Postgresql 12 -master-valmiustilassa oleva suoratoistoreplikaatio määritetään CentOS 8:ssa. Käytämme valmiustilassa "replikointipaikkoja" ratkaisuna estääksemme pääpalvelinta kierrättämästä vanhoja WAL-segmenttejä ennen kuin valmiustila on vastaanottanut ne.

Huomaa, että muihin menetelmiin verrattuna replikointipaikat säilyttävät vain tarvittavan määrän segmenttejä.

Testausympäristö:

Tässä oppaassa oletetaan, että olet muodostanut yhteyden isäntä- ja valmiustilatietokantapalvelimiin pääkäyttäjänä SSH:n kautta (käytä Sudo-komentoa tarvittaessa, jos olet yhteydessä tavallisena käyttäjänä, jolla on järjestelmänvalvojan oikeudet):

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

Molemmissa tietokantapalvelimissa on oltava asennettuna Postgresql 12. Muussa tapauksessa katso: PostgreSQL:n ja pgAdminin asentaminen CentOS 8:aan.

Huomaa: PostgreSQL 12 sisältää suuria muutoksia replikaation toteutukseen ja määritykseen, kuten recovery.conf- ja recovery.conf-parametrien muuntaminen tavallisiksi PostgreSQL-määritysparametreiksi, mikä helpottaa klusterin replikoinnin määrittämistä.

Vaihe 1: Määritä PostgreSQL Master/Primary Database Server

1. Vaihda pääpalvelimella postgres-järjestelmätiliin ja määritä IP-osoitteet, joissa pääpalvelin kuuntelee asiakkaiden yhteyksiä.

Tässä tapauksessa käytämme *, joka tarkoittaa kaikkea.

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

ALTER SYSTEM SET SQL-komento on tehokas ominaisuus, jolla voidaan muuttaa palvelimen määritysparametreja suoraan SQL-kyselyn avulla. Määritykset tallennetaan tiedostoon postgresql.conf.auto, joka sijaitsee tietokansion juuressa (esim. /var/lib/pgsql/12/data/) ja lue lisäys. niihin, jotka on tallennettu tiedostoon postgresql.conf. Mutta edellisen kokoonpanot ovat etusijalla myöhemmissä ja muissa aiheeseen liittyvissä tiedostoissa.

2. Luo sitten replikointirooli, jota käytetään yhteyksissä valmiustilapalvelimesta pääpalvelimeen createuser-ohjelman avulla. Seuraavassa komennossa lippu -P pyytää salasanaa uudelle roolille ja -e toistaa komennot, jotka createuser luo ja lähettää tietokantapalvelimelle.

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

3. Kirjoita sitten seuraava merkintä /var/lib/pgsql/12/data/pg_hba.conf-asiakkaan todennusmääritystiedoston loppuun tietokantakentällä replikointi kuvakaappauksen mukaisesti.

host    replication     replicator      10.20.20.8/24     md5

4. Käynnistä nyt Postgres12-palvelu uudelleen käyttämällä seuraavaa systemctl-komentoa muutosten käyttöönottamiseksi.

systemctl restart postgresql-12.service

5. Seuraavaksi, jos sinulla on palomuuri-palvelu käynnissä, sinun on lisättävä Postgresql-palvelu palomuurin kokoonpanoon salliaksesi pyynnöt valmiustilapalvelimelta isäntäpalvelimelle.

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

Vaihe 2: Perusvarmuuskopion tekeminen valmiustilan palvelimen käynnistämiseksi

6. Seuraavaksi sinun on tehtävä perusvarmuuskopio pääpalvelimesta valmiustilapalvelimesta. tämä auttaa käynnistämään valmiustilan palvelimen. Sinun on pysäytettävä valmiuspalvelimen postgresql 12 -palvelu, vaihdettava postgres-käyttäjätiliin, varmuuskopioitava tietohakemisto (/var/lib/pgsql/12/data/) ja poistettava sitten kaikki sen alla olevat tiedot. kuvan mukaisesti ennen perusvarmuuskopion ottamista.

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. Käytä sitten pg_basebackup-työkalua ottaaksesi perusvarmuuskopion oikealla omistajuudella (tietokantajärjestelmän käyttäjä, eli Postgres, Postgres-käyttäjätili) ja oikeilla käyttöoikeuksilla.

Seuraavassa komennossa vaihtoehto:

  • -h – määrittää isäntäpalvelimen, joka on pääpalvelin.
  • -D – määrittää tietohakemiston.
  • -U – määrittää yhteyden käyttäjän.
  • -P – mahdollistaa edistymisraportoinnin.
  • -v – ottaa käyttöön monisanaisen tilan.
  • -R – mahdollistaa palautusmääritysten luomisen: Luo standby.signal-tiedoston ja lisää yhteysasetukset tiedostoon postgresql.auto.conf tietojen alle. hakemistosta.
  • -X – käytetään sisällyttämään vaaditut eteenpäinkirjoitettavat lokitiedostot (WAL-tiedostot) varmuuskopioon. Virran arvo tarkoittaa WAL:n suoratoistoa varmuuskopion luomisen aikana.
  • -C – mahdollistaa valitsimella -S nimetyn replikointipaikan luomisen ennen varmuuskopioinnin aloittamista.
  • -S – määrittää replikointipaikan nimen.
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. Kun varmuuskopiointi on valmis, valmiustilan palvelimen uuden tietohakemiston pitäisi näyttää kuvakaappauksessa näkyvältä. Luodaan standby.signal ja yhteysasetukset liitetään tiedostoon postgresql.auto.conf. Voit luetella sen sisällön ls-komennolla.

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

Replikointiorja toimii Hot Standby -tilassa, jos hot_standby-parametri on asetettu päälle (oletusarvo) tiedostossa postgresql.conf ja tietohakemistossa on standby.signal-tiedosto.

9. Nyt takaisin pääpalvelimella sinun pitäisi nähdä replikointipaikka nimeltä pgstandby1, kun avaat pg_replication_slots-näkymän seuraavasti.

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

10. Jos haluat tarkastella postgresql.auto.conf-tiedostoon liitettyjä yhteysasetuksia, käytä cat-komentoa.

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

11. Aloita nyt normaalit tietokantatoiminnot valmiuspalvelimella käynnistämällä PostgreSQL-palvelu seuraavasti.

systemctl start postgresql-12

Vaihe 3: PostgreSQL-suoratoiston replikoinnin testaus

12. Kun yhteys on muodostettu onnistuneesti isäntälaitteen ja valmiustilan välille, näet WAL-vastaanotinprosessin valmiustilapalvelimessa, jonka tila on suoratoisto. Voit tarkistaa tämän. käyttämällä pg_stat_wal_receiver-näkymää.

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

ja vastaavan WAL-lähetysprosessin isäntä-/ensisijaisessa palvelimessa, jonka tila on suoratoisto ja sync_state async, voit tarkistaa tämän pg_stat_replication pg_stat_replication -näkymän.

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

Yllä olevan kuvakaappauksen mukaan suoratoiston replikointi on asynkroninen. Seuraavassa osiossa esittelemme, kuinka synkronoitu replikointi otetaan valinnaisesti käyttöön.

13. Testaa nyt, toimiiko replikointi hyvin, luomalla testitietokanta pääpalvelimeen ja tarkistamalla, onko se olemassa valmiuspalvelimella.
[master]postgres=# CREATE DATABASE tecmint;
[valmiustila]postgres=# \l

Valinnainen: Synkronisen replikoinnin ottaminen käyttöön

14. Synkroninen replikointi tarjoaa mahdollisuuden sitoa tapahtuma (tai kirjoittaa tietoja) ensisijaiseen tietokantaan ja valmiustilaan/replikaan samanaikaisesti. Se vahvistaa tapahtuman onnistumisen vain, kun kaikki tapahtuman tekemät muutokset on siirretty yhdelle tai useammalle synkroniselle valmiustilapalvelimelle.

Synkronisen replikoinnin mahdollistamiseksi synchronous_commit on myös oltava päällä (joka on oletusarvo, joten mitään muutoksia ei tarvita) ja sinun on myös asetettava parametri synchronous_standby_names. ei-tyhjään arvoon. Tässä oppaassa asetamme sen kaikille.

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

15. Lataa sitten PostgreSQL 12 -palvelu uudelleen ottaaksesi uudet muutokset käyttöön.

systemctl reload postgresql-12.service

16. Kun nyt kysyt WAL-lähetysprosessia ensisijaisella palvelimella, sen pitäisi näyttää suoratoiston tila ja synkronointitilasynkronointi.

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

Olemme tulleet tämän oppaan loppuun. Olemme näyttäneet, kuinka PostgreSQL 12 -tietokannan master-valmiustilatoiston replikointi määritetään CentOS 8:ssa. Käsittelimme myös, kuinka synkronoitu replikointi otetaan käyttöön PostgreSQL-tietokantaklusterissa.

Replikointia on monia käyttötapoja, ja voit aina valita ratkaisun, joka vastaa IT-ympäristöäsi ja/tai sovelluskohtaisia vaatimuksia. Lisätietoja on PostgreSQL 12 -dokumentaation kohdassa Log-Shipping Standby Servers.