Patroni-Verbindungsausfallsicherung

Patroni-Verbindungsausfallsicherung

3 Rechenzentren:

Patroni-Version: 2.1.4

PostgreSQL-Version: 14.4

Etcd-Version: 3.3.11

Gleichstrom Server Name Gastgeber Status
1 Patroni patroni-s11 172.16.0.2 Führer
1 Patroni patroni-s12 172.16.0.3 Sync-Standby
1 ETCD etcd-s11 172.16.0.4 Führer
2. Platz Patroni patroni-s21 172.16.1.2 Replik
2. Platz Patroni patroni-s22 172.16.1.3 Replik
2. Platz ETCD etcd-s21 172.16.1.4 Sklave
3. Platz Patroni patroni-s31 172.16.2.2 Replik
3. Platz ETCD etcd-s31 172.16.2.4 Sklave

Ich habe einen Verbindungsfehler zwischen dem 1. und dem 2. Rechenzentrum simuliert. Beide Rechenzentren sind aktiv, aber das 1. und das 2. „sehen“ sich nicht.

In diesem Fall bleibt der Patroni-Leader weiterhin im 1. Rechenzentrum. Aber die Server im 2. Rechenzentrum werden nicht mit dem Cluster synchronisiert. Wenn man an die Gesundheit des Clusters glaubt, ist alles in Ordnung, keine Replikationsverzögerung zwischen den Servern. In Wirklichkeit werden alle Änderungen am Master nicht mit Replikaten im 2. Rechenzentrum synchronisiert.

[user@patroni-s11 ~]$ sudo patronictl -c /etc/patroni/patroni.yml list
2022-12-01 16:00:00,015 - ERROR - Request to server 172.16.1.4:2379 failed: MaxRetryError("HTTPConnectionPool(host='172.16.1.4', port=2379): Max retries exceeded with url: /v2/keys/service/patroni_cluster/?recursive=true (Caused by ProtocolError('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer')))",)
+ Cluster: patroni_cluster (7117639577766255236) ---+---------+-----+-----------+
| Member          | Host          | Role         | State   |  TL | Lag in MB |
+-----------------+---------------+--------------+---------+-----+-----------+
| patroni-s11     | 172.16.0.2    | Leader       | running | 103 |           |
| patroni-s12     | 172.16.0.3    | Sync Standby | running | 103 |         0 |
| patroni-s21     | 172.16.1.2    | Replica      | running | 103 |         0 |
| patroni-s22     | 172.16.1.3    | Replica      | running | 103 |         0 |
| patroni-s31     | 172.16.2.2    | Replica      | running | 103 |         0 |
+-----------------+---------------+--------------+---------+-----+-----------+

Passiert immer noch mit Etcd-Servern, der Anführer bleibt immer noch im 1. DC.

[user@etcd-s11 ~]$ sudo etcdctl cluster-health
failed to check the health of member a85c06b926e6c6c8 on 172.16.1.4:2379: Get 172.16.1.4:2379/health: read tcp 10.220.0.3:38836->172.16.1.4:2379: read: connection reset by peer
member 261f8081db14d568 is healthy: got healthy result from 172.16.0.4:2379
member a85c06b926e6c6c8 is unreachable: [172.16.1.4: 2379] are all unreachable
member b87bd1df518cc9e4 is healthy: got healthy result from 172.16.2.4:2379
cluster is degraded

[user@etcd-s11 ~]$ sudo etcdctl member list
261f8081db14d568: name=etcd-s11 peerURLs=172.16.0.4:2380 clientURLs=172.16.0.4:2379 isLeader=true
a85c06b926e6c6c8: name=etcd-s21 peerURLs=172.16.1.4:2380 clientURLs=172.16.1.4:2379 isLeader=false
b87bd1df518cc9e4: name=etcd-s31 peerURLs=172.16.2.4:2380 clientURLs=172.16.2.4: 2379 isLeader=false

Aber Etcd im 3. Rechenzentrum sieht, dass der Cluster gesund ist

[user@etcd-s31 ~]$ sudo etcdctl cluster-health
member 261f8081db14d568 is healthy: got healthy result from http:// 172.16.0.4: 2379
member a85c06b926e6c6c8 is healthy: got healthy result from http:// 172.16.1.4: 2379
member b87bd1df518cc9e4 is healthy: got healthy result from http:// 172.16.2.4: 2379
cluster is healthy

Ich hatte erwartet, dass die Anführer die Server des 3. DC werden.

Kann Patroni\etcd in diesem Fall den Anführer austauschen?

Antwort1

Zunächst einmal ist das Quorum 5/2 mit Level-Up, 3 Servern, was erreicht wird, wenn Sie Site1 + Site 3 laufen haben und das Verhalten, das Sie gesehen haben, das erwartete ist

Wenn Site 1 + Site 3 die Anforderungen nicht erfüllen, wird es ein Diff-Seinario geben.

verwandte Informationen