常见问题

Pigsty ETCD DCS 模块常见问题答疑

ETCD集群如果不可用了会有什么影响?

ETCD 对于 PGSQL 集群的高可用至关重要,而 etcd 本身的可用性是通过使用多个节点来保证的。使用3节点的 etcd 集群允许最多一个节点宕机,而其他两个节点仍然可以正常工作; 使用五节点的 ETCD 集群则可以容忍两个节点失效。如果超过一半的 ETCD 节点宕机,ETCD 集群及其服务将不可用。在 Patroni 3.0 之前,这可能导致 PGSQL 全局故障;所有的主节点将被降级并拒绝写请求。

自从 pigsty 2.0 起,默认启用了 patroni 3.0 的 DCS 容错模式, 当 etcd 集群不可用时,如果 PostgreSQL 集群主库可以感知到所有成员,就会 锁定 PGSQL 集群状态。

在这种情况下,PGSQL 集群仍然可以正常工作,但您必须尽快恢复 ETCD 集群。(毕竟如果etcd宕机,您就无法通过 patroni 配置PostgreSQL集群了)


如何使用一个外部的已经存在的 ETCD 集群?

配置清单中硬编码了所使用 etcd 的分组名为 etcd,这个分组里的成员将被用作 PGSQL 的 DCS 服务器。您可以使用 etcd.yml 对它们进行初始化,或直接假设它是一个已存在的外部 etcd 集群。

要使用现有的外部 etcd 集群,只要像往常一样定义它们即可,您可以跳过 etcd.yml 剧本的执行,因为集群已经存在,不需要部署。

但您必须确保一点:现有 etcd 集群证书是由同一 CA 签名颁发的。否则客户端是无法使用 Pigsty 自签名的 CA 颁发的证书来访问这套 ETCD 的。


如何向现有ETCD集群添加新的成员?

详细过程,请参考向 etcd 集群添加成员

etcdctl member add <etcd-?> --learner=true --peer-urls=https://<new_ins_ip>:2380 # 在管理节点上宣告新成员加入
./etcd.yml -l <new_ins_ip> -e etcd_init=existing                                 # 真正初始化新 etcd 成员
etcdctl member promote <new_ins_server_id>                                       # 在管理节点上提升新成员为正式成员

如何从现有ETCD集群中移除成员?

详细过程,请参考从 etcd 集群中移除成员

etcdctl member remove <etcd_server_id>   # 在管理节点上从集群中踢出成员
./etcd.yml -l <ins_ip> -t etcd_purge     # 真正清除下线 etcd 实例

Last modified 2024-02-29: update content (34b2b75)