Μετάβαση στο περιεχόμενο

Αντιμετώπιση προβλημάτων της υπηρεσίας patroni

Πληροφορίες

Ολόκληρη η διαδικασία πρέπει να εκτελεστεί ως root. Για να αυξήσετε τα προνόμιά σας σε root, μπορείτε να χρησιμοποιήσετε την εντολή su -.

Προειδοποίηση

Για να ακολουθήσετε αυτή τη διαδικασία, πρέπει να έχετε πραγματοποιήσει τις πρόσθετες διαμορφώσεις για το εργαλείο patronictl.

Η υπηρεσία patroni είναι ένας ενορχηστρωτής υψηλής διαθεσιμότητας για το PostgreSQL. Αυτοματοποιεί τη διαχείριση ενός συμπλέγματος PostgreSQL, αναλαμβάνοντας την εκλογή του ηγέτη, τη μετάβαση σε εφεδρικό (failover) και τον συγχρονισμό των κόμβων όταν προκύψει κάποιο περιστατικό.

Στο σύμπλεγμα 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.