启动Patroni失败求助:搭建高可用PostgreSQL集群报错
从你提供的错误日志里,最关键的报错信息是:
pg_ctl: cannot be run as root Please log in (using, e.g., "su") as the (unprivileged) user that will own the server process.
结合你的操作和配置,问题主要出在以下几个方面:
1. 启动Patroni时使用了root身份
你执行的启动命令是sudo patroni /etc/patroni.yml,这会直接以root用户运行Patroni,而PostgreSQL明确禁止root用户启动数据库进程。虽然你的patroni.service配置里指定了User=postgres和Group=postgres,但你没有通过systemd启动服务,而是直接用root身份运行了命令。
解决方法:
- 切换到postgres用户后再启动Patroni:
su - postgres patroni /etc/patroni.yml - 或者通过systemd服务启动(推荐,符合生产环境规范):
sudo systemctl start patroni
2. 检查数据目录权限
你的Patroni配置里指定了data_dir: /data/patroni,这个目录必须完全属于postgres用户和组,否则即使切换到postgres用户,也会因为权限不足无法初始化或启动数据库。
解决方法:
执行以下命令修复目录权限:
sudo chown -R postgres:postgres /data/patroni sudo chmod 700 /data/patroni
3. Systemd服务配置的拼写错误
你的patroni.service文件最后一行WantedBy=multi-user.targ存在拼写错误,应该是multi-user.target,这个错误会导致无法通过systemctl enable patroni设置开机自启,建议修正后重新加载systemd配置:
sudo systemctl daemon-reload
额外验证步骤
启动前可以先验证etcd连接是否正常,确保Patroni能正确访问etcd集群:
curl http://privateIPofetcd:2379/health
如果返回{"health": "true"},说明etcd连接正常。
内容的提问来源于stack exchange,提问作者e7lT2P

