Patroni搭建PostgreSQL集群后成员均为stopped状态的求助
问题描述
在Rocky 8.9系统中完成以下操作:
- 安装Patroni
- 安装PostgresPro STD 16
- 编写
/etc/patroni.yml配置文件 - 编写
/etc/systemd/system/patroni.service服务文件
启动后,systemctl查看patroni.service和postgrespro-std-16状态均正常,端口5432已绑定,其余3个集群节点状态一致。但查询Patroni集群状态时,所有成员均显示为stopped:
+ Cluster: pg-ha-cluster (7337187168991802534) ----+-----------+ | Member | Host | Role | State | TL | Lag in MB | +---------+---------------+---------+---------+----+-----------+ | pp_pg_1 | 192.168.10.1 | Replica | stopped | | unknown | | pp_pg_2 | 192.168.10.2 | Replica | stopped | | unknown | | pp_pg_3 | 192.168.10.3 | Replica | stopped | | unknown | | pp_pg_4 | 192.168.10.4 | Replica | stopped | | unknown | +---------+---------------+---------+---------+----+-----------+
已开启debug模式检查所有日志,未发现错误日志,所有日志均显示成功。
排查与解决方案
1. 校验Patroni配置中的PostgreSQL路径匹配
PostgresPro STD 16的默认安装路径与社区版PostgreSQL不同,需确保/etc/patroni.yml中的关键路径配置指向PostgresPro的实际路径:
bin_dir: 需设置为/opt/postgrespro/std-16/bin(默认安装路径)data_dir: 确认指向PostgresPro的数据目录(如自定义路径需对应)pid_file: 需设置为/opt/postgrespro/std-16/data/postmaster.pid(或自定义数据目录下的对应文件)
2. 验证Patroni服务的运行权限
- 检查
patroni.service文件中的User和Group是否设置为postgres(PostgresPro的默认运行用户) - 确认PostgresPro数据目录的权限:
ls -ld /opt/postgrespro/std-16/data
确保postgres用户拥有该目录的读写执行权限(权限应为drwx------或包含postgres用户的rwx权限)
3. 检查Patroni与PostgreSQL的进程关联
- 查看Patroni debug日志中与PostgreSQL状态检查相关的输出,确认是否存在命令执行失败的细节(即使日志无错误标记,debug级日志可能包含状态检查的具体命令返回值)
- 手动执行Patroni用于检查PostgreSQL状态的命令,验证是否能正确识别运行状态:
sudo -u postgres /opt/postgrespro/std-16/bin/pg_ctl status -D /opt/postgrespro/std-16/data
4. 重置Patroni集群状态缓存
- 依次重启所有节点的Patroni服务:
systemctl restart patroni.service
等待5-10分钟后,重新执行patronictl list查看状态
- 若状态仍异常,可尝试在其中一个节点重新初始化集群(操作前请备份数据):
patronictl reinit pg-ha-cluster pp_pg_1
完成后让其他节点重新加入集群
5. 校验DCS配置一致性
- 确保所有节点的
patroni.yml中DCS(如etcd/consul)的配置完全一致,包括集群名称、DCS地址、认证信息等 - 清理DCS中对应集群的旧数据(如etcd中
/service/pg-ha-cluster路径下的历史数据),然后重启所有Patroni服务
内容的提问来源于stack exchange,提问作者i.abdukhoshimov
相关产品推荐
相关产品推荐

