Patroni相互接続フェイルオーバー

Patroni相互接続フェイルオーバー

3 つのデータセンター:

パトロニバージョン: 2.1.4

PostgreSQL バージョン: 14.4

その他バージョン: 3.3.11

直流 サーバ 名前 ホスト 状態
1位 パトローニ パトロニ-s11 172.16.0.2 リーダー
1位 パトローニ パトロニ-s12 172.16.0.3 同期スタンバイ
1位 ETCD 等d-s11 172.16.0.4 リーダー
2番目 パトローニ パトロニ-s21 172.16.1.2 レプリカ
2番目 パトローニ パトロニ-s22 172.16.1.3 レプリカ
2番目 ETCD 等d-s21 172.16.1.4 奴隷
3位 パトローニ パトロニ-s31 172.16.2.2 レプリカ
3位 ETCD 等d-s31 172.16.2.4 奴隷

1 番目のデータ センターと 2 番目のデータ センター間の相互接続障害をシミュレートしました。両方の DC は稼働していますが、1 番目と 2 番目の DC は互いを「認識」していません。

この場合、Patroni リーダーは 1 番目の DC に残ります。ただし、2 番目の DC のサーバーはクラスターと同期しません。クラスターの健全性を信じれば、すべて正常で、サーバー間のレプリケーション ラグはありません。実際には、マスターのすべての変更は、2 番目のデータ センターのレプリカと同期しません。

[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 |
+-----------------+---------------+--------------+---------+-----+-----------+

Etcd サーバーでも引き続き発生し、リーダーは依然として 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

しかし、3番目のデータセンターのEtcdは、クラスタが正常であることを確認しています

[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

リーダーは第3DCからのサーバーになるだろうと予想しました。

この場合、Patroni\etcd はリーダーを変更できますか?

答え1

まず、レベルアップでクォームは5/2、サーバーは3つで、サイト1とサイト3が稼働していれば満たされ、見た動作は予想通りです。

サイト1とサイト3が基準を満たさない場合は、異なるセナリオになります。

関連情報