Přeskočit obsah

Ř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
+ Cluster: 15-cleanroomvault5 ------+---------+---------+----+-----------+
| Member           | Host           | Role    | State   | TL | Lag in MB |
+------------------+----------------+---------+---------+----+-----------+
| PSQL_3           | psql_3         | Leader  | running | 3  |           |
| + PSQL_1         | psql_1         | Replica | running | 2  |       230 |
| + PSQL_2         | psql_2         | Replica | running | 3  |         0 |
+------------------+----------------+---------+---------+----+-----------+

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
patronictl -c /etc/patroni/config.yml reinit 15-cleanroomvault5 <MEMBER_PATRONI>

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
patronictl -c /etc/patroni/config.yml reinit 15-cleanroomvault5 PSQL_1

Logs

Celý postup vychází z logů služby patroni, které získáte níže uvedeným příkazem:

1
journalctl -u patroni

Tip

Chcete-li sledovat logy v reálném čase, přidejte k příkazu možnost -f:

1
journalctl -fu patroni

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
patroni[1812916]: 2026-04-17 15:23:51,431 INFO: Retrying on https://<PSQL_NODE_NAME>:2379
patroni[1812916]: 2026-04-17 15:23:51,434 ERROR: Request to server https://<PSQL_NODE_NAME>:2379 failed: MaxRetryError("HTTPSConnectionPool(host='<PSQL_NODE_NAME>', port=2379): Max retries exceeded with url: /v3/lease/keepalive (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f8924a49fd0>: Failed to establish a new connection: [Errno 111] Connection refused'))")
patroni[1812916]: 2026-04-17 15:23:51,434 INFO: Reconnection allowed, looking for another server.
patroni[1812916]: 2026-04-17 15:23:51,434 INFO: Retrying on https://<PSQL_NODE_NAME>:2379
patroni[1812916]: 2026-04-17 15:23:51,438 ERROR: Request to server https://<PSQL_NODE_NAME>:2379 failed: MaxRetryError("HTTPSConnectionPool(host='<PSQL_NODE_NAME>', port=2379): Max retries exceeded with url: /v3/lease/keepalive (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x7f8924a48c50>: Failed to establish a new connection: [Errno 111] Connection refused'))")
patroni[1812916]: 2026-04-17 15:23:51,438 INFO: Reconnection allowed, looking for another server.
patroni[1812916]: 2026-04-17 15:23:53,940 ERROR: Request to server https://<PSQL_NODE_NAME>:2379 failed: ReadTimeoutError("HTTPSConnectionPool(host='<PSQL_NODE_NAME>', port=2379): Read timed out. (read timeout=2.0772262712319693)")
patroni[1812916]: 2026-04-17 15:23:53,940 INFO: Reconnection allowed, looking for another server.
<PSQL_NODE_NAME>

Název jednoho z uzlů clusteru PostgreSQL.

V takovém případě je nutné vyřešit potíže s etcd.