Chef Server突发sqerl池启动失败问题求助
嘿,你的Chef Server突然罢工确实头疼!从你贴的错误日志和chef-server-ctl status输出来看,核心问题是Chef的核心组件(尤其是opscode-pushy-server)无法正常建立PostgreSQL数据库连接——日志里的econnrefused和PostgreSQL错误码<<"57P03">>是关键线索:57P03对应的是PostgreSQL的「数据库正在启动中」或者「进入维护模式」,虽然status显示PostgreSQL网络连通正常,但这个检测只是基础的端口可达性,实际数据库可能没法处理连接请求。
下面是一步步的排查修复步骤,按顺序来:
1. 先确认PostgreSQL的真实运行状态
别光信chef-server-ctl status的提示,直接登到PostgreSQL所在的服务器(10.0.1.86)做实际检查:
# 查看PostgreSQL进程是否真的在正常运行 ps aux | grep postgres # 翻PostgreSQL日志找异常(Omnibus安装的Chef,日志路径一般是这个) tail -n 50 /var/opt/opscode/postgresql/9.6/log/postgresql.log
重点找有没有database is in recovery、max_connections exceeded或者maintenance mode这类关键词,这些都是导致连接被拒的常见原因。
2. 检查PostgreSQL的连接数是否耗尽
如果数据库的连接数被占满,新的连接请求也会被拒绝。登录PostgreSQL执行:
-- 统计当前活跃连接数 SELECT count(*) FROM pg_stat_activity; -- 查看配置的最大连接数上限 SHOW max_connections;
如果当前连接数接近或达到上限,需要修改postgresql.conf里的max_connections参数(比如调到200),然后重启PostgreSQL服务:
# Omnibus安装的Chef,重启PostgreSQL用这个命令 chef-server-ctl restart postgresql
3. 单独修复opscode-pushy-server的连接问题
日志里报错最多的就是这个组件,先单独重启它试试:
chef-server-ctl restart opscode-pushy-server
重启后再看日志有没有57P03错误。如果还有,手动验证它的数据库配置:
# 查看pushy-server的数据库配置文件 cat /var/opt/opscode/opscode-pushy-server/etc/sqerl.conf
确认里面的主机、端口、用户名、密码都正确,然后手动用这些参数连接数据库测试:
psql -h 10.0.1.86 -U opscode_pushy -d opscode_pushy
如果手动连不上,就得排查PostgreSQL的用户远程连接权限(比如pg_hba.conf里有没有允许Chef Server的IP访问),或者服务器之间的防火墙规则。
4. 按依赖顺序重启所有Chef组件
如果单个组件重启没用,就按「数据库优先」的顺序重启所有依赖数据库的组件:
# 先停掉所有需要数据库的组件 chef-server-ctl stop opscode-erchef opscode-pushy-server oc_bifrost oc_id # 重启PostgreSQL chef-server-ctl restart postgresql # 等30秒让数据库完全启动,别着急起其他组件 sleep 30 # 再启动之前停掉的组件 chef-server-ctl start opscode-erchef opscode-pushy-server oc_bifrost oc_id
最后再检查一遍所有组件状态:
chef-server-ctl status
5. 别忘了检查磁盘空间
如果PostgreSQL所在的磁盘满了,数据库也会进入异常状态,连不上是常事:
df -h /var/opt/opscode/postgresql
如果磁盘使用率超过90%,赶紧清理旧日志、备份文件,或者扩展磁盘空间。
内容的提问来源于stack exchange,提问作者Meet Dave

