Preskoči na sadržaj

Otklanjanje poteškoća s uslugom patroni

Informacije

Cijeli postupak treba provesti kao root. Da biste povisili svoje povlastice na razinu root, možete upotrijebiti naredbu su -.

Upozorenje

Da biste slijedili ovaj postupak, morate prethodno provesti dodatne konfiguracije za patronictl.

patroni je orkestrator visoke dostupnosti za PostgreSQL. Automatizira upravljanje klasterom PostgreSQL tako što upravlja izborom vodećeg čvora, prebacivanjem u slučaju kvara i sinkronizacijom čvorova kada dođe do incidenta.

U klasteru PostgreSQL platforme CyberElements Bastion patroni se oslanja na etcd za pohranu i dijeljenje stanja klastera. Neprekidno nadzire stanje instanci PostgreSQL i osigurava da je u svakom trenutku samo jedan čvor određen kao vodeći.

Ako vodeći čvor zakaže, patroni automatski organizira izbor putem distribuiranog spremišta konfiguracije etcd kako bi promaknuo novi vodeći čvor i održao dostupnost usluge.

patroni stoga ovisi o etcd i ne može ispravno raditi ako etcd ne radi.

Gubitak sinkronizacije čvora

Čvor klastera PostgreSQL ponekad može izgubiti sinkronizaciju. To je vidljivo u izlazu naredbe 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 |
+------------------+----------------+---------+---------+----+-----------+

U stupcu TL čvor PSQL_1 više nije na istoj vrijednosti TL kao ostali. Da bi klaster radio, svi čvorovi moraju biti na istoj vrijednosti TL: razlika pokazuje da jedan od čvorova nije sinkroniziran.

U tom slučaju pokrenite sljedeću naredbu na nesinkroniziranom čvoru:

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

Pri čemu je <MEMBER_PATRONI> naziv nesinkroniziranog čvora, kako je prikazan u stupcu Member topologije.

Ako nekoliko čvorova nije sinkronizirano, ponovno sinkronizirajte sve one koji nisu na najvišoj vrijednosti TL.

Upozorenje

Ako je nesinkronizirani čvor čvor Leader, podaci se mogu izgubiti. To se nikada ne bi smjelo dogoditi: očekuje se da čvor Leader bude na najvišoj vrijednosti TL.

Primjer

U gornjem izlazu naredbe patronictl -c /etc/patroni/config.yml topology čvor PSQL_1 nije sinkroniziran. Da biste ga ponovno sinkronizirali, upotrijebite sljedeću naredbu:

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

Logs

Cijeli se postupak oslanja na zapisnike usluge patroni, koje dobivate naredbom u nastavku:

1
journalctl -u patroni

Savjet

Da biste pratili zapisnike uživo, dodajte naredbi mogućnost -f:

1
journalctl -fu patroni

Informacije

Zapisnici usluge patroni dostupni su i u /var/log/syslog.

Objašnjenja zapisnika pogrešaka

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

Kada etcd ne radi ili nije dostupan, patroni može zapisati sljedeće pogreške:

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>

Naziv jednog od čvorova klastera PostgreSQL.

U tom slučaju morate otkloniti poteškoće s uslugom etcd.