Řešení potíží s patroni¶
Informace
Celý postup je nutné provádět jako root. Ke zvýšení oprávnění na úroveň root můžete použít příkaz su -.
Upozornění
Před provedením tohoto postupu musíte provést doplňující konfigurace pro patronictl.
patroni je orchestrátor vysoké dostupnosti pro PostgreSQL. Automatizuje správu clusteru PostgreSQL tím, že při incidentu zajišťuje volbu vedoucího uzlu, převzetí služeb při selhání a synchronizaci uzlů.
V clusteru PostgreSQL platformy CyberElements Bastion se patroni spoléhá na etcd při ukládání a sdílení stavu clusteru. Nepřetržitě monitoruje stav instancí PostgreSQL a zajišťuje, aby byl v každém okamžiku jako vedoucí určen pouze jeden uzel.
Pokud vedoucí uzel selže, služba patroni automaticky zorganizuje volbu prostřednictvím distribuovaného úložiště konfigurace etcd, aby povýšila nový vedoucí uzel a zachovala dostupnost služby.
Služba patroni je tedy závislá na službě etcd a nemůže správně fungovat, pokud etcd nefunguje.
Desynchronizace uzlu¶
Uzel clusteru PostgreSQL se někdy může desynchronizovat. To je vidět ve výstupu příkazu patronictl -c /etc/patroni/config.yml topology:
1 2 3 4 5 6 7 | |
Ve sloupci TL už uzel PSQL_1 nemá stejnou hodnotu TL jako ostatní. Aby cluster fungoval, musí mít všechny uzly stejnou hodnotu TL: rozdíl ukazuje, že jeden z uzlů je desynchronizovaný.
V takovém případě spusťte na desynchronizovaném uzlu následující příkaz:
1 | |
Kde <MEMBER_PATRONI> je název desynchronizovaného uzlu, jak je uveden ve sloupci Member topologie.
Pokud je desynchronizováno více uzlů, znovu synchronizujte všechny, které nemají nejvyšší hodnotu TL.
Upozornění
Pokud je desynchronizovaným uzlem uzel Leader, může dojít ke ztrátě dat. To by se nikdy nemělo stát: uzel Leader by měl mít nejvyšší hodnotu TL.
Příklad
Ve výše uvedeném výstupu příkazu patronictl -c /etc/patroni/config.yml topology je uzel PSQL_1 desynchronizovaný. Chcete-li ho znovu synchronizovat, použijte následující příkaz:
1 | |
Logs¶
Celý postup vychází z logů služby patroni, které získáte níže uvedeným příkazem:
1 | |
Tip
Chcete-li sledovat logy v reálném čase, přidejte k příkazu možnost -f:
1 | |
Informace
Logy patroni jsou dostupné také v /var/log/syslog.
Vysvětlení chybových logů¶
ERROR: Request to server https://<PSQL_NODE_NAME>:2379 failed: MaxRetryError("HTTPSConnectionPool(host='<PSQL_NODE_NAME>', port=2379)
Když služba etcd nefunguje nebo není dostupná, může služba patroni zapisovat následující chyby:
1 2 3 4 5 6 7 8 | |
<PSQL_NODE_NAME>-
Název jednoho z uzlů clusteru PostgreSQL.
V takovém případě je nutné vyřešit potíže s etcd.