检查 Patroni DCS(etcd/Consul)和 REST API 健康状况
PostgreSQLPatroni命令
# etcd v3 (default API in etcd 3.4+): member health, leader, raft term and DB size
etcdctl --endpoints=https://<etcd1>:2379,https://<etcd2>:2379,https://<etcd3>:2379 --cacert=/etc/etcd/ca.crt endpoint health --cluster -w table
etcdctl --endpoints=https://<etcd1>:2379 --cacert=/etc/etcd/ca.crt endpoint status --cluster -w table
etcdctl --endpoints=https://<etcd1>:2379 --cacert=/etc/etcd/ca.crt alarm list
# Consul:
consul members
consul operator raft list-peers
# Patroni REST API (on each member):
curl -s http://<member>:8008/cluster | python3 -m json.tool
curl -s -o /dev/null -w '%{http_code}\n' http://<member>:8008/primary # 200 = leader, 503 = not leader作用
检查 Patroni 持有 leader 锁的 DCS 的 quorum、leader 和容量,并通过 Patroni REST API 查看每个成员对自身角色的认知。/primary 端点是负载均衡器(HAProxy)健康检查的基础。
适用场景
当 Patroni 日志出现 'DCS is not accessible'、发生意外的降级/故障转移后,以及作为例行健康检查。
注意
如果 DCS 失去 quorum,Patroni 无法续约 leader 锁,会将主库降级为只读(除非启用了 failsafe_mode,Patroni 3.0+);因此 etcd 中断就等于数据库写入中断。当 etcd 数据库大小达到配额(默认 2 GB)时,NOSPACE 告警会停止写入。DCS 至少应在 3 个节点上运行,并使用独立的磁盘。