Patroni配置的max_connections未在PostgreSQL中生效的排查求助
以下是针对该问题的常见排查方向:
Patroni配置未同步到etcd集群
Patroni的核心配置存储在etcd中,本地/etc/patroni.yml通常仅用于节点初始化。直接修改本地配置文件不会自动同步到etcd,所有节点仍会使用旧配置。可以通过etcdctl工具检查etcd中的实际配置:etcdctl get /service/[你的集群名称]/config如果etcd中
max_connections仍为100,需用patronictl工具修改集群配置:patronictl edit-config [你的集群名称]在编辑界面找到
postgresql.parameters下的max_connections,改为3000后保存,Patroni会自动将配置同步到所有节点。max_connections需重启PostgreSQL才能生效
该参数属于PostgreSQL的重启生效参数,仅执行pg_reload_conf()无法让新值生效。且Patroni管理的节点不能直接手动重启,必须通过patronictl操作:# 重启单个节点 patronictl restart [集群名称] [节点名称] # 主节点建议先切换到从节点再重启 patronictl switchover [集群名称]修改etcd配置后,Patroni通常会自动触发节点重启,但配置同步失败时不会执行。
Patroni配置文件格式错误
检查/etc/patroni.yml的配置层级是否正确,max_connections必须嵌套在postgresql.parameters下,正确格式如下:postgresql: parameters: max_connections: 3000若层级错误(如直接将参数写在根节点),Patroni会忽略该配置,继续使用默认值。
本地PostgreSQL配置被Patroni覆盖
手动执行ALTER SYSTEM SET max_connections = 125;会修改postgresql.auto.conf,但Patroni生成的postgresql.conf优先级更高,会覆盖该文件的设置。若Patroni未同步新配置,生成的postgresql.conf仍会使用旧值。HAProxy路由指向未更新的节点
若通过HAProxy连接PostgreSQL,可能HAProxy健康检查未切换到配置更新后的节点,导致查询到旧节点的参数值。可直接连接每个节点的PostgreSQL端口(绕过HAProxy),分别执行SHOW max_connections;,确认各节点参数状态,排查是配置同步问题还是路由问题。
内容的提问来源于stack exchange,提问作者Mohit Agrawal

