集群配置
根据需求场景选择合适的 Etcd 集群规模,并对外提供可靠的接入。
Module:
Categories:
在部署 Etcd 之前,你需要在 配置清单 中定义一个 Etcd 集群,通常来说,你可以选择:
- 单节点,没有高可用性,适用于开发、测试、演示,或者依赖外部S3备份进行PITR的无高可用单机部署。
- 三节点,具有基本的高可用性,可以容忍一个节点的故障,适用于中小规模的生产环境
- 五节点,具有更好的高可用性,可以容忍两个节点的故障,适用于大规模生产环境。
偶数节点的 Etcd 集群没有意义,超过五节点的 Etcd 集群并不常见,因此通常使用的规格就是单节点,三节点,五节点。
单节点
在 Pigsty 中,定义一个单例 Etcd 实例非常简单,只需要一行配置即可:
etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
在 Pigsty 提供的所有单机配置模板中,都有这样一项,其中的占位 IP 地址:10.10.10.10
默认会被替换为当前管理节点的 IP。
除了 IP 地址外,这里唯一必要的参数是 etcd_seq
和 etcd_cluster
,它们会唯一标识每一个 Etcd 实例。
三节点
三节点的 Etcd 集群最为常见,它可以容忍一个节点的故障,适用于中小规模的生产环境。
例如,Pigsty 的三节点模板:trio
和 safe
就使用了三节点的 Etcd 集群,如下所示:
etcd:
hosts:
10.10.10.10: { etcd_seq: 1 } # etcd_seq (etcd实例号)是必须指定的身份参数
10.10.10.11: { etcd_seq: 2 } # 实例号是正整数,一般从 0 或 1 开始依次分配
10.10.10.12: { etcd_seq: 3 } # 实例号应当终生不可变,一旦分配就不再回收使用。
vars: # 集群层面的参数
etcd_cluster: etcd # 默认情况下,etcd集群名就叫 etcd, 除非您想要部署多套 etcd 集群,否则不要改这个名字
etcd_safeguard: false # 是否打开 etcd 的防误删安全保险? 在生产环境初始化完成后,可以考虑打开这个选项,避免误删。
etcd_clean: true # 在初始化过程中,是否强制移除现有的 etcd 实例?测试的时候可以打开,这样剧本就是真正幂等的。
五节点
五节点的 Etcd 集群可以容忍两个节点的故障,适用于大规模生产环境。
例如,Pigsty 的生产仿真模板:prod
中就使用了一个五节点的 Etcd 集群:
etcd:
hosts:
10.10.10.21 : { etcd_seq: 1 }
10.10.10.22 : { etcd_seq: 2 }
10.10.10.23 : { etcd_seq: 3 }
10.10.10.24 : { etcd_seq: 4 }
10.10.10.25 : { etcd_seq: 5 }
vars: { etcd_cluster: etcd }
使用Etcd的服务
目前使用 Etcd 的服务有:
- patroni: 用于 PostgreSQL 高可用,Etcd 的配置将填入 Patroni 配置文件。
- vip-manager: 用于在 PostgreSQL 集群上绑定一个可选的 L2 VIP,会从 Etcd 中读取集群的领导者信息。
当 etcd 集群的成员信息发生永久性变更时,您应当 重载相关服务的配置,以确保服务能够正确访问 Etcd 集群。
在 patroni
上更新 etcd 端点引用:
./pgsql.yml -t pg_conf # 重新生成 patroni 配置
ansible all -f 1 -b -a 'systemctl reload patroni' # 重新加载 patroni 配置
在 vip-manager
上更新 etcd 端点引用(如果你正在使用 PGSQL L2 VIP 才需要执行此操作):
./pgsql.yml -t pg_vip_config # 重新生成 vip-manager 配置
ansible all -f 1 -b -a 'systemctl restart vip-manager' # 重启 vip-manager 以使用新配置
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.