Patroni动态配置详解:高可用PostgreSQL集群管理指南
动态配置概述
Patroni作为PostgreSQL高可用解决方案,其核心特性之一就是支持动态配置管理。动态配置存储在分布式配置存储(DCS)中,能够实时应用到集群的所有节点上。这种设计使得管理员无需重启服务即可调整集群行为,大大提高了运维效率。
配置修改方式
Patroni提供了两种主要的动态配置修改方式:
- 通过patronictl命令行工具的edit-config子命令
- 通过Patroni提供的REST API接口
这两种方式都能安全地更新集群配置,确保配置变更被正确同步到所有节点。
核心配置参数详解
基础时间参数
- loop_wait:主循环休眠时间(秒),默认10秒,最小值1秒
- ttl:领导者锁的TTL值(秒),决定自动故障转移的触发时间,默认30秒,最小值20秒
- retry_timeout:DCS和PostgreSQL操作重试超时(秒),默认10秒,最小值3秒
重要规则:这三个参数必须满足以下关系式:
loop_wait + 2 * retry_timeout <= ttl
复制相关参数
- maximum_lag_on_failover:参与领导者选举的从节点最大允许延迟(字节)
- maximum_lag_on_syncnode:同步从节点被视为不健康前的最大延迟(字节)
- max_timelines_history:DCS中保留的时间线历史项最大数量,0表示保留全部历史
故障转移参数
- primary_start_timeout:主节点故障恢复等待时间(秒),默认300秒
- primary_stop_timeout:停止PostgreSQL时的等待时间(秒),仅同步模式有效
同步复制配置
- synchronous_mode:同步复制模式,可选值:off/on/quorum
- synchronous_mode_strict:严格同步模式,无可用同步副本时阻塞写入
- synchronous_node_count:同步副本数量,默认1
PostgreSQL特定配置
基础设置
- use_pg_rewind:是否使用pg_rewind工具,默认false
- use_slots:是否使用复制槽,PostgreSQL 9.4+默认true
认证配置
- pg_hba:生成pg_hba.conf的内容
- pg_ident:生成pg_ident.conf的内容
示例配置:
pg_hba:
- host all all 0.0.0.0/0 md5
- host replication replicator 127.0.0.1/32 md5
备用集群配置
通过standby_cluster节可以配置备用集群:
- host:远程主节点地址
- port:远程主节点端口
- primary_slot_name:远程节点使用的复制槽名称
- create_replica_methods:从远程主节点引导备用集群的方法列表
复制槽管理
成员槽TTL
- member_slots_ttl:副本关闭时物理复制槽的保留时间,默认30分钟
永久复制槽
通过slots节可以定义永久复制槽:
slots:
my_slot_name:
type: logical
database: my_db
plugin: test_decoding
支持两种类型:
- physical:物理复制槽
- logical:逻辑复制槽(需指定database和plugin)
忽略特定复制槽
通过ignore_slots可以配置Patroni忽略管理的复制槽:
ignore_slots:
- name: ignored_slot
type: logical
database: my_db
最佳实践与注意事项
-
时间参数调整:调整loop_wait、ttl等参数时,务必遵守时间关系公式,否则可能导致集群不稳定
-
同步复制:
- 启用同步复制可确保事务不丢失,但会降低写入可用性
- 合理设置synchronous_node_count以避免过度影响性能
-
复制槽管理:
- PostgreSQL 11+支持在所有节点维护物理复制槽
- 逻辑复制槽仅适用于PostgreSQL 11+
- 永久复制槽应仅在主节点使用,从节点使用可能导致WAL无限增长
-
故障转移时间:
- 主节点故障的最坏情况转移时间为:loop_wait + primary_start_timeout + loop_wait
- 根据业务对可用性和持久性的需求平衡设置这些参数
通过合理配置这些动态参数,可以优化Patroni集群的性能、可靠性和可用性,满足不同业务场景的需求。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



