Změny

Přejít na: navigace, hledání

Replikace

Přidáno 3 437 bajtů, 3. 1. 2018, 20:49
==Vestavěná (a)synchronní replikace - postup pro 9.1 a vyšší==
 
Zde popsaný postup platí pro streaming replikaci. Streaming replikace vylepšuje Warm Standby a Hot Standby replikaci, tak že mezi master a standby databází otevře síťové spojení po kterém se předávají záznamy Write-Ahead Logů (WAL) z masteru na standby ihned poté, co jsou na master DB zpracovány. Na DB serveru v operačním systému jsou vidět běžící procesy walsender resp. walreceiver.
 
Warm Standby a Hot Standby replikace taky využívá WAL logy pro synchronizaci dat, ale v tomto případě je potřeba logy doručit z master na slave (např. přes scp). Tato konfigurace zde není popsána.
 
Master běží na 10.0.0.1, replika na 10.0.0.4
standby_mode='on'
primary_conninfo='host=10.0.0.1 user=replikator password=heslo'
trigger_file='/usr/local/pgsql/data/failover'
</pre>
* vymazat ''serverlog'' z clusteru repliky
</pre>
Pozn: Pokud je takto nakonfigurován server, tak velice snadno - s použitím '''pg_basebackup''' můžeme provádět online full backup.V tom případě je nutné zvýšit ''max_wal_senders''.
 
===Monitoring běžící replikace===
 
'''Master server'''
* Výpis procesů OS
<pre>
[root@testdb1 data]# ps -ef |grep sender
postgres 1818 1687 0 13:53 ? 00:00:00 postgres: wal sender process replikator 10.0.0.4(35948) streaming 0/130009A0
</pre>
 
* DB dotaz
<pre>
postgres=# SELECT pg_current_xlog_location() ;
pg_current_xlog_location
--------------------------
0/13000A38
(1 row)
</pre>
 
'''Standby server'''
* Výpis procesů OS
<pre>
[root@testdb2 data]# ps -ef |grep receiver
postgres 2837 2831 0 13:53 ? 00:00:02 postgres: wal receiver process streaming 0/130009A0
</pre>
 
* DB dotaz
<pre>
postgres=# select pg_last_xlog_receive_location() ;
pg_last_xlog_receive_location
-------------------------------
0/13000A38
(1 row)
 
postgres=# select pg_last_xlog_replay_location() ;
pg_last_xlog_replay_location
------------------------------
0/13000A38
(1 row)
 
postgres=# SELECT pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 row)
</pre>
 
=== Failover ===
V případě, že v souboru recovery.conf použijeme parametr trigger_file (v našem případě trigger_file='/usr/local/pgsql/data/failover') stačí vytvořit prázdný soubor na který tento
parametr ukazuje a DB provede recovery automaticky.
 
* Provedení failoveru pomocí trigger file
<pre>
[root@testdb2 ~]# su - posgres -c "touch /usr/local/pgsql/data/failover"
 
Výpis logu:
LOG: trigger file found: /usr/local/pgsql/data/failover
FATAL: terminating walreceiver process due to administrator command
LOG: record with zero length at 0/13000C00
LOG: redo done at 0/13000BA0
LOG: selected new timeline ID: 2
LOG: archive recovery complete
LOG: database system is ready to accept connections
LOG: autovacuum launcher started
</pre>
 
 
Další možností je použít příkaz '''pg_ctl promote'''
 
 
Obnovení replikace po proceduře failover znamená vytvoření nové kopie standby DB a nastavení nové replikace jak je popsáno výše.
V ''pg_bench'' tj. při maximálním vytížení (výchozí konfigurace a IO s zablokovanou write cache (obyčejný disk v notebooku)) je režie asynchronní replikace cca 6-10%, a režie synchronní replikace cca 40% - v běžném provozu bych očekával režii znatelně nižší - pravděpodobně budete mít na svém serveru jištěné IO s aktivní write cache.
 
V případě, že potřebujeme automatické HA řešení existují různé projekty, které používají výše popsaný princip streaming replikace.
 
Pro Pacemaker + Corosync existuje projekt [https://github.com/ClusterLabs/PAF PAF]. Je to v perlu napsaný OCF resource agent pomocí kterého je Pacemaker schopný rozpoznat stav jednotlivých PostgreSQL instancí na každém nodu: master, slave, stopped, catching up, apod. V případě, že na masteru nastane chyba, která je neopravitelná PAF provede promote vybrané standby DB jako nový master. PAF vyžaduje verzi PostgreSQL 9.3 a vyšší
 
Další projekt, který umožnuje postavení HA řešení je [https://repmgr.org/ repmgr]. Popis konfigurace viz níže, nebo v aktuálním [https://postgres.cz/files/tahak_postgresql-10.pdf taháku]
 
==Replikace a HA založená na ''repmgr'' (nutno zrevidovat)==