Vyhledávání na webu

Jak nakonfigurovat replikaci streamování PostgreSQL 12 v CentOS 8


Databáze PostgreSQL podporuje několik replikačních řešení pro vytváření vysoce dostupných, škálovatelných aplikací odolných proti chybám, z nichž jedním je Write-Ahead Log (WAL ) Lodní doprava. Toto řešení umožňuje implementaci záložního serveru pomocí odesílání protokolů na základě souborů nebo streamingové replikace, nebo kde je to možné, kombinací obou přístupů.

Při streamování replikace je záložní (replikační slave) databázový server nakonfigurován tak, aby se připojoval k hlavnímu/primárnímu serveru, který streamuje záznamy WAL do pohotovostního režimu tak, jak jsou generovány, bez čekání na WAL soubor k vyplnění.

Ve výchozím nastavení je datová replikace asynchronní, kdy jsou data zapsána na rezervní server(y) poté, co byla transakce potvrzena na primárním serveru. To znamená, že mezi potvrzením transakce na hlavním serveru a zobrazením změn na záložním serveru je malé zpoždění. Jednou nevýhodou tohoto přístupu je, že v případě selhání hlavního serveru nemusí být žádné nepotvrzené transakce replikovány, což může způsobit ztrátu dat.

Tato příručka ukazuje, jak nastavit replikaci streamování Postgresql 12 master-standby na CentOS 8. Pro pohotovostní režim použijeme „replikační sloty “, abychom zabránili hlavnímu serveru recyklovat staré segmenty WAL dříve, než je pohotovostní režim přijme.

Všimněte si, že ve srovnání s jinými metodami si replikační sloty uchovávají pouze počet segmentů, o kterých je známo, že jsou potřeba.

Testovací prostředí:

Tato příručka předpokládá, že jste se ke svému hlavnímu a záložnímu databázovému serveru připojili jako root prostřednictvím SSH (v případě potřeby použijte příkaz Sudo, pokud jste připojeni jako běžný uživatel s právy správce):

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

Oba databázové servery musí mít nainstalovaný Postgresql 12, jinak viz: Jak nainstalovat PostgreSQL a pgAdmin v CentOS 8.

Poznámka: PostgreSQL 12 přichází s velkými změnami implementace a konfigurace replikace, jako je nahrazení recovery.conf a převod parametrů recovery.conf na normální konfigurační parametry PostgreSQL, což výrazně usnadňuje konfiguraci replikace clusteru.

Krok 1: Konfigurace hlavního/primárního databázového serveru PostgreSQL

1. Na hlavním serveru se přepněte na systémový účet postgres a nakonfigurujte IP adresy, na kterých bude hlavní server naslouchat připojení od klientů.

V tomto případě použijeme *, což znamená vše.

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

SQL příkaz ALTER SYSTEM SET je výkonná funkce pro změnu konfiguračních parametrů serveru přímo pomocí SQL dotazu. Konfigurace se ukládají do souboru postgresql.conf.auto umístěného v kořenovém adresáři datové složky (např. /var/lib/pgsql/12/data/) a načítají se k těm uloženým v postgresql.conf. Ale konfigurace v prvním mají přednost před těmi v pozdějších a dalších souvisejících souborech.

2. Poté pomocí programu createuser vytvořte replikační roli, která se bude používat pro připojení z pohotovostního serveru k hlavnímu serveru. V následujícím příkazu příznak -P vyzve k zadání hesla pro novou roli a -e opakuje příkazy, které createuser generuje a odesílá na databázový server.

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

3. Poté zadejte následující položku na konec konfiguračního souboru ověřování klienta /var/lib/pgsql/12/data/pg_hba.conf s polem databáze nastaveným na replikace, jak je znázorněno na snímku obrazovky.

host    replication     replicator      10.20.20.8/24     md5

4. Nyní restartujte službu Postgres12 pomocí následujícího příkazu systemctl pro použití změn.

systemctl restart postgresql-12.service

5. Dále, pokud máte spuštěnou službu firewalld, musíte do konfigurace firewallu přidat službu Postgresql, abyste povolili požadavky z pohotovostního serveru na hlavní server.

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

Krok 2: Vytvoření základní zálohy pro spuštění pohotovostního serveru

6. Dále musíte vytvořit základní zálohu hlavního serveru z pohotovostního serveru; to pomáhá zavést pohotovostní server. Musíte zastavit službu postgresql 12 na pohotovostním serveru, přepnout na uživatelský účet postgres, zálohovat datový adresář (/var/lib/pgsql/12/data/) a poté smazat vše, co je pod ním jak je znázorněno, před pořízením základní zálohy.

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. Poté pomocí nástroje pg_basebackup pořiďte základní zálohu se správným vlastnictvím (uživatel databázového systému, tj. Postgres, v rámci Postgresuživatelský účet) a se správnými oprávněními.

V následujícím příkazu možnost:

  • -h – určuje hostitele, který je hlavním serverem.
  • -D – určuje datový adresář.
  • -U – určuje uživatele připojení.
  • -P – umožňuje hlášení průběhu.
  • -v – umožňuje podrobný režim.
  • -R – umožňuje vytvoření konfigurace obnovy: Vytvoří soubor standby.signal a připojí nastavení připojení k postgresql.auto.conf pod daty adresář.
  • -X – používá se k zahrnutí požadovaných souborů protokolu pro zápis (soubory WAL) do zálohy. Hodnota stream znamená streamovat WAL při vytváření zálohy.
  • -C – umožňuje vytvoření replikačního slotu pojmenovaného volbou -S před spuštěním zálohování.
  • -S – určuje název replikačního slotu.
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. Po dokončení procesu zálohování by měl nový datový adresář na záložním serveru vypadat jako na snímku obrazovky. Vytvoří se standby.signal a nastavení připojení se připojí k postgresql.auto.conf. Jeho obsah můžete vypsat pomocí příkazu ls.

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

Pokud je parametr hot_standby nastaven na zapnuto (výchozí hodnota) v postgresql.conf a v datovém adresáři je soubor standby.signal.

9. Nyní zpět na hlavním serveru byste měli být schopni vidět replikační slot s názvem pgstandby1, když otevřete pohled pg_replication_slots následovně.

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

10. Chcete-li zobrazit nastavení připojení připojená v souboru postgresql.auto.conf, použijte příkaz cat.

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

11. Nyní zahajte normální databázové operace na záložním serveru spuštěním služby PostgreSQL následujícím způsobem.

systemctl start postgresql-12

Krok 3: Testování replikace streamování PostgreSQL

12. Po úspěšném navázání spojení mezi hlavním a pohotovostním režimem se na serveru v pohotovostním režimu zobrazí proces přijímače WAL se stavem streamování, můžete to zkontrolovat pomocí zobrazení pg_stat_wal_receiver.

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

a odpovídající proces odesílatele WAL na hlavním/primárním serveru se stavem streamování a sync_state async, můžete zkontrolovat toto zobrazení pg_stat_replication pg_stat_replication.

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

Z výše uvedeného snímku obrazovky je streamovaná replikace asynchronní. V další části si ukážeme, jak volitelně povolit synchronní replikaci.

13. Nyní otestujte, zda replikace funguje správně, vytvořením testovací databáze na hlavním serveru a zkontrolujte, zda existuje na záložním serveru.
[master]postgres=# VYTVOŘIT DATABÁZI tecmint;
[pohotovost]postgres=# \l

Volitelné: Povolení synchronní replikace

14. Synchronní replikace nabízí možnost provést transakci (nebo zapsat data) do primární databáze a pohotovostního režimu/repliky současně. Pouze potvrzuje, že transakce je úspěšná, když byly všechny změny provedené transakcí přeneseny na jeden nebo více synchronních rezervních serverů.

Chcete-li povolit synchronní replikaci, musí být synchronous_commit také nastaven na on (což je výchozí hodnota, takže není třeba nic měnit) a také musíte nastavit parametr synchronous_standby_names na neprázdnou hodnotu. Pro tento návod to nastavíme na všechny.

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

15. Poté znovu načtěte službu PostgreSQL 12, abyste použili nové změny.

systemctl reload postgresql-12.service

16. Když nyní znovu zadáte dotaz na proces odesílatele WAL na primárním serveru, měl by ukazovat stav streamování a sync_state synchronizovat.

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

Dostali jsme se na konec tohoto průvodce. Ukázali jsme, jak nastavit replikaci streamování databáze PostgreSQL 12 master-standby v CentOS 8. Také jsme se zabývali tím, jak povolit synchronní replikaci v databázovém clusteru PostgreSQL.

Existuje mnoho použití replikace a vždy si můžete vybrat řešení, které splní vaše IT prostředí a/nebo požadavky specifické pro aplikaci. Další podrobnosti najdete v části Log-Shipping Standby Servers v dokumentaci PostgreSQL 12.