Skoči na vsebino

Odpravljanje težav s patroni

Informacije

Celoten postopek je treba izvesti kot root. Za dvig privilegijev na raven root lahko uporabite ukaz su -.

Opozorilo

Za izvedbo tega postopka morate predhodno izvesti dodatne konfiguracije za patronictl.

patroni je orkestrator visoke razpoložljivosti za PostgreSQL. Samodejno upravlja gručo PostgreSQL, saj ob incidentu skrbi za izbiro vodje, preklop ob napaki in sinhronizacijo vozlišč.

V gruči PostgreSQL za CyberElements Bastion se patroni zanaša na etcd za shranjevanje in deljenje stanja gruče. Neprekinjeno nadzoruje stanje instanc PostgreSQL in zagotavlja, da je v vsakem trenutku za vodjo določeno samo eno vozlišče.

Če vodilno vozlišče odpove, patroni prek porazdeljene shrambe konfiguracije etcd samodejno izvede izbiro, da določi novega vodjo in ohrani razpoložljivost storitve.

patroni je torej odvisen od etcd in ne more pravilno delovati, če etcd ne deluje.

Desinhronizacija vozlišča

Vozlišče gruče PostgreSQL lahko včasih izgubi sinhronizacijo. To je vidno v izpisu ukaza 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 stolpcu TL vozlišče PSQL_1 nima več enake vrednosti TL kot ostala. Za delovanje gruče morajo imeti vsa vozlišča enako vrednost TL: razlika pomeni, da eno od vozlišč ni sinhronizirano.

V tem primeru na nesinhroniziranem vozlišču zaženite naslednji ukaz:

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

Pri tem je <MEMBER_PATRONI> ime nesinhroniziranega vozlišča, kot je prikazano v stolpcu Member topologije.

Če več vozlišč ni sinhroniziranih, znova sinhronizirajte vsa, ki nimajo najvišje vrednosti TL.

Opozorilo

Če je nesinhronizirano vozlišče Leader, lahko pride do izgube podatkov. To se ne bi smelo nikoli zgoditi: vozlišče Leader naj bi imelo najvišjo vrednost TL.

Primer

V zgornjem izpisu ukaza patronictl -c /etc/patroni/config.yml topology vozlišče PSQL_1 ni sinhronizirano. Za ponovno sinhronizacijo uporabite naslednji ukaz:

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

Logs

Celoten postopek temelji na dnevnikih storitve patroni, ki jih dobite s spodnjim ukazom:

1
journalctl -u patroni

Nasvet

Če želite dnevnike spremljati sproti, ukazu dodajte možnost -f:

1
journalctl -fu patroni

Informacije

Dnevniki patroni so na voljo tudi v /var/log/syslog.

Razlaga dnevnikov napak

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

Ko etcd ne deluje ali ni dosegljiv, lahko patroni zapiše naslednje napake:

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>

Ime enega od vozlišč gruče PostgreSQL.

V tem primeru morate odpraviti težave z etcd.