Probleemoplossing voor etcd¶
Info
De volledige procedure moet als root worden uitgevoerd. Om uw bevoegdheden naar root te verhogen, kunt u de opdracht su - gebruiken.
etcd is een gedistribueerde sleutel-waardeopslag die wordt gebruikt als coördinatiepunt tussen de nodes van de PostgreSQL-cluster. Deze centraliseert en deelt op betrouwbare wijze de status van de cluster, waaronder de identiteit van de leader, de status van de leden en de vergrendelingsmechanismen.
patroni steunt op etcd om de verkiezing van de leader-node aan te sturen en bij een incident automatisch failovers te activeren. etcd is op alle nodes geïnstalleerd en garandeert de algehele consistentie van de cluster, zonder deel te nemen aan de opslag of verwerking van de PostgreSQL-gegevens.
patroni is dus afhankelijk van etcd en kan niet correct werken als etcd niet werkt.
Info
De configuratie van etcd wordt op elke node opgeslagen in het bestand /etc/default/etcd.
Logs¶
De volledige procedure steunt op de logs van de service etcd, die u met de onderstaande opdracht opvraagt:
1 | |
Tip
Voeg de optie -f aan de opdracht toe om de logs live te volgen:
1 | |
Info
De logs van etcd zijn ook beschikbaar in /var/log/syslog.
Uitleg bij de foutlogs¶
health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: i/o timeout
Als de stroom TCP/2380 tussen twee nodes niet open is, treedt er voor de verbinding een time-out op en schrijft etcd de volgende logs:
1 2 3 4 5 6 | |
Waarbij <PEER_PSQL_NODE_ID> de ID is die etcd aan de doelnode heeft toegewezen, en <PEER_IP_PSQL_NODE> het IP-adres van de doelnode.
Voorbeeld
In ons voorbeeld is de PostgreSQL-cluster als volgt geconfigureerd:
| Node | IP van de node | ID in etcd |
|---|---|---|
| PSQL_1 | 192.168.1.1 | 53d2c129945ccb8b |
| PSQL_2 | 192.168.1.2 | 7176dd381f583d83 |
| PSQL_3 | 192.168.1.3 | e3d5ef565a5bb46c |
Het uitvoeren van de opdracht journalctl -fu etcd vanaf de server PSQL_1 levert de volgende logs op:
1 2 3 4 5 | |
Deze logs geven aan dat de verbinding van de server PSQL_1 naar de server met IP-adres 192.168.1.2 (PSQL_2) en ID 7176dd381f583d83 in etcd, op poort TCP/2380, niet is gelukt: er is een time-out opgetreden.
Hieruit kunnen we afleiden dat de stroom van de server PSQL_1 naar de server PSQL_2 door een firewall wordt geblokkeerd (DROP).
Deze stroom kan worden geblokkeerd (DROP) door de lokale firewall van de PostgreSQL-appliance: controleer de firewallconfiguratie van de appliance op de betrokken nodes.
Als deze configuratie correct is, blokkeert (DROP) een firewall van de infrastructuur de stroom TCP/2380 tussen de twee nodes.
health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: connect: connection refused
Wanneer een verbinding tussen twee nodes wordt geweigerd, meldt etcd dit met de volgende logs:
1 2 3 4 5 6 | |
Waarbij <PEER_PSQL_NODE_ID> de ID is die etcd aan de doelnode heeft toegewezen, en <PEER_IP_PSQL_NODE> het IP-adres van de doelnode.
De weigering kan verschillende oorzaken hebben:
- De service
etcdwerkt niet goed of is gestopt op de doelnode. Controleer in dat geval de status (systemctl status etcd) en de logs van de serviceetcdop die node. - Een firewall weigert (
REJECT) de stroomTCP/2380tussen de twee nodes. Dit kan de lokale firewall van de appliance zijn of een firewall van de infrastructuur.
Voorbeeld
In ons voorbeeld is de PostgreSQL-cluster als volgt geconfigureerd:
| Node | IP van de node | ID in etcd |
|---|---|---|
| PSQL_1 | 192.168.1.1 | 53d2c129945ccb8b |
| PSQL_2 | 192.168.1.2 | 7176dd381f583d83 |
| PSQL_3 | 192.168.1.3 | e3d5ef565a5bb46c |
Het uitvoeren van de opdracht journalctl -fu etcd vanaf de server PSQL_1 levert de volgende logs op:
1 2 3 4 5 | |
Deze logs geven aan dat de verbinding van de server PSQL_1 naar de server met IP-adres 192.168.1.3 (PSQL_3) en ID e3d5ef565a5bb46c in etcd, op poort TCP/2380, is geweigerd.
Op de server PSQL_3 toont de opdracht systemctl status etcd dat etcd gestopt is:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Zodra etcd is gestart, is het probleem opgelost.
rejected connection from "<PEER_IP_PSQL_NODE>:35956" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Als de certificaten van de PostgreSQL-cluster verlopen zijn, of als ze niet correct zijn geïnstalleerd of vernieuwd op de node waarop u de logs leest, verschijnt de volgende fout in de logs van etcd:
1 2 3 4 5 6 | |
Waarbij <PEER_IP_PSQL_NODE> het IP-adres is van een van de nodes van de cluster.
Deze log geeft aan dat, toen de node waarmee u verbonden bent een verbinding probeerde tot stand te brengen met de andere nodes van de cluster (<PEER_IP_PSQL_NODE>), deze de verbinding weigerden en een fout in het certificaat van de huidige node meldden.
Controleer daarom de geldigheid van de certificaten van de cluster op de node waarmee u verbonden bent.
Waarschuwing
Als de certificeringsinstantie die op een externe node is geconfigureerd (in /etc/etcd/ca.crt) onjuist is, verschijnt de fout ook op de node waarop u de logs leest: deze geeft dan aan dat de externe node het gepresenteerde certificaat niet kan valideren, omdat hij niet over de juiste CA beschikt.
Voorbeeld
In ons voorbeeld is de PostgreSQL-cluster als volgt geconfigureerd:
| Node | IP van de node | ID in etcd |
|---|---|---|
| PSQL_1 | 192.168.1.1 | 53d2c129945ccb8b |
| PSQL_2 | 192.168.1.2 | 7176dd381f583d83 |
| PSQL_3 | 192.168.1.3 | e3d5ef565a5bb46c |
Het uitvoeren van de opdracht journalctl -fu etcd vanaf de server PSQL_1 levert de volgende logs op:
1 2 3 4 5 6 | |
Deze logs geven aan dat de nodes PSQL_2 en PSQL_3 de verbinding van de node PSQL_1 hebben geweigerd, omdat het certificaat van PSQL_1 in deze context niet geldig is.
We controleren daarom de geldigheid van de certificaten van de node PSQL_1 met de procedure voor controle van de certificaten van de cluster:
1 2 | |
De uitvoer toont dat het certificaat van de node verlopen is:
1 2 | |
In dit geval moet u de certificaten van de PostgreSQL-cluster vernieuwen.
error listing data dir: /var/lib/etcd/cleanroom
Als etcd niet de juiste machtigingen heeft voor de map /var/lib/etcd/cleanroom, weigert de service te starten en schrijft deze de volgende logs:
1 2 3 4 5 6 | |
Wijs met de volgende opdracht de juiste machtigingen aan de map toe om dit probleem op te lossen:
1 | |