Keri sisuni

Teenuse etcd tõrkeotsing

Teave

Kogu protseduur tuleb läbi viia kasutajana root. Oma privileegide tõstmiseks root-i tasemele saate kasutada käsku su -.

etcd on hajutatud võtme-väärtuse salv, mida kasutatakse PostgreSQL-i klastri sõlmede vahelise koordineerimispunktina. See tsentraliseerib ja jagab usaldusväärselt klastri olekut, sealhulgas liidri identiteeti, liikmete olekut ja lukustusmehhanisme.

patroni tugineb teenusele etcd, et juhtida liidersõlme valimist ja algatada intsidendi korral automaatselt tõrkesiirdeid. Kõigisse sõlmedesse installitud etcd tagab klastri üldise järjepidevuse, osalemata PostgreSQL-i andmete salvestamises ega töötlemises.

Seega sõltub patroni teenusest etcd ega saa korralikult töötada, kui etcd ei tööta.

Teave

Teenuse etcd konfiguratsioon on salvestatud igas sõlmes faili /etc/default/etcd.

Logs

Kogu protseduur tugineb teenuse etcd logidele, mille saate alloleva käsuga:

1
journalctl -u etcd

Näpunäide

Logide reaalajas jälgimiseks lisage käsule suvand -f:

1
journalctl -fu etcd

Teave

Teenuse etcd logid on saadaval ka failis /var/log/syslog.

Tõrkelogide selgitused

health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: i/o timeout

Kui TCP/2380-liiklus pole kahe sõlme vahel avatud, ühendus aegub ja etcd kirjutab järgmised logid:

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

Siin on <PEER_PSQL_NODE_ID> ID, mille etcd sihtsõlmele määras, ja <PEER_IP_PSQL_NODE> sihtsõlme IP-aadress.

Näide

Meie näites on PostgreSQL-i klaster konfigureeritud järgmiselt:

Sõlm Sõlme IP etcd-ID
PSQL_1 192.168.1.1 53d2c129945ccb8b
PSQL_2 192.168.1.2 7176dd381f583d83
PSQL_3 192.168.1.3 e3d5ef565a5bb46c

Käsu journalctl -fu etcd käivitamine serveris PSQL_1 annab järgmised logid:

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

Need logid näitavad, et ühendus serverist PSQL_1 serverisse IP-aadressiga 192.168.1.2 (PSQL_2) ja etcd-ID-ga 7176dd381f583d83 pordil TCP/2380 ei õnnestunud: see aegus. Võime järeldada, et tulemüür hülgab (DROP) liikluse serverist PSQL_1 serverisse PSQL_2.

Seda liiklust võib hüljata (DROP) PostgreSQL-i appliance'i kohalik tulemüür: kontrollige asjaomastes sõlmedes appliance'i tulemüüri konfiguratsiooni. Kui see konfiguratsioon on õige, hülgab (DROP) kahe sõlme vahelise TCP/2380-liikluse mõni infrastruktuuri tulemüür.

health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: connect: connection refused

Kui kahe sõlme vaheline ühendus lükatakse tagasi, teatab etcd sellest järgmiste logidega:

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

Siin on <PEER_PSQL_NODE_ID> ID, mille etcd sihtsõlmele määras, ja <PEER_IP_PSQL_NODE> sihtsõlme IP-aadress.

Tagasilükkamisel võib olla mitu põhjust:

  • Teenus etcd töötab sihtsõlmes valesti või on peatatud. Sel juhul kontrollige selle sõlme teenuse etcd olekut (systemctl status etcd) ja logisid.
  • Tulemüür lükkab kahe sõlme vahelise TCP/2380-liikluse tagasi (REJECT). See võib olla appliance'i kohalik tulemüür või infrastruktuuri tulemüür.
Näide

Meie näites on PostgreSQL-i klaster konfigureeritud järgmiselt:

Sõlm Sõlme IP etcd-ID
PSQL_1 192.168.1.1 53d2c129945ccb8b
PSQL_2 192.168.1.2 7176dd381f583d83
PSQL_3 192.168.1.3 e3d5ef565a5bb46c

Käsu journalctl -fu etcd käivitamine serveris PSQL_1 annab järgmised logid:

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

Need logid näitavad, et ühendus serverist PSQL_1 serverisse IP-aadressiga 192.168.1.3 (PSQL_3) ja etcd-ID-ga e3d5ef565a5bb46c pordil TCP/2380 lükati tagasi.

Serveris PSQL_3 näitab käsk systemctl status etcd, et etcd on peatatud:

 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.

Kui etcd on käivitatud, on probleem lahendatud.

rejected connection from "<PEER_IP_PSQL_NODE>:35956" (error "remote error: tls: bad certificate", ServerName "PSQL_1")

Kui PostgreSQL-i klastri sertifikaadid on aegunud või neid pole sõlmes, kust logisid loete, õigesti installitud või uuendatud, kuvatakse teenuse etcd logides järgmine tõrge:

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")

Siin on <PEER_IP_PSQL_NODE> ühe klastri sõlme IP-aadress.

See logi näitab, et kui sõlm, millega olete ühendatud, üritas luua ühendust klastri teiste sõlmedega (<PEER_IP_PSQL_NODE>), lükkasid need selle tagasi, teatades tõrkest praeguse sõlme sertifikaadis.

Seetõttu peaksite sõlmes, millega olete ühendatud, kontrollima klastri sertifikaatide kehtivust.

Hoiatus

Kui kaugsõlmes (failis /etc/etcd/ca.crt) konfigureeritud sertifitseerimisasutus on vale, ilmneb tõrge ka sõlmes, kust logisid loete: see näitab siis, et kaugsõlm ei saa esitatud sertifikaati valideerida, kuna sellel pole õiget CA-d.

Näide

Meie näites on PostgreSQL-i klaster konfigureeritud järgmiselt:

Sõlm Sõlme IP etcd-ID
PSQL_1 192.168.1.1 53d2c129945ccb8b
PSQL_2 192.168.1.2 7176dd381f583d83
PSQL_3 192.168.1.3 e3d5ef565a5bb46c

Käsu journalctl -fu etcd käivitamine serveris PSQL_1 annab järgmised logid:

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")

Need logid näitavad, et sõlmed PSQL_2 ja PSQL_3 lükkasid sõlme PSQL_1 ühenduse tagasi, kuna sõlme PSQL_1 sertifikaat pole selles kontekstis kehtiv.

Seetõttu kontrollime sõlme PSQL_1 sertifikaatide kehtivust, järgides klastri sertifikaatide kontrollimise protseduuri:

1
2
openssl x509 -in /etc/etcd/peer.crt -noout -enddate
openssl x509 -in /etc/etcd/ca.crt -noout -enddate

Väljund näitab, et sõlme sertifikaat on aegunud:

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

Sel juhul peate uuendama PostgreSQL-i klastri sertifikaadid.

error listing data dir: /var/lib/etcd/cleanroom

Kui teenusel etcd pole kataloogi /var/lib/etcd/cleanroom jaoks õigeid lubasid, keeldub teenus käivitumast ja kirjutab järgmised logid:

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

Selle probleemi lahendamiseks määrake kataloogile järgmise käsuga õiged load:

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