Conmutación por error de interconexión Patroni

Conmutación por error de interconexión Patroni

3 Centros de Datos:

Versión de Patroni: 2.1.4

Versión de PostgreSQL: 14.4

Versión de etcd: 3.3.11

corriente continua Servidor Nombre Anfitrión Estado
1er patroni patroni-s11 172.16.0.2 Líder
1er patroni patroni-s12 172.16.0.3 Sincronización en espera
1er ETCD etcd-s11 172.16.0.4 Líder
2do patroni patroni-s21 172.16.1.2 Réplica
2do patroni patroni-s22 172.16.1.3 Réplica
2do ETCD etcd-s21 172.16.1.4 esclavo
3er patroni patroni-s31 172.16.2.2 Réplica
3er ETCD etcd-s31 172.16.2.4 esclavo

Simulé una falla de interconexión entre el primer centro de datos y el segundo, ambos DC están activos, pero el primero y el segundo no se "ven" entre sí.

En este caso, el líder de Patroni aún permanece en el 1º DC. Pero los servidores en 2nd DC no se sincronizan con el clúster. Si cree en el estado del clúster, todo está bien, no hay retrasos en la replicación entre servidores. En realidad, todos los cambios en el maestro no se sincronizan con las réplicas en el segundo centro de datos.

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

Todavía sucede con los servidores de Etcd, el líder aún permanece en 1er 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

Pero Etcd en el tercer centro de datos ve que el clúster está en buen estado.

[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

Esperaba que los líderes se convirtieran en servidores del 3er DC.

¿Puede Patroni\etcd cambiar de líder en este caso?

Respuesta1

En primer lugar, el qourm es 5/2 con nivel superior, 3 servidores que se cumplirán si tiene el sitio 1 + el sitio 3 ejecutándose y el comportamiento que vio es el esperado.

si el sitio 1 + el sitio 3 no cumple con el qourm, será diferente seinario

información relacionada