常见问题
Module:
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 实例
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.