Weboldal keresés

A PostgreSQL 12 streaming replikációjának konfigurálása a CentOS 8 rendszerben


A PostgreSQL adatbázis számos replikációs megoldást támogat magas rendelkezésre állású, méretezhető, hibatűrő alkalmazások létrehozásához, amelyek közül az egyik a előreírási napló (WAL). ) Szállítás. Ez a megoldás lehetővé teszi egy készenléti kiszolgáló megvalósítását fájlalapú naplószállítással vagy adatfolyam-replikációval, vagy ahol lehetséges, a két megközelítés kombinációjával.

A streaming replikációnál egy készenléti (replikációs szolga) adatbázis-kiszolgáló úgy van konfigurálva, hogy csatlakozzon a fő/elsődleges kiszolgálóhoz, amely a WAL rekordokat a készenléti állapotba továbbítja a generálás során, anélkül, hogy megvárná a WAL-t. fájlt kell kitölteni.

Alapértelmezés szerint a streaming replikáció aszinkron, ahol az adatok a készenléti kiszolgáló(k)ra íródnak, miután az elsődleges kiszolgálón végrehajtották a tranzakciót. Ez azt jelenti, hogy egy kis késés telik el a főkiszolgálón történő tranzakció végrehajtása és a változások láthatóvá válása között a készenléti kiszolgálón. Ennek a megközelítésnek az egyik hátránya, hogy ha a főkiszolgáló összeomlik, előfordulhat, hogy a nem véglegesített tranzakciók nem replikálódnak, és ez adatvesztést okozhat.

Ez az útmutató bemutatja, hogyan állíthat be Postgresql 12 master-standby streaming replikációt CentOS 8 rendszeren. A készenléti állapothoz „replikációs helyeket” fogunk használni, hogy elkerüljük, hogy a főkiszolgáló újrahasznosítsa a régi WAL szegmenseket, mielőtt a készenléti állapot megkapta azokat.

Vegye figyelembe, hogy más módszerekkel összehasonlítva a replikációs helyek csak annyi szegmenst tartanak meg, amennyi szükséges.

Tesztkörnyezet:

Ez az útmutató feltételezi, hogy gyökérként csatlakozott a fő és a készenléti adatbázis-kiszolgálókhoz SSH-on keresztül (ha szükséges, használja a Sudo parancsot, ha normál felhasználóként csatlakozik rendszergazdai jogokkal):

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

Mindkét adatbázis-kiszolgálón telepítve kell lennie a Postgresql 12-nek, ellenkező esetben lásd: A PostgreSQL és a pgAdmin telepítése CentOS 8 rendszerben.

Megjegyzés: A PostgreSQL 12 jelentős változtatásokat tartalmaz a replikáció megvalósításában és konfigurációjában, például a recovery.conf és a a recovery.conf paraméterek átalakítása normál PostgreSQL konfigurációs paraméterekké, ami sokkal könnyebbé teszi a fürtreplikáció konfigurálását.

1. lépés: A PostgreSQL Master/Primary Database Server konfigurálása

1. A főkiszolgálón váltson a postgres rendszerfiókra, és állítsa be azokat az IP-címeket, amelyeken a főkiszolgáló figyelni fogja az ügyfelektől érkező kapcsolatokat.

Ebben az esetben a * értéket fogjuk használni, ami az összeset jelenti.

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

Az ALTER SYSTEM SET SQL parancs egy hatékony szolgáltatás, amellyel közvetlenül egy SQL-lekérdezéssel módosíthatja a szerver konfigurációs paramétereit. A konfigurációkat a rendszer az adatmappa gyökerében található postgresql.conf.auto fájlba menti (pl. /var/lib/pgsql/12/data/), és olvassa el a kiegészítést. a postgresql.conf fájlban tároltakhoz. De az előbbi konfigurációi elsőbbséget élveznek a későbbi konfigurációkkal és más kapcsolódó fájlokkal szemben.

2. Ezután a createuser programmal hozzon létre egy replikációs szerepet, amelyet a készenléti kiszolgáló és a főkiszolgáló közötti kapcsolatokhoz használ. A következő parancsban a -P jelző jelszót kér az új szerepkörhöz, a -e pedig visszhangozza a createuser által generált és az adatbázis-kiszolgálónak elküldött parancsokat.

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

3. Ezután írja be a következő bejegyzést a /var/lib/pgsql/12/data/pg_hba.conf ügyfél-hitelesítési konfigurációs fájl végén úgy, hogy az adatbázis mező értéke a következő replikáció a képernyőképen látható módon.

host    replication     replicator      10.20.20.8/24     md5

4. Most indítsa újra a Postgres12 szolgáltatást a következő systemctl paranccsal a módosítások alkalmazásához.

systemctl restart postgresql-12.service

5. Ezután, ha fut a tűzfal szolgáltatás, hozzá kell adnia a Postgresql szolgáltatást a tűzfalkonfigurációhoz, hogy engedélyezze a készenléti kiszolgálótól érkező kéréseket a főkiszolgálóhoz.

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

2. lépés: Alap biztonsági másolat készítése a készenléti kiszolgáló indításához

6. Ezután a készenléti kiszolgálóról egy alap biztonsági másolatot kell készítenie a főkiszolgálóról; ez segít a készenléti kiszolgáló rendszerindításában. A készenléti szerveren le kell állítani a postgresql 12 szolgáltatást, át kell váltani a postgres felhasználói fiókra, biztonsági másolatot kell készíteni az adatkönyvtárról (/var/lib/pgsql/12/data/), majd törölni kell mindent, ami alatta van. az ábrán látható módon, mielőtt elkészíti az alap biztonsági másolatot.

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. Ezután használja a pg_basebackup eszközt, hogy a megfelelő tulajdonjoggal (az adatbázis-rendszer felhasználója, azaz a Postgres a on belül) vegye át az alap biztonsági másolatot. Postgres felhasználói fiókkal) és a megfelelő jogosultságokkal.

A következő parancsban az opció:

  • -h – meghatározza a főkiszolgálót.
  • -D – az adatkönyvtárat adja meg.
  • -U – a kapcsolat felhasználóját határozza meg.
  • -P – folyamatjelentést tesz lehetővé.
  • -v – lehetővé teszi a bőbeszédű módot.
  • -R – lehetővé teszi a helyreállítási konfiguráció létrehozását: Létrehoz egy standby.signal fájlt, és hozzáfűzi a kapcsolati beállításokat a postgresql.auto.conf fájlhoz az adatok alatt Könyvtár.
  • -X – a szükséges előreírási naplófájlok (WAL-fájlok) biztonsági mentésbe való felvételére szolgál. A stream értéke a WAL adatfolyam továbbítását jelenti a biztonsági másolat létrehozása közben.
  • -C – lehetővé teszi a -S paraméterrel elnevezett replikációs slot létrehozását a biztonsági mentés megkezdése előtt.
  • -S – a replikációs hely nevét adja meg.
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. Amikor a biztonsági mentési folyamat befejeződött, a készenléti kiszolgálón lévő új adatkönyvtárnak úgy kell kinéznie, mint a képernyőképen. Létrejön egy standby.signal, és a kapcsolati beállítások hozzá lesznek fűzve a postgresql.auto.conf fájlhoz. A tartalmát az ls paranccsal listázhatja.

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

A replikációs slave „Hot Standby ” módban fog futni, ha a hot_standby paraméter be van kapcsolva (az alapértelmezett érték) a postgresql.conf fájlban, és van egy standby.signal fájl az adatkönyvtárban.

9. Visszatérve a főkiszolgálóra, látnia kell a pgstandby1 nevű replikációs helyet, amikor megnyitja a pg_replication_slots nézetet az alábbiak szerint.

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

10. A postgresql.auto.conf fájlhoz csatolt kapcsolati beállítások megtekintéséhez használja a cat parancsot.

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

11. Most kezdje el a normál adatbázis-műveleteket a készenléti kiszolgálón a PostgreSQL szolgáltatás elindításával az alábbiak szerint.

systemctl start postgresql-12

3. lépés: A PostgreSQL streaming replikáció tesztelése

12. Amint a kapcsolat sikeresen létrejött a fő és a készenléti üzemmód között, a készenléti szerveren WAL vevőfolyamat jelenik meg streaming állapottal, ezt ellenőrizheti. a pg_stat_wal_receiver nézet használatával.

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

és egy megfelelő WAL küldő folyamatot a fő/elsődleges kiszolgálón streaming állapottal és sync_state aszinkronnal, akkor ellenőrizheti ezt a pg_stat_replication pg_stat_replication nézetet.

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

A fenti képernyőképen a streaming replikáció aszinkron. A következő részben bemutatjuk, hogyan lehet opcionálisan engedélyezni a szinkron replikációt.

13. Most tesztelje, hogy a replikáció megfelelően működik-e úgy, hogy létrehoz egy tesztadatbázist a főkiszolgálón, és ellenőrizze, hogy létezik-e a készenléti kiszolgálón.
[master]postgres=# ADATBÁZIS LÉTREHOZÁSA tecmint;
[standby]postgres=# \l

Választható: Szinkron replikáció engedélyezése

14. A szinkron replikáció lehetőséget kínál egy tranzakció véglegesítésére (vagy adatírásra) az elsődleges adatbázisba és a készenléti/replikába egyidejűleg. Csak akkor erősíti meg, hogy a tranzakció sikeres volt, ha a tranzakció által végrehajtott összes módosítás átkerült egy vagy több szinkron készenléti kiszolgálóra.

A szinkron replikáció engedélyezéséhez a synchronous_commit paramétert is be kell kapcsolni (ez az alapértelmezett érték, így nincs szükség változtatásra), és be kell állítani a synchronous_standby_names paramétert is. nem üres értékre. Ebben az útmutatóban mindenre beállítjuk.

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

15. Ezután töltse be újra a PostgreSQL 12 szolgáltatást az új módosítások alkalmazásához.

systemctl reload postgresql-12.service

16. Ha most még egyszer lekérdezi a WAL küldő folyamatot az elsődleges szerveren, annak a streamelés állapotát és a sync_state értékét kell mutatnia.sync.

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

Elérkeztünk ennek az útmutatónak a végére. Megmutattuk, hogyan állíthatja be a PostgreSQL 12 master-standby adatbázis-streaming replikációját a CentOS 8 rendszerben. Kitértünk arra is, hogyan engedélyezhető a szinkron replikáció egy PostgreSQL adatbázis-fürtben.

A replikációnak számos felhasználási módja létezik, és mindig kiválaszthat olyan megoldást, amely megfelel az IT-környezetének és/vagy az alkalmazás-specifikus követelményeknek. További részletekért lásd a Log-Shipping Standby Servers részt a PostgreSQL 12 dokumentációjában.