etcd-palvelun vianmääritys
Info
Koko toimenpide on suoritettava root-käyttäjänä. Voit korottaa oikeutesi root-tasolle komennolla su -.
etcd on hajautettu avain-arvo-säilö (distributed key-value store), jota käytetään PostgreSQL-klusterin solmujen välisenä koordinointipisteenä. Se keskittää ja jakaa luotettavasti klusterin tilan, mukaan lukien johtajan identiteetin, jäsenten tilan ja lukitusmekanismit.
patroni tukeutuu etcd-palveluun johtajasolmun valinnan ohjaamisessa ja vikasietosiirtojen automaattisessa käynnistämisessä häiriön sattuessa. Kaikille solmuille asennettuna etcd takaa klusterin yleisen johdonmukaisuuden osallistumatta PostgreSQL-tietojen tallennukseen tai käsittelyyn.
patroni on siis riippuvainen etcd-palvelusta eikä voi toimia oikein, jos etcd ei toimi.
Info
etcd-palvelun määritys tallennetaan kunkin solmun tiedostoon /etc/default/etcd.
Lokit
Koko toimenpide perustuu etcd-palvelun lokeihin, jotka saat alla olevalla komennolla:
Vihje
Jos haluat seurata lokeja reaaliajassa, lisää komentoon valitsin -f:
Info
etcd-palvelun lokit ovat saatavilla myös tiedostossa /var/log/syslog.
Virhelokien selitykset
health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: i/o timeout
Jos TCP/2380-liikenne ei ole avoinna kahden solmun välillä, yhteys aikakatkaistaan ja etcd kirjoittaa seuraavat lokimerkinnät:
| 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
|
Tässä <PEER_PSQL_NODE_ID> on ID, jonka etcd on antanut kohdesolmulle, ja <PEER_IP_PSQL_NODE> on kohdesolmun IP-osoite.
Esimerkki
Esimerkissämme PostgreSQL-klusteri on määritetty seuraavasti:
| Solmu |
Solmun IP |
etcd-ID |
| PSQL_1 |
192.168.1.1 |
53d2c129945ccb8b |
| PSQL_2 |
192.168.1.2 |
7176dd381f583d83 |
| PSQL_3 |
192.168.1.3 |
e3d5ef565a5bb46c |
Komennon journalctl -fu etcd suorittaminen palvelimella PSQL_1 tuottaa seuraavat lokimerkinnät:
| 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
|
Nämä lokimerkinnät osoittavat, että yhteys palvelimelta PSQL_1 palvelimeen, jonka IP-osoite on 192.168.1.2 (PSQL_2) ja etcd-ID 7176dd381f583d83, portissa TCP/2380 ei onnistunut: se aikakatkaistiin.
Voimme päätellä, että palomuuri pudottaa (DROP) liikenteen palvelimelta PSQL_1 palvelimeen PSQL_2.
PostgreSQL-appliancen paikallinen palomuuri voi pudottaa (DROP) tämän liikenteen: tarkista appliancen palomuurin määritys kyseisillä solmuilla.
Jos tämä määritys on oikein, infrastruktuurin palomuuri pudottaa (DROP) TCP/2380-liikenteen näiden kahden solmun välillä.
health check for peer <PEER_PSQL_NODE_ID> could not connect: dial tcp <PEER_IP_PSQL_NODE>:2380: connect: connection refused
Kun kahden solmun välinen yhteys hylätään, etcd ilmoittaa siitä seuraavilla lokimerkinnöillä:
| 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
|
Tässä <PEER_PSQL_NODE_ID> on ID, jonka etcd on antanut kohdesolmulle, ja <PEER_IP_PSQL_NODE> on kohdesolmun IP-osoite.
Hylkäämisellä voi olla useita syitä:
etcd-palvelu toimii virheellisesti tai on pysäytetty kohdesolmulla. Tarkista tällöin kyseisen solmun etcd-palvelun tila (systemctl status etcd) ja lokit.
- Palomuuri hylkää (
REJECT) TCP/2380-liikenteen kahden solmun välillä. Se voi olla appliancen paikallinen palomuuri tai infrastruktuurin palomuuri.
Esimerkki
Esimerkissämme PostgreSQL-klusteri on määritetty seuraavasti:
| Solmu |
Solmun IP |
etcd-ID |
| PSQL_1 |
192.168.1.1 |
53d2c129945ccb8b |
| PSQL_2 |
192.168.1.2 |
7176dd381f583d83 |
| PSQL_3 |
192.168.1.3 |
e3d5ef565a5bb46c |
Komennon journalctl -fu etcd suorittaminen palvelimella PSQL_1 tuottaa seuraavat lokimerkinnät:
| 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
|
Nämä lokimerkinnät osoittavat, että yhteys palvelimelta PSQL_1 palvelimeen, jonka IP-osoite on 192.168.1.3 (PSQL_3) ja etcd-ID e3d5ef565a5bb46c, portissa TCP/2380 hylättiin.
Palvelimella PSQL_3 komento systemctl status etcd näyttää, että etcd on pysäytetty:
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.
|
Kun etcd on käynnistetty, ongelma on ratkaistu.
rejected connection from "<PEER_IP_PSQL_NODE>:35956" (error "remote error: tls: bad certificate", ServerName "PSQL_1")
Jos PostgreSQL-klusterin sertifikaatit ovat vanhentuneet tai niitä ei ole asennettu tai uusittu oikein sillä solmulla, jolta luet lokeja, etcd-palvelun lokeihin ilmestyy seuraava virhe:
| 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")
|
Tässä <PEER_IP_PSQL_NODE> on jonkin klusterin solmun IP-osoite.
Tämä lokimerkintä osoittaa, että kun solmu, johon olet yhteydessä, yritti muodostaa yhteyden klusterin muihin solmuihin (<PEER_IP_PSQL_NODE>), ne hylkäsivät sen ja ilmoittivat virheestä nykyisen solmun sertifikaatissa.
Sinun kannattaa siis tarkistaa klusterin sertifikaattien voimassaolo solmulla, johon olet yhteydessä.
Varoitus
Jos etäsolmulle määritetty varmentaja (tiedostossa /etc/etcd/ca.crt) on virheellinen, virhe näkyy myös sillä solmulla, jolta luet lokeja: se osoittaa silloin, että etäsolmu ei pysty vahvistamaan esitettyä sertifikaattia, koska sillä ei ole oikeaa varmentajaa (CA).
Esimerkki
Esimerkissämme PostgreSQL-klusteri on määritetty seuraavasti:
| Solmu |
Solmun IP |
etcd-ID |
| PSQL_1 |
192.168.1.1 |
53d2c129945ccb8b |
| PSQL_2 |
192.168.1.2 |
7176dd381f583d83 |
| PSQL_3 |
192.168.1.3 |
e3d5ef565a5bb46c |
Komennon journalctl -fu etcd suorittaminen palvelimella PSQL_1 tuottaa seuraavat lokimerkinnät:
| 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")
|
Nämä lokimerkinnät osoittavat, että solmut PSQL_2 ja PSQL_3 hylkäsivät solmun PSQL_1 yhteyden, koska solmun PSQL_1 sertifikaatti ei ole kelvollinen tässä yhteydessä.
Tarkistamme siksi solmun PSQL_1 sertifikaattien voimassaolon noudattamalla klusterin sertifikaattien tarkistuksen ohjeita:
| openssl x509 -in /etc/etcd/peer.crt -noout -enddate
openssl x509 -in /etc/etcd/ca.crt -noout -enddate
|
Tuloste osoittaa, että solmun sertifikaatti on vanhentunut:
| notAfter=Dec 18 14:04:09 2025 GMT
notAfter=Dec 17 14:03:47 2030 GMT
|
Tässä tapauksessa sinun on uusittava PostgreSQL-klusterin sertifikaatit.
error listing data dir: /var/lib/etcd/cleanroom
Jos etcd-palvelulla ei ole oikeita käyttöoikeuksia hakemistoon /var/lib/etcd/cleanroom, palvelu ei suostu käynnistymään ja kirjoittaa seuraavat lokimerkinnät:
| 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
|
Ratkaise ongelma antamalla hakemistolle oikeat käyttöoikeudet seuraavalla komennolla:
| chown -R etcd:etcd /var/lib/etcd/cleanroom
|