Preskočiť na obsah

Riešenie problémov s patroni

Informácie

Celý postup je potrebné vykonať ako root. Na zvýšenie oprávnení na úroveň root môžete použiť príkaz su -.

Upozornenie

Na vykonanie tohto postupu musíte mať vykonané dodatočné konfigurácie pre patronictl.

patroni je orchestrátor vysokej dostupnosti pre PostgreSQL. Automatizuje správu clustera PostgreSQL tým, že pri incidente zabezpečuje voľbu vedúceho uzla, prevzatie služieb pri zlyhaní a synchronizáciu uzlov.

V clusteri PostgreSQL CyberElements Bastion sa patroni spolieha na etcd pri ukladaní a zdieľaní stavu clustera. Nepretržite monitoruje stav inštancií PostgreSQL a zabezpečuje, aby bol v každom okamihu ako vedúci určený iba jeden uzol.

Ak vedúci uzol zlyhá, patroni automaticky zorganizuje voľbu prostredníctvom distribuovanej konfiguračnej databázy etcd, aby povýšil nový vedúci uzol a zachoval dostupnosť služby.

patroni teda závisí od etcd a nemôže správne fungovať, ak etcd nefunguje.

Desynchronizácia uzla

Uzol clustera PostgreSQL sa niekedy môže desynchronizovať. Je to vidieť vo výstupe prí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 |
+------------------+----------------+---------+---------+----+-----------+

V stĺpci TL uzol PSQL_1 už nie je na rovnakej hodnote TL ako ostatné. Aby cluster fungoval, všetky uzly musia byť na rovnakej hodnote TL: rozdiel naznačuje, že jeden z uzlov nie je synchronizovaný.

V takom prípade spustite na nesynchronizovanom uzle nasledujúci príkaz:

1
patronictl -c /etc/patroni/config.yml reinit 15-cleanroomvault5 <MEMBER_PATRONI>

Kde <MEMBER_PATRONI> je názov nesynchronizovaného uzla, ako je uvedený v stĺpci Member topológie.

Ak nie je synchronizovaných viacero uzlov, znova synchronizujte všetky, ktoré nie sú na najvyššej hodnote TL.

Upozornenie

Ak je nesynchronizovaným uzlom uzol Leader, môže dôjsť k strate údajov. To by sa nikdy nemalo stať: očakáva sa, že uzol Leader bude na najvyššej hodnote TL.

Príklad

Vo výstupe príkazu patronictl -c /etc/patroni/config.yml topology vyššie nie je uzol PSQL_1 synchronizovaný. Na jeho opätovnú synchronizáciu použite nasledujúci príkaz:

1
patronictl -c /etc/patroni/config.yml reinit 15-cleanroomvault5 PSQL_1

Logs

Celý postup sa opiera o logy služby patroni, ktoré získate príkazom nižšie:

1
journalctl -u patroni

Tip

Ak chcete sledovať logy naživo, pridajte k príkazu možnosť -f:

1
journalctl -fu patroni

Informácie

Logy patroni sú dostupné aj v /var/log/syslog.

Vysvetlenie chybových logov

ERROR: Request to server https://<PSQL_NODE_NAME>:2379 failed: MaxRetryError("HTTPSConnectionPool(host='<PSQL_NODE_NAME>', port=2379)

Keď etcd nefunguje alebo nie je dostupný, patroni môže zapisovať nasledujúce 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ázov jedného z uzlov clustera PostgreSQL.

V takom prípade musíte vyriešiť problémy s etcd.