Patroni初始化无法创建PostgreSQL数据目录问题求助
针对你遇到的Patroni集群所有节点处于stopped状态、等待leader引导且数据目录无文件生成的问题,可按以下步骤排查解决:
1. 验证Etcd集群连通性
Patroni依赖Etcd做集群协调,首先确认所有Postgres节点能正常访问Etcd服务:
etcdctl --endpoints=http://10.5.0.7:2379 member list
若无法返回Etcd成员列表,检查Etcd服务是否正常运行、节点间防火墙是否开放2379端口、Etcd地址配置是否正确。
2. 手动触发集群引导
自动引导未触发时,可通过patronictl手动初始化集群:
/usr/local/bin/patronictl -c /etc/patroni.yml bootstrap postgres
执行后检查/mnt/data/patroni目录是否生成PostgreSQL初始化文件,同时查看Patroni日志是否有引导成功的信息。
3. 修正PostgreSQL Socket目录配置
你的patroni.yml中unix_socket_directories: '.'配置可能导致初始化失败,建议修改为标准路径:
postgresql: parameters: unix_socket_directories: '/var/run/postgresql'
同时创建并配置该目录权限:
mkdir -p /var/run/postgresql chown postgres:postgres /var/run/postgresql chmod 775 /var/run/postgresql
4. 检查Patroni运行用户权限
确保Patroni服务以postgres用户运行,查看systemd服务配置(如/etc/systemd/system/patroni.service):
[Service] User=postgres Group=postgres
若以root用户启动,会导致PostgreSQL初始化时权限异常,需调整后重启Patroni服务。
5. 检查数据目录父级权限
除了/mnt/data/patroni本身,父目录/mnt/data需保证postgres用户有访问权限:
ls -ld /mnt/data
权限需至少为drwxr-xr-x,若权限不足,执行:
chmod 755 /mnt/data
6. 查看详细日志定位错误
将Patroni日志级别调整为DEBUG,在patroni.yml中添加:
log_level: DEBUG
重启Patroni后查看日志,可获取初始化过程中的具体错误(如initdb执行失败、Etcd锁获取失败等),进一步定位问题。
内容的提问来源于stack exchange,提问作者D Sowri Raj

