如何降低PostgreSQL集群的max_connections参数值?
报错根本原因
hot standby is not possible because max_connections = 100 is a lower setting than on the master server (its value was 300)
PostgreSQL热备架构要求副本节点的max_connections参数值必须大于等于主节点生成当前回放WAL日志时的max_connections值。你先重启了主节点完成参数下调,此时副本节点待回放的WAL日志里仍包含主节点max_connections=300时期生成的内容,因此副本的100不符合要求,启动失败。
其他可行解决方案
调整参数变更的操作顺序(推荐方案)
下调max_connections这类热备强校验参数时,需要遵循「先副后主,再更新副本」的步骤:- 先将所有副本节点的
max_connections调整为大于当前主节点值的配置(比如350),依次重启所有副本 - 修改主节点
max_connections为100,重启主节点 - 再将所有副本节点的
max_connections调整为100,依次重启副本即可
全程副本的max_connections始终大于等于对应阶段主节点的参数值,不会触发校验错误。
- 先将所有副本节点的
等待旧WAL回放完成后再开启热备
如果你已经完成主节点重启,不想回滚主节点配置,可以按以下步骤操作:- 先设置副本
hot_standby=off启动,此时副本仅做WAL回放,不提供读服务,不会触发max_connections校验 - 等待副本完全追上主节点的WAL同步位置(可通过
pg_stat_replication视图查看同步状态),此时副本回放的所有WAL均为主节点max_connections=100之后生成的内容 - 重新修改副本配置将
hot_standby改回on,重启副本即可正常启动热备。
- 先设置副本
重新生成副本的基础备份
若副本数据量不大、重新备份成本低,可直接在主节点参数调整完成并正常运行后,为所有副本重新做一次基础备份,使用新备份启动的副本天然适配主节点当前的max_connections配置,不会触发校验报错。
补充注意
除max_connections外,max_prepared_transactions、max_locks_per_transaction、max_worker_processes这几个参数也遵循相同的热备校验规则,调整时需要遵守同样的操作顺序。
内容的提问来源于stack exchange,提问作者Emon46
相关产品推荐
相关产品推荐

