Kihagyás

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
journalctl -u etcd

Tipp

A naplók valós idejű követéséhez adja hozzá a parancshoz a -f kapcsolót:

1
journalctl -fu etcd

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
Apr 15 11:48:09 PSQL_1 etcd[1342933]: health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: i/o timeout
Apr 15 11:48:09 PSQL_1 etcd[1342933]: health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: i/o timeout
Apr 15 11:48:14 PSQL_1 etcd[1342933]: health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: i/o timeout
Apr 15 11:48:14 PSQL_1 etcd[1342933]: health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: i/o timeout
Apr 15 11:48:19 PSQL_1 etcd[1342933]: health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: i/o timeout
Apr 15 11:48:19 PSQL_1 etcd[1342933]: health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: i/o timeout

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
Apr 15 11:50:39 PSQL_1 etcd[1342933]: health check for peer 7176dd381f583d83 could not connect: dial tcp 192.168.1.2:2380: i/o timeout
Apr 15 11:50:44 PSQL_1 etcd[1342933]: health check for peer 7176dd381f583d83 could not connect: dial tcp 192.168.1.2:2380: i/o timeout
Apr 15 11:50:44 PSQL_1 etcd[1342933]: health check for peer 7176dd381f583d83 could not connect: dial tcp 192.168.1.2:2380: i/o timeout
Apr 15 11:50:49 PSQL_1 etcd[1342933]: health check for peer 7176dd381f583d83 could not connect: dial tcp 192.168.1.2:2380: i/o timeout
Apr 15 11:50:49 PSQL_1 etcd[1342933]: health check for peer 7176dd381f583d83 could not connect: dial tcp 192.168.1.2:2380: i/o timeout

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
Apr 15 14:04:30 PSQL_1 etcd[1342933]: health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: connect: connection refused
Apr 15 14:04:30 PSQL_1 etcd[1342933]: health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: connect: connection refused
Apr 15 14:04:35 PSQL_1 etcd[1342933]: health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: connect: connection refused
Apr 15 14:04:35 PSQL_1 etcd[1342933]: health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: connect: connection refused
Apr 15 14:04:40 PSQL_1 etcd[1342933]: health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: connect: connection refused
Apr 15 14:04:40 PSQL_1 etcd[1342933]: health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: connect: connection refused

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 etcd szolgáltatás hibásan működik vagy le van állítva a célcsomóponton. Ebben az esetben ellenőrizze az etcd szolgá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ötti TCP/2380 forgalmat. 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
Apr 15 14:04:15 PSQL_1 etcd[1342933]: health check for peer e3d5ef565a5bb46c could not connect: dial tcp 192.168.1.3:2380: connect: connection refused
Apr 15 14:04:15 PSQL_1 etcd[1342933]: health check for peer e3d5ef565a5bb46c could not connect: dial tcp 192.168.1.3:2380: connect: connection refused
Apr 15 14:04:20 PSQL_1 etcd[1342933]: health check for peer e3d5ef565a5bb46c could not connect: dial tcp 192.168.1.3:2380: connect: connection refused
Apr 15 14:04:20 PSQL_1 etcd[1342933]: health check for peer e3d5ef565a5bb46c could not connect: dial tcp 192.168.1.3:2380: connect: connection refused
Apr 15 14:04:25 PSQL_1 etcd[1342933]: health check for peer e3d5ef565a5bb46c could not connect: dial tcp 192.168.1.3:2380: connect: connection refused

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
○ etcd.service - etcd - highly-available key value store
    Loaded: loaded (/lib/systemd/system/etcd.service; enabled; preset: enabled)
    Active: inactive (dead) since Wed 2026-04-15 16:09:34 CEST; 38s ago
Duration: 1min 36.087s
    Docs: https://etcd.io/docs
            man:etcd
    Process: 1400558 ExecStart=/usr/bin/etcd $DAEMON_ARGS (code=killed, signal=TERM)
Main PID: 1400558 (code=killed, signal=TERM)
        CPU: 49.071s

Apr 15 12:26:32 PSQL_3 etcd[1197556]: finished scheduled compaction at 1665243 (took 583.297µs)
Apr 15 13:26:32 PSQL_3 etcd[1197556]: store.index: compact 1665949
Apr 15 13:26:32 PSQL_3 etcd[1197556]: finished scheduled compaction at 1665949 (took 574.496µs)
Apr 15 14:26:32 PSQL_3 etcd[1197556]: store.index: compact 1666658
Apr 15 14:26:32 PSQL_3 etcd[1197556]: finished scheduled compaction at 1666658 (took 567.196µs)
Apr 15 15:26:32 PSQL_3 etcd[1197556]: store.index: compact 1667368
Apr 15 15:26:32 PSQL_3 etcd[1197556]: finished scheduled compaction at 1667368 (took 568.096µs)
Apr 15 16:09:34 PSQL_3 systemd[1]: etcd.service: Deactivated successfully.
Apr 15 16:09:34 PSQL_3 systemd[1]: Stopped etcd.service - etcd - highly-available key value store.
Apr 15 16:09:34 PSQL_3 systemd[1]: etcd.service: Consumed 49.071s CPU time.

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
Apr 15 16:38:54 PSQL_1 etcd[1407644]: rejected connection from "<PEER_IP_PSQL_NODE>:49274" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Apr 15 16:38:54 PSQL_1 etcd[1407644]: rejected connection from "<PEER_IP_PSQL_NODE>:49294" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Apr 15 16:38:54 PSQL_1 etcd[1407644]: rejected connection from "<PEER_IP_PSQL_NODE>:49288" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Apr 15 16:38:55 PSQL_1 etcd[1407644]: rejected connection from "<PEER_IP_PSQL_NODE>:49316" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Apr 15 16:38:55 PSQL_1 etcd[1407644]: rejected connection from "<PEER_IP_PSQL_NODE>:49304" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Apr 15 16:38:55 PSQL_1 etcd[1407644]: rejected connection from "<PEER_IP_PSQL_NODE>:60958" (error "remote error: tls: bad certificate", ServerName "PSQL_1")

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
Apr 15 16:38:54 PSQL_1 etcd[1407644]: rejected connection from "192.168.1.2:49274" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Apr 15 16:38:54 PSQL_1 etcd[1407644]: rejected connection from "192.168.1.3:49294" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Apr 15 16:38:54 PSQL_1 etcd[1407644]: rejected connection from "192.168.1.2:49288" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Apr 15 16:38:55 PSQL_1 etcd[1407644]: rejected connection from "192.168.1.2:49316" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Apr 15 16:38:55 PSQL_1 etcd[1407644]: rejected connection from "192.168.1.3:49304" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Apr 15 16:38:55 PSQL_1 etcd[1407644]: rejected connection from "192.168.1.3:60958" (error "remote error: tls: bad certificate", ServerName "PSQL_1")

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
openssl x509 -in /etc/etcd/peer.crt -noout -enddate
openssl x509 -in /etc/etcd/ca.crt -noout -enddate

A kimenet azt mutatja, hogy a csomópont tanúsítványa lejárt:

1
2
notAfter=Dec 18 14:04:09 2025 GMT
notAfter=Dec 17 14:03:47 2030 GMT

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
Apr 10 14:15:26 PSQL_1 etcd[454701]: Go OS/Arch: linux/amd64
Apr 10 14:15:26 PSQL_1 etcd[454701]: setting maximum number of CPUs to 1, total number of available CPUs is 1
Apr 10 14:15:26 PSQL_1 etcd[454701]: error listing data dir: /var/lib/etcd/cleanroom
Apr 10 14:15:26 PSQL_1 systemd[1]: etcd.service: Main process exited, code=exited, status=1/FAILURE
Apr 10 14:15:26 PSQL_1 systemd[1]: etcd.service: Failed with result 'exit-code'.
Apr 10 14:15:26 PSQL_1 systemd[1]: Failed to start etcd.service - etcd - highly-available key value store

A probléma megoldásához rendelje hozzá a megfelelő engedélyeket a könyvtárhoz a következő paranccsal:

1
chown -R etcd:etcd /var/lib/etcd/cleanroom