Zalando Postgres Operator使用patroni提供kubernetes环境下postgresql集群的高可用,patroni使用etcd集群保存高可用数据。
patroni使用DCS可以选择共用k8s集群的etcd,也可以连接独立etcd。关于patroni使用etcd集群的影响分析如下。
operator相关配置
关于patroni使用DCS是否为共用k8s集群etcd,体现在operatorConfiguration配置中:
etcd_host: ""
如果etcd_host为空,表示共用k8s集群etcd;——默认值
如果希望使用独立etcd集群,则需在etcd_host配置访问地址;
现状
1、如果operatorConfiguration配置etcd_host为空,那么operator会置环境变量DCS_ENABLE_KUBERNETES_API为true;
2、如果operatorConfiguration配置etcd_host不为空,那么operator检测到配置,首先置DCS_ENABLE_KUBERNETES_API为false,将host值写入到环境变量ETCD_HOST中。
spilo 检测到环境变量ETCD_HOST后,会将值写入到patroni 配置文件中,形式如下:
bootstrap:
....
etcd:
host: 10.104.89.255:2379
postgresql:
.....
对于etcd_host不为空的情况,目前支持现状为:
对于使用未开启权限认证的etcd集群,patroni可以正常运行;
如果etcd集群开启认证,则会报错Error: 110: The request requires user authentication;
目前patroni是支持使用开启认证的etcd集群,只是operator层面没有暴露etcd username/password相关配置;
持久化数据分析
patroni模块通过etcd持久化的数据如下:
- 数据量
根据以上数据分析,单个集群在etcd中持久化的数据为KB级;
- *读写请求
持续watch /service/{pg-cluster-name}目录一段时间:
在集群正常运行过程中,对etcd的数据操作主要为leader key的CAS操作,以及pg集群各节点的状态更新;
以上数据更新频率取决于patroni 配置loop_wait,默认值为10s;
假设管理pg集群个数为M,每个集群规模为一主N从,反映到etcd的tps大约是MN/loop_wait,在集群规模不是超大情况下,请求量压力较小;
当然除以上数据操作外,还有各个节点对leader key的watch操作;