Az etcd hibaelhárítása¶
Információ
A teljes eljárást root felhasználóként kell végrehajtani. A jogosultságai root szintre emeléséhez használhatja a su - parancsot.
Az etcd egy elosztott kulcs-érték tároló, amely a PostgreSQL-fürt csomópontjai közötti koordinációs pontként szolgál. Megbízhatóan központosítja és megosztja a fürt állapotát, beleértve a vezető csomópont identitását, a tagok állapotát és a zárolási mechanizmusokat.
A patroni az etcd segítségével irányítja a vezető csomópont megválasztását, és incidens esetén automatikusan elindítja a feladatátvételt. Az összes csomóponton telepített etcd biztosítja a fürt általános konzisztenciáját anélkül, hogy részt venne a PostgreSQL-adatok tárolásában vagy feldolgozásában.
A patroni ezért függ az etcd szolgáltatástól, és nem tud megfelelően működni, ha az etcd nem működik.
Információ
Az etcd konfigurációja minden csomóponton az /etc/default/etcd fájlban van tárolva.
Logs¶
A teljes eljárás az etcd szolgáltatás naplóin alapul, amelyeket az alábbi paranccsal kérhet le:
1 | |
Tipp
A naplók valós idejű követéséhez adja hozzá a parancshoz a -f kapcsolót:
1 | |
Információ
Az etcd naplói a /var/log/syslog fájlban is elérhetők.
Hibanaplók magyarázata¶
health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: i/o timeout
Ha a TCP/2380 forgalom nincs megnyitva két csomópont között, a kapcsolat időtúllépéssel megszakad, és az etcd a következő naplóbejegyzéseket írja:
1 2 3 4 5 6 | |
Itt a <PEER_PSQL_NODE_ID> az etcd által a célcsomóponthoz rendelt azonosító, a <PEER_IP_PSQL_NODE> pedig a célcsomópont IP-címe.
Példa
Példánkban a PostgreSQL-fürt konfigurációja a következő:
| Csomópont | Csomópont IP-címe | etcd-azonosító |
|---|---|---|
| PSQL_1 | 192.168.1.1 | 53d2c129945ccb8b |
| PSQL_2 | 192.168.1.2 | 7176dd381f583d83 |
| PSQL_3 | 192.168.1.3 | e3d5ef565a5bb46c |
A journalctl -fu etcd parancs futtatása a PSQL_1 kiszolgálón a következő naplóbejegyzéseket eredményezi:
1 2 3 4 5 | |
Ezek a naplóbejegyzések azt jelzik, hogy a PSQL_1 kiszolgálóról a 192.168.1.2 IP-című (PSQL_2), 7176dd381f583d83 etcd-azonosítójú kiszolgálóra irányuló kapcsolat a TCP/2380 porton nem jött létre: időtúllépés történt.
Ebből arra következtethetünk, hogy a PSQL_1 kiszolgálóról a PSQL_2 kiszolgálóra irányuló forgalmat egy tűzfal eldobja (DROP).
Ezt a forgalmat a PostgreSQL appliance helyi tűzfala is eldobhatja (DROP): ellenőrizze az érintett csomópontokon az appliance tűzfalkonfigurációját.
Ha ez a konfiguráció helyes, akkor az infrastruktúra egyik tűzfala dobja el (DROP) a két csomópont közötti TCP/2380 forgalmat.
health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: connect: connection refused
Ha a két csomópont közötti kapcsolatot elutasítják, az etcd ezt a következő naplóbejegyzésekkel jelzi:
1 2 3 4 5 6 | |
Itt a <PEER_PSQL_NODE_ID> az etcd által a célcsomóponthoz rendelt azonosító, a <PEER_IP_PSQL_NODE> pedig a célcsomópont IP-címe.
Az elutasításnak több oka is lehet:
- Az
etcdszolgáltatás hibásan működik vagy le van állítva a célcsomóponton. Ebben az esetben ellenőrizze azetcdszolgáltatás állapotát (systemctl status etcd) és naplóit az adott csomóponton. - Egy tűzfal elutasítja (
REJECT) a két csomópont közöttiTCP/2380forgalmat. Ez lehet az appliance helyi tűzfala vagy az infrastruktúra egyik tűzfala.
Példa
Példánkban a PostgreSQL-fürt konfigurációja a következő:
| Csomópont | Csomópont IP-címe | etcd-azonosító |
|---|---|---|
| PSQL_1 | 192.168.1.1 | 53d2c129945ccb8b |
| PSQL_2 | 192.168.1.2 | 7176dd381f583d83 |
| PSQL_3 | 192.168.1.3 | e3d5ef565a5bb46c |
A journalctl -fu etcd parancs futtatása a PSQL_1 kiszolgálón a következő naplóbejegyzéseket eredményezi:
1 2 3 4 5 | |
Ezek a naplóbejegyzések azt jelzik, hogy a PSQL_1 kiszolgálóról a 192.168.1.3 IP-című (PSQL_3), e3d5ef565a5bb46c etcd-azonosítójú kiszolgálóra irányuló kapcsolatot a TCP/2380 porton elutasították.
A PSQL_3 kiszolgálón a systemctl status etcd parancs azt mutatja, hogy az etcd le van állítva:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Az etcd elindítása után a probléma megoldódik.
rejected connection from "<PEER_IP_PSQL_NODE>:35956" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Ha a PostgreSQL-fürt tanúsítványai lejártak, vagy nem megfelelően lettek telepítve vagy megújítva azon a csomóponton, amelyen a naplókat olvassa, a következő hiba jelenik meg az etcd naplóiban:
1 2 3 4 5 6 | |
Itt a <PEER_IP_PSQL_NODE> a fürt egyik csomópontjának IP-címe.
Ez a naplóbejegyzés azt jelzi, hogy amikor az a csomópont, amelyhez csatlakozott, kapcsolatot próbált létesíteni a fürt többi csomópontjával (<PEER_IP_PSQL_NODE>), azok elutasították a kapcsolatot, és az aktuális csomópont tanúsítványával kapcsolatos hibát jeleztek.
Ezért ellenőrizze a fürt tanúsítványainak érvényességét azon a csomóponton, amelyhez csatlakozott.
Figyelmeztetés
Ha egy távoli csomóponton konfigurált hitelesítésszolgáltató (az /etc/etcd/ca.crt fájlban) helytelen, a hiba azon a csomóponton is megjelenik, amelyen a naplókat olvassa: ez esetben azt jelzi, hogy a távoli csomópont nem tudja érvényesíteni a bemutatott tanúsítványt, mert nem rendelkezik a megfelelő hitelesítésszolgáltatóval.
Példa
Példánkban a PostgreSQL-fürt konfigurációja a következő:
| Csomópont | Csomópont IP-címe | etcd-azonosító |
|---|---|---|
| PSQL_1 | 192.168.1.1 | 53d2c129945ccb8b |
| PSQL_2 | 192.168.1.2 | 7176dd381f583d83 |
| PSQL_3 | 192.168.1.3 | e3d5ef565a5bb46c |
A journalctl -fu etcd parancs futtatása a PSQL_1 kiszolgálón a következő naplóbejegyzéseket eredményezi:
1 2 3 4 5 6 | |
Ezek a naplóbejegyzések azt jelzik, hogy a PSQL_2 és a PSQL_3 csomópont elutasította a PSQL_1 csomópont kapcsolatát, mert a PSQL_1 tanúsítványa ebben a környezetben nem érvényes.
Ezért a fürttanúsítványok ellenőrzésére vonatkozó eljárást követve ellenőrizzük a PSQL_1 csomópont tanúsítványainak érvényességét:
1 2 | |
A kimenet azt mutatja, hogy a csomópont tanúsítványa lejárt:
1 2 | |
Ebben az esetben meg kell újítania a PostgreSQL-fürt tanúsítványait.
error listing data dir: /var/lib/etcd/cleanroom
Ha az etcd nem rendelkezik a megfelelő engedélyekkel a /var/lib/etcd/cleanroom könyvtárra vonatkozóan, a szolgáltatás nem indul el, és a következő naplóbejegyzéseket írja:
1 2 3 4 5 6 | |
A probléma megoldásához rendelje hozzá a megfelelő engedélyeket a könyvtárhoz a következő paranccsal:
1 | |