Към съдържанието

Отстраняване на неизправности в patroni

Информация

Цялата процедура трябва да се изпълни като root. За да повишите привилегиите си до root, можете да използвате командата su -.

Предупреждение

За да следвате тази процедура, трябва да сте изпълнили допълнителните конфигурации за patronictl.

patroni е оркестратор за висока наличност за PostgreSQL. Той автоматизира управлението на клъстер PostgreSQL, като обработва избора на лидер, превключването при отказ и синхронизирането на възлите, когато възникне инцидент.

В клъстера PostgreSQL на CyberElements Bastion patroni разчита на etcd, за да съхранява и споделя състоянието на клъстера. Той непрекъснато наблюдава състоянието на екземплярите на PostgreSQL и гарантира, че във всеки момент само един възел е определен за лидер.

Ако водещият възел откаже, patroni автоматично организира избор чрез разпределеното хранилище за конфигурация etcd, за да издигне нов лидер и да запази услугата достъпна.

Следователно patroni зависи от etcd и не може да работи правилно, ако etcd не работи.

Десинхронизация на възел

Възел от клъстера PostgreSQL понякога може да излезе от синхрон. Това се вижда в резултата от командата 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 |
+------------------+----------------+---------+---------+----+-----------+

В колоната TL възелът PSQL_1 вече не е на същата стойност TL като останалите. За да работи клъстерът, всички възли трябва да са на една и съща стойност TL: разлика показва, че един от възлите е излязъл от синхрон.

В този случай изпълнете следната команда на несинхронизирания възел:

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

Където <MEMBER_PATRONI> е името на несинхронизирания възел, както е показано в колоната Member на топологията.

Ако няколко възела са излезли от синхрон, синхронизирайте повторно всички, които не са на най-високата стойност TL.

Предупреждение

Ако несинхронизираният възел е възелът Leader, данните може да бъдат загубени. Това никога не би трябвало да се случва: очаква се възелът Leader да е на най-високата стойност TL.

Пример

В резултата от командата patronictl -c /etc/patroni/config.yml topology по-горе възелът PSQL_1 е излязъл от синхрон. За да го синхронизирате повторно, използвайте следната команда:

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

Logs

Цялата процедура се основава на дневниците на услугата patroni, които получавате с командата по-долу:

1
journalctl -u patroni

Съвет

За да следите дневниците в реално време, добавете опцията -f към командата:

1
journalctl -fu patroni

Информация

Дневниците на patroni са налични и в /var/log/syslog.

Обяснения на дневниците с грешки

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

Когато etcd не работи или е недостъпен, patroni може да записва следните грешки:

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>

Име на един от възлите на клъстера PostgreSQL.

В този случай трябва да отстраните неизправностите в etcd.