Patroni连接etcd报错:无法获取成员列表,API版本兼容求助
部署2节点Patroni+etcd集群,节点信息:
- vsa14156957 10.180.9.88
- vsa14156959 10.180.8.36
etcd集群状态正常,etcdctl能正常查看成员列表,Patroni 4.0.6、python-etcd 0.4.5等依赖已安装,但启动Patroni时持续报错:
Jun 12 07:55:07 vsa14156957 patroni[16895]: 2025-06-12 07:55:07,961 ERROR: Failed to get list of machines from http://10.180.9.88:2379/v2: EtcdException('Bad response : 404 page not found\n',)
Jun 12 07:55:07 vsa14156957 patroni[16895]: 2025-06-12 07:55:07,962 ERROR: Failed to get list of machines from http://10.180.8.36:2379/v2: EtcdException('Bad response : 404 page not found\n',)
Jun 12 07:55:07 vsa14156957 patroni[16895]: 2025-06-12 07:55:07,962 INFO: waiting on etcd
问题原因是Patroni默认使用etcd v2 API连接,但当前etcd集群已禁用v2 API,需配置改用v3 API。
1. 替换依赖库
当前使用的python-etcd 0.4.5仅支持v2 API,必须替换为支持v3的etcd3-py:
pip uninstall -y python-etcd pip install etcd3-py
2. 修改Patroni配置文件
找到Patroni配置文件(例如/etc/patroni/patroni.yml),在etcd配置段添加protocol: v3:
etcd: hosts: ["http://10.180.9.88:2379", "http://10.180.8.36:2379"] protocol: "v3" # 强制使用v3 API # 若etcd启用认证,按需补充以下配置: # username: "your-etcd-user" # password: "your-etcd-pass"
3. 重启Patroni服务
systemctl restart patroni
4. 验证
查看Patroni日志确认报错消失,或用命令检查集群状态:
patronictl list
如果etcd集群使用TLS加密,需在Patroni配置中添加证书路径:
etcd: hosts: ["https://10.180.9.88:2379", "https://10.180.8.36:2379"] protocol: "v3" certfile: "/path/to/client.crt" keyfile: "/path/to/client.key" cacert: "/path/to/ca.crt"
内容的提问来源于stack exchange,提问作者EisenWang

