Pereiti prie turinio

patroni trikčių šalinimas

Informacija

Visą procedūrą reikia atlikti kaip root. Norėdami padidinti savo teises iki root, galite naudoti komandą su -.

Perspėjimas

Norėdami atlikti šią procedūrą, turite būti atlikę papildomas patronictl konfigūracijas.

patroni – tai PostgreSQL didelio pasiekiamumo orkestratorius. Jis automatizuoja PostgreSQL klasterio valdymą: įvykus incidentui, atlieka lyderio rinkimus, perjungimą po gedimo ir mazgų sinchronizavimą.

CyberElements Bastion PostgreSQL klasteryje patroni remiasi etcd, kad saugotų ir bendrintų klasterio būseną. Jis nuolat stebi PostgreSQL egzempliorių būseną ir užtikrina, kad bet kuriuo metu lyderiu būtų paskirtas tik vienas mazgas.

Jei lyderio mazgas sugenda, patroni per paskirstytąją konfigūracijos saugyklą etcd automatiškai organizuoja rinkimus, kad paaukštintų naują lyderį ir išlaikytų paslaugos pasiekiamumą.

Todėl patroni priklauso nuo etcd ir negali tinkamai veikti, jei etcd neveikia.

Mazgo desinchronizacija

PostgreSQL klasterio mazgas kartais gali tapti nesinchronizuotas. Tai matyti komandos patronictl -c /etc/patroni/config.yml topology išvestyje:

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 |
+------------------+----------------+---------+---------+----+-----------+

Stulpelyje TL mazgas PSQL_1 nebėra tame pačiame TL kaip kiti. Kad klasteris veiktų, visi mazgai turi būti tame pačiame TL: skirtumas rodo, kad vienas iš mazgų yra nesinchronizuotas.

Tokiu atveju nesinchronizuotame mazge paleiskite šią komandą:

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

Čia <MEMBER_PATRONI> – nesinchronizuoto mazgo pavadinimas, rodomas topologijos stulpelyje Member.

Jei nesinchronizuoti keli mazgai, iš naujo sinchronizuokite visus, kurie nėra aukščiausiame TL.

Perspėjimas

Jei nesinchronizuotas mazgas yra Leader mazgas, gali būti prarasta duomenų. Taip niekada neturėtų nutikti: Leader mazgas visada turėtų būti aukščiausiame TL.

Pavyzdys

Aukščiau pateiktoje komandos patronictl -c /etc/patroni/config.yml topology išvestyje mazgas PSQL_1 yra nesinchronizuotas. Norėdami jį iš naujo sinchronizuoti, naudokite šią komandą:

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

Logs

Visa procedūra remiasi paslaugos patroni žurnalais, kuriuos gaunate toliau pateikta komanda:

1
journalctl -u patroni

Patarimas

Norėdami stebėti žurnalus realiuoju laiku, pridėkite prie komandos parinktį -f:

1
journalctl -fu patroni

Informacija

patroni žurnalai taip pat pasiekiami faile /var/log/syslog.

Klaidų žurnalų paaiškinimai

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

Kai etcd neveikia arba yra nepasiekiama, patroni gali įrašyti šias klaidas:

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>

Vieno iš PostgreSQL klasterio mazgų pavadinimas.

Tokiu atveju turite atlikti etcd trikčių šalinimą.