3 центра обработки данных:
Версия Patroni: 2.1.4
Версия PostgreSQL: 14.4
Версия etcd: 3.3.11
ОКРУГ КОЛУМБИЯ | Сервер | Имя | Хозяин | Положение дел |
---|---|---|---|---|
1-й | Патрони | патрони-s11 | 172.16.0.2 | Лидер |
1-й | Патрони | патрони-s12 | 172.16.0.3 | Синхронизация в режиме ожидания |
1-й | ETCD | etcd-s11 | 172.16.0.4 | Лидер |
2-й | Патрони | патрони-s21 | 172.16.1.2 | Реплика |
2-й | Патрони | патрони-s22 | 172.16.1.3 | Реплика |
2-й | ETCD | etcd-s21 | 172.16.1.4 | раб |
3-й | Патрони | патрони-s31 | 172.16.2.2 | Реплика |
3-й | ETCD | etcd-s31 | 172.16.2.4 | раб |
Я смоделировал сбой соединения между первым и вторым центрами обработки данных, оба ЦОД работают, но первый и второй не «видят» друг друга.
В этом случае лидер Patroni все еще остается в 1-м ЦОД. Но серверы во 2-м ЦОД не синхронизируются с кластером. Если верить в работоспособность кластера, все в порядке, нет задержки репликации между серверами. В реальности все изменения на главном, не синхронизируются с репликами во 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
Но Etcd в 3-м центре обработки данных видит, что кластер здоров
[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
Я ожидал, что лидерами станут серверы из 3-го ДК.
Может ли Patroni\etcd сменить лидера в этом случае?
решение1
Прежде всего, qourm - это 5/2 с повышением уровня, 3 сервера, которые будут выполнены, если у вас запущены site1 + site 3, и поведение, которое вы увидели, является ожидаемым.
если сайт 1 + сайт 3 не соответствует qourm, то это будет diff seinario