Αντιμετώπιση προβλημάτων της υπηρεσίας etcd¶
Πληροφορίες
Ολόκληρη η διαδικασία πρέπει να εκτελεστεί ως root. Για να αυξήσετε τα προνόμιά σας σε root, μπορείτε να χρησιμοποιήσετε την εντολή su -.
Η υπηρεσία etcd είναι μια κατανεμημένη αποθήκη κλειδιών-τιμών που χρησιμοποιείται ως σημείο συντονισμού μεταξύ των κόμβων του συμπλέγματος PostgreSQL. Συγκεντρώνει και κοινοποιεί με αξιόπιστο τρόπο την κατάσταση του συμπλέγματος, συμπεριλαμβανομένων της ταυτότητας του ηγέτη, της κατάστασης των μελών και των μηχανισμών κλειδώματος.
Η υπηρεσία patroni βασίζεται στην υπηρεσία etcd για να διευθύνει την εκλογή του κόμβου-ηγέτη και να εκκινεί αυτόματα τη μετάβαση σε εφεδρικό (failover) όταν προκύψει κάποιο περιστατικό. Εγκατεστημένη σε όλους τους κόμβους, η υπηρεσία etcd εγγυάται τη συνολική συνέπεια του συμπλέγματος, χωρίς να συμμετέχει στην αποθήκευση ή την επεξεργασία των δεδομένων PostgreSQL.
Επομένως, η υπηρεσία patroni εξαρτάται από την υπηρεσία etcd και δεν μπορεί να λειτουργήσει σωστά εάν η etcd δεν λειτουργεί.
Πληροφορίες
Η διαμόρφωση της υπηρεσίας etcd είναι αποθηκευμένη στο αρχείο /etc/default/etcd σε κάθε κόμβο.
Logs¶
Ολόκληρη η διαδικασία βασίζεται στα αρχεία καταγραφής της υπηρεσίας etcd, τα οποία λαμβάνετε με την παρακάτω εντολή:
1 | |
Συμβουλή
Για να παρακολουθείτε τα αρχεία καταγραφής σε πραγματικό χρόνο, προσθέστε την επιλογή -f στην εντολή:
1 | |
Πληροφορίες
Τα αρχεία καταγραφής της υπηρεσίας etcd είναι επίσης διαθέσιμα στο /var/log/syslog.
Επεξηγήσεις των αρχείων καταγραφής σφαλμάτων¶
health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: i/o timeout
Εάν η ροή TCP/2380 δεν είναι ανοιχτή μεταξύ δύο κόμβων, λήγει το χρονικό όριο της σύνδεσης και η υπηρεσία etcd γράφει τις ακόλουθες καταχωρήσεις στο αρχείο καταγραφής:
1 2 3 4 5 6 | |
Όπου <PEER_PSQL_NODE_ID> είναι το αναγνωριστικό που έχει αποδώσει η υπηρεσία etcd στον κόμβο προορισμού και <PEER_IP_PSQL_NODE> η διεύθυνση IP του κόμβου προορισμού.
Παράδειγμα
Στο παράδειγμά μας, το σύμπλεγμα PostgreSQL έχει διαμορφωθεί ως εξής:
| Κόμβος | IP κόμβου | Αναγνωριστικό etcd |
|---|---|---|
| PSQL_1 | 192.168.1.1 | 53d2c129945ccb8b |
| PSQL_2 | 192.168.1.2 | 7176dd381f583d83 |
| PSQL_3 | 192.168.1.3 | e3d5ef565a5bb46c |
Η εκτέλεση της εντολής journalctl -fu etcd από τον διακομιστή PSQL_1 δίνει τις ακόλουθες καταχωρήσεις στο αρχείο καταγραφής:
1 2 3 4 5 | |
Αυτές οι καταχωρήσεις υποδεικνύουν ότι η σύνδεση από τον διακομιστή PSQL_1 προς τον διακομιστή με διεύθυνση IP 192.168.1.2 (PSQL_2) και αναγνωριστικό etcd 7176dd381f583d83, στη θύρα TCP/2380, δεν πέτυχε: έληξε το χρονικό όριο.
Μπορούμε να συμπεράνουμε ότι η ροή από τον διακομιστή PSQL_1 προς τον διακομιστή PSQL_2 απορρίπτεται σιωπηλά (DROP) από ένα τείχος προστασίας.
Αυτή η ροή μπορεί να απορρίπτεται σιωπηλά (DROP) από το τοπικό τείχος προστασίας της συσκευής PostgreSQL: ελέγξτε τη διαμόρφωση του τείχους προστασίας της συσκευής στους εμπλεκόμενους κόμβους.
Εάν αυτή η διαμόρφωση είναι σωστή, ένα τείχος προστασίας της υποδομής απορρίπτει σιωπηλά (DROP) τη ροή TCP/2380 μεταξύ των δύο κόμβων.
health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: connect: connection refused
Όταν μια σύνδεση μεταξύ δύο κόμβων απορρίπτεται, η υπηρεσία etcd το αναφέρει με τις ακόλουθες καταχωρήσεις στο αρχείο καταγραφής:
1 2 3 4 5 6 | |
Όπου <PEER_PSQL_NODE_ID> είναι το αναγνωριστικό που έχει αποδώσει η υπηρεσία etcd στον κόμβο προορισμού και <PEER_IP_PSQL_NODE> η διεύθυνση IP του κόμβου προορισμού.
Η απόρριψη μπορεί να έχει διάφορες αιτίες:
- Η υπηρεσία
etcdδυσλειτουργεί ή έχει σταματήσει στον κόμβο προορισμού. Σε αυτή την περίπτωση, ελέγξτε την κατάσταση (systemctl status etcd) και τα αρχεία καταγραφής της υπηρεσίαςetcdσε αυτόν τον κόμβο. - Ένα τείχος προστασίας απορρίπτει (
REJECT) τη ροήTCP/2380μεταξύ των δύο κόμβων. Μπορεί να πρόκειται για το τοπικό τείχος προστασίας της συσκευής ή για ένα τείχος προστασίας της υποδομής.
Παράδειγμα
Στο παράδειγμά μας, το σύμπλεγμα PostgreSQL έχει διαμορφωθεί ως εξής:
| Κόμβος | IP κόμβου | Αναγνωριστικό etcd |
|---|---|---|
| PSQL_1 | 192.168.1.1 | 53d2c129945ccb8b |
| PSQL_2 | 192.168.1.2 | 7176dd381f583d83 |
| PSQL_3 | 192.168.1.3 | e3d5ef565a5bb46c |
Η εκτέλεση της εντολής journalctl -fu etcd από τον διακομιστή PSQL_1 δίνει τις ακόλουθες καταχωρήσεις στο αρχείο καταγραφής:
1 2 3 4 5 | |
Αυτές οι καταχωρήσεις υποδεικνύουν ότι η σύνδεση από τον διακομιστή PSQL_1 προς τον διακομιστή με διεύθυνση IP 192.168.1.3 (PSQL_3) και αναγνωριστικό etcd e3d5ef565a5bb46c, στη θύρα TCP/2380, απορρίφθηκε.
Στον διακομιστή PSQL_3, η εντολή systemctl status etcd δείχνει ότι η υπηρεσία etcd έχει σταματήσει:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Μόλις ξεκινήσει η υπηρεσία etcd, το πρόβλημα επιλύεται.
rejected connection from "<PEER_IP_PSQL_NODE>:35956" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Εάν τα πιστοποιητικά του συμπλέγματος PostgreSQL έχουν λήξει ή δεν εγκαταστάθηκαν ή δεν ανανεώθηκαν σωστά στον κόμβο από τον οποίο διαβάζετε τα αρχεία καταγραφής, εμφανίζεται το ακόλουθο σφάλμα στα αρχεία καταγραφής της υπηρεσίας etcd:
1 2 3 4 5 6 | |
Όπου <PEER_IP_PSQL_NODE> είναι η διεύθυνση IP ενός από τους κόμβους του συμπλέγματος.
Αυτή η καταχώρηση υποδεικνύει ότι, όταν ο κόμβος στον οποίο είστε συνδεδεμένοι προσπάθησε να δημιουργήσει σύνδεση με τους άλλους κόμβους του συμπλέγματος (<PEER_IP_PSQL_NODE>), εκείνοι την απέρριψαν, αναφέροντας σφάλμα στο πιστοποιητικό του τρέχοντος κόμβου.
Επομένως, θα πρέπει να ελέγξετε την εγκυρότητα των πιστοποιητικών του συμπλέγματος στον κόμβο στον οποίο είστε συνδεδεμένοι.
Προειδοποίηση
Εάν η αρχή έκδοσης πιστοποιητικών που έχει διαμορφωθεί σε έναν απομακρυσμένο κόμβο (στο /etc/etcd/ca.crt) είναι εσφαλμένη, το σφάλμα εμφανίζεται επίσης στον κόμβο από τον οποίο διαβάζετε τα αρχεία καταγραφής: υποδεικνύει τότε ότι ο απομακρυσμένος κόμβος δεν μπορεί να επικυρώσει το πιστοποιητικό που παρουσιάζεται, επειδή δεν διαθέτει τη σωστή CA.
Παράδειγμα
Στο παράδειγμά μας, το σύμπλεγμα PostgreSQL έχει διαμορφωθεί ως εξής:
| Κόμβος | IP κόμβου | Αναγνωριστικό etcd |
|---|---|---|
| PSQL_1 | 192.168.1.1 | 53d2c129945ccb8b |
| PSQL_2 | 192.168.1.2 | 7176dd381f583d83 |
| PSQL_3 | 192.168.1.3 | e3d5ef565a5bb46c |
Η εκτέλεση της εντολής journalctl -fu etcd από τον διακομιστή PSQL_1 δίνει τις ακόλουθες καταχωρήσεις στο αρχείο καταγραφής:
1 2 3 4 5 6 | |
Αυτές οι καταχωρήσεις υποδεικνύουν ότι οι κόμβοι PSQL_2 και PSQL_3 απέρριψαν τη σύνδεση από τον κόμβο PSQL_1, επειδή το πιστοποιητικό του κόμβου PSQL_1 δεν είναι έγκυρο σε αυτή την περίπτωση.
Ελέγχουμε επομένως την εγκυρότητα των πιστοποιητικών του κόμβου PSQL_1 ακολουθώντας τη διαδικασία ελέγχου των πιστοποιητικών του συμπλέγματος:
1 2 | |
Η έξοδος δείχνει ότι το πιστοποιητικό του κόμβου έχει λήξει:
1 2 | |
Σε αυτή την περίπτωση, πρέπει να ανανεώσετε τα πιστοποιητικά του συμπλέγματος PostgreSQL.
error listing data dir: /var/lib/etcd/cleanroom
Εάν η υπηρεσία etcd δεν διαθέτει τις σωστές άδειες για τον κατάλογο /var/lib/etcd/cleanroom, η υπηρεσία αρνείται να ξεκινήσει και γράφει τις ακόλουθες καταχωρήσεις στο αρχείο καταγραφής:
1 2 3 4 5 6 | |
Για να επιλύσετε αυτό το πρόβλημα, ορίστε τις σωστές άδειες για τον κατάλογο με την ακόλουθη εντολή:
1 | |