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:
Näpunäide
Logide reaalajas jälgimiseks lisage käsule suvand -f:
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:
| 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:
| 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:
| 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:
| 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:
| 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:
| 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:
| 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:
| 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:
| 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:
| chown -R etcd:etcd /var/lib/etcd/cleanroom
|