PIGSTY

FAQ

常见问题

etcd 在 pigsty 中的作用是什么?

etcd 是一个分布式、可靠的键值存储,用于存储部署中最关键的配置/共识数据。 Pigsty 使用 etcd 作为 Patroni 的 DCS(分布式配置存储)服务,它将存储 PostgreSQL 集群的高可用性状态信息。


我应该选择多少个 etcd 实例?

如果超过(包括)一半的 etcd 实例宕机,etcd 集群及其服务将不可用。

例如,一个 3 节点 etcd 集群最多可以容忍一个节点故障,其他两个节点仍可正常工作;而一个 5 节点 etcd 集群可以容忍 2 个节点故障。

请注意,etcd 集群中的 学习者 实例不计入成员数量。 因此,在一个 3 节点 etcd 集群中,如果有一个学习者实例,实际成员数量是 2,因此无法容忍任何节点故障。

建议选择奇数个 etcd 实例以避免脑裂场景。建议在生产环境中使用 3 或 5 个节点。


etcd 故障的影响是什么?

如果 etcd 集群不可用,它将影响 Pigsty 的控制平面,但不会影响数据平面 — 现有的 PostgreSQL 集群将继续服务,但通过 Patroni 的管理操作将无法工作。

在 etcd 故障期间,PostgreSQL HA 无法执行自动故障转移;大多数 Patroni 操作将被阻塞,如 edit-config、restart、switchover 等… 通过 Ansible playbooks 的管理任务通常不受 etcd 故障影响,如创建数据库、创建用户、重新加载 HBA 和服务等…, 您始终可以直接操作 PostgreSQL 集群以实现大多数 patroni 功能。

请注意,上述描述仅适用于较新版本的 Patroni (>=3.0, Pigsty >= 2.0)。如果您使用较旧版本的 Patroni(<3.0,对应 Pigsty 版本 1.x),etcd / consul 故障将造成严重影响: 所有 PostgreSQL 集群将被降级并拒绝写入请求,etcd 故障将被放大为全局 PostgreSQL 故障。在 Patroni 3.0 的 DCS 故障安全功能之后,这种情况得到了显著改善。


etcd 集群中存储什么数据?

在 Pigsty 中,etcd 仅用于 PostgreSQL HA 共识,默认情况下 etcd 中不存储其他数据。

这些共识数据由 Patroni 管理,当这些数据在 etcd 中丢失时,Patroni 将自动重建它们。