资讯动态

PostgreSQL 高可用集群核心配置参数全解:从原生流复制到 Patroni 企业级方案

发布时间:2026/8/21 7:15:16 来源:尧图企业网站定制
明白了您希望第一篇文章的所有内容合并在一起不分段输出。以下是修改后的第一篇文章完整版PostgreSQL 高可用集群核心配置参数全解从原生流复制到 Patroni 企业级方案PostgreSQL常简称 PG/psql的高可用集群核心基础是物理流复制主从架构逻辑和 Redis 主从高度相似主节点负责所有写操作生成 WAL 预写日志相当于每一笔账务流水从节点实时接收并重放 WAL保持和主节点数据一致同时可承接只读查询。原生 PG 仅支持手动故障切换生产级自动高可用通常配合 Patronietcd/consul 实现。下面分两部分逐参数详解每个参数都讲清作用、默认值、配置建议和大白话含义。一、原生 PostgreSQL 流复制核心配置高可用基础所有核心参数都在postgresql.conf中配置PG 12 及以后版本取消了独立的recovery.conf原恢复类参数全部整合进postgresql.conf通过数据目录下的standby.signal空文件标识从节点身份。一主节点核心配置主节点是 WAL 日志的产生方配置决定了复制能力、一致性级别和容灾兜底能力。1. WAL 日志基础配置复制的前提这是开启主从复制的基础门槛参数配错复制根本跑不起来。wal_level作用为设置 WAL 日志的记录级别级别越高日志里的信息越全支持的功能越多。可选值为minimal/replica/logical默认值为replicaPG 10。配置建议为物理流复制高可用必须设为replica如果需要做表级逻辑复制设为logical。大白话理解相当于账本的详细程度。minimal只记最精简的内容没法用来对账复制replica足够支持完整的主从同步logical还额外记录表结构信息支持单表同步。wal_buffers作用为 WAL 日志的内存缓冲区大小写操作先写缓冲区再刷到磁盘。默认值为自动计算通常为shared_buffers的 1/32最小 32KB。配置建议为高并发写场景建议设为 16MB~64MB减少磁盘 IO。大白话理解相当于总监手边的临时便签本写的账先记在便签上攒一批再抄到正式账本里。full_page_writes作用为开启后每次检查点后第一次修改页面时会把整个数据页写入 WAL防止数据库崩溃时出现 “部分写” 导致数据损坏。默认值为on。配置建议为高可用场景必须保持开启是数据可靠性的基础保障。2. 复制发送能力配置控制主节点能支持多少个从节点、保留多久的日志、超时判定规则。max_wal_senders作用为主节点最多同时运行的 WAL 发送进程数也就是最多支持多少个并发的从节点 / 备份客户端。默认值为10。配置建议为至少设置为「从节点数量 预留备份用数量」比如一主两从建议设为 5留有余量。大白话理解相当于总监手下有多少个专门负责给助理传流水的通讯员每个助理对应一个通讯员。max_replication_slots作用为最大复制槽数量。复制槽是 PG 的核心机制它会记录从节点当前同步到的位置保证主节点不会删掉从节点还没收到的 WAL 日志。默认值为10。配置建议为至少等于从节点数量建议比实际从节点数多 2~3 个预留。大白话理解相当于给每个助理单独开一个 “流水专属账户”总监绝对不会扔掉助理还没收到的流水单哪怕助理请假好几天。比固定保留日志量更精准是高可用强烈推荐开启的机制。wal_keep_size作用为主节点在 pg_wal 目录中保留的 WAL 日志总大小用于应对从节点短暂断连后补数据。默认值为0不额外保留仅满足检查点需求。配置建议为普通场景设为 1GB~4GB网络不稳定、从节点经常短暂断连的场景可以设到 8GB。版本说明PG 13 之前对应参数是wal_keep_segments按段计数每段默认 16MB。大白话理解总监手头保底保留最近的一堆流水单助理短时间离开回来还能补上。但如果离开太久流水单超出保留量就只能重新复印整本账本全量备份重建。max_slot_wal_keep_size作用为单个复制槽最多允许占用的 WAL 空间防止从节点长期下线导致主节点 WAL 日志堆积爆盘。默认值为-1不限制。配置建议为生产环境建议设为 8GB~16GB超过阈值后复制槽会失效避免磁盘占满。大白话理解给每个助理的 “专属账户” 设上限助理请假太久不领流水就不再无限期保留防止把仓库堆满。wal_sender_timeout作用为主节点多久没收到从节点的心跳反馈就断开连接释放资源。默认值为60s。配置建议为网络差的环境可以适当调大避免频繁断连重连。3. 数据一致性与同步模式配置这是高可用的核心参数直接决定了 “主节点宕机会不会丢数据” 和 “写入性能” 的权衡。synchronous_commit作用为事务提交时需要等待到哪个阶段才给客户端返回成功决定了复制是异步还是同步。可选值按可靠性从低到高、性能从高到低分别为off不等 WAL 刷盘就返回性能最高宕机可能丢数据不建议生产用、local只等主节点本地 WAL 刷盘就返回默认值异步复制标准配置、remote_write等主节点本地刷盘 从节点收到 WAL 并写入操作系统缓存就返回、on等主节点本地刷盘 从节点 WAL 刷盘完成才返回标准同步复制级别、remote_apply等主节点本地刷盘 从节点 WAL 重放完成、数据可查才返回一致性最高延迟最大。配置建议为普通业务优先用默认local异步复制性能最好极端情况丢极少量数据金融、支付等零数据丢失场景设为on或remote_apply配合同步从节点使用。大白话理解相当于总监给客户回执的时机——异步模式总监自己记完账就说 “办妥了”助理那边慢慢同步同步模式必须等助理也把账记到自己本子上总监才说 “办妥了”绝对不会丢账但慢一点。synchronous_standby_names作用为指定哪些从节点作为同步从节点和synchronous_commit配合实现同步复制。语法示例为FIRST 1 (standby1, standby2)表示选列表里第一个健康的从节点当同步节点。默认值为空全部为异步从节点。配置建议为同步复制场景下至少指定 1 个同步从节点其余为异步从节点兼顾可靠性和性能。4. 归档兜底配置容灾必备流复制是实时同步归档是离线兜底用于极端故障下的时间点恢复。archive_mode作用为开启 WAL 归档模式将写满的 WAL 段文件复制到归档目录。默认值为off。配置建议为高可用集群必须开启作为流复制之外的第二重数据保障。archive_command作用为具体的归档命令PG 会自动把 WAL 文件通过该命令复制到指定位置。示例为archive_command cp %p /data/pg_archive/%f。配置建议为归档目录建议放在独立磁盘或对象存储上不要和数据目录同盘。5. 基础网络与权限配置listen_addresses作用为指定 PG 监听的 IP 地址默认只监听本地从节点无法连接。配置建议为高可用场景设为*或指定业务网段 IP同时配合防火墙控制访问。pg_hba.conf复制权限作用为控制哪些 IP 可以用复制用户连接主节点是很多新手容易遗漏的配置。必须添加的条目为host replication replicator 192.168.1.101/32 md5其中replicator是专门创建的复制用户需要授予REPLICATION权限。二从节点核心配置从节点的核心职责是连接主节点、接收并重放 WAL、对外提供只读服务。1. 身份标识PG 12在从节点的数据目录下创建一个空文件standby.signalPG 启动时检测到这个文件就会以从节点备用模式运行。当从节点被提升为主节点时该文件会自动删除。注PG 11 及更早版本通过recovery.conf文件中的standby_mode on标识新版本已废弃。2. 主库连接配置primary_conninfo作用为从节点连接主节点的连接字符串包含主库地址、端口、复制用户名、密码等信息。示例为primary_conninfo host192.168.1.100 port5432 userreplicator passwordxxx application_namestandby1。大白话理解告诉助理 “总监的办公室在哪、进门密码是什么、你叫什么名字”。primary_slot_name作用为指定从节点使用的复制槽名称需要和主节点上创建的复制槽对应。配置建议为开启复制槽的高可用集群必须配置避免主节点误删 WAL 导致同步中断。3. 热备只读配置hot_standby作用为开启后从节点在恢复过程中也能对外提供只读查询服务是读写分离的基础。默认值为off。配置建议为高可用集群必须开启让从节点承接读流量提升整体性能。大白话理解相当于助理一边同步记账一边还能给大家查账不用等全部同步完才干活。4. 复制冲突与超时配置max_standby_streaming_delay作用为当从节点上的查询和 WAL 重放发生冲突时比如查询正在读某行主节点删了这行最多等待多久再取消查询。默认值为30s。配置建议为从节点查询多、长 SQL 多的场景可以调大比如 300s减少查询被中断的概率但会增加同步延迟。大白话理解助理正在帮人查账这时总监发来了新的修改命令。可以等查询完再改但不能无限等超时了就先打断查询优先同步新数据。wal_receiver_timeout作用为从节点多久没收到主节点的 WAL 数据就判定主节点失联尝试重连。默认值为60s。配置建议为和主节点的wal_sender_timeout匹配即可。5. 故障切换与特殊场景配置recovery_target_timeline作用为指定恢复的时间线故障切换后新主节点会生成新的时间线。默认值为latest。配置建议为保持默认latest确保从节点能自动跟随故障转移后的新主节点。promote_trigger_file作用为指定一个触发文件当从节点检测到该文件被创建时自动提升为主节点用于手动故障切换。示例为promote_trigger_file /data/pgdata/trigger_failover。大白话理解给助理留一个 “升职暗号”看到这个文件就自动升级成新总监。recovery_min_apply_delay作用为设置从节点延迟重放 WAL 的时间比如延迟 1 小时。默认值为0无延迟。配置建议为用于防误操作场景比如主库误删表延迟从节点还没同步可以快速恢复数据。属于特殊高可用兜底配置。6. 归档恢复配置restore_command作用为从节点从归档目录拉取 WAL 文件的命令当流复制跟不上时会先从归档补数据。示例为restore_command cp /data/pg_archive/%f %p。配置建议为开启归档的集群建议配置作为流复制的补充减少全量重建的概率。二、生产级自动高可用Patroni 核心配置参数原生 PG 主从只能手动切换主节点故障时写服务会中断不算真正的高可用。企业级方案 90% 以上采用Patroni etcd/consul​ 架构etcd 负责分布式选主Patroni 负责监控 PG 状态、自动故障检测、秒级主从切换。Patroni 配置文件为 YAML 格式核心参数如下1. 集群基础标识name: pg-node1表示当前节点名称集群内唯一scope: pg-ha-cluster表示集群名称同一个集群所有节点必须一致namespace: /service/表示在etcd中的存储路径前缀。2. 分布式协调DCS配置以 etcd 为例用于节点间状态同步和领导者选举。配置示例为etcd: hosts: [192.168.1.10:2379, 192.168.1.11:2379, 192.168.1.12:2379]。生产环境 etcd 必须至少 3 节点保证半数以上存活即可选主。3. 故障检测与切换时效RTO 核心参数这三个参数直接决定了主节点宕机后多久触发自动切换。loop_wait为 Patroni 主循环检测间隔默认 10 秒每 10 秒检查一次 PG 健康状态。ttl为主节点在 etcd 中锁的有效期默认 30 秒主节点超时未续租就会被判定失效触发重新选主。retry_timeout为操作 etcd 和 PG 的重试超时默认 10 秒。必须满足的公式为loop_wait 2 * retry_timeout ttl否则会出现误判和频繁切换。primary_start_timeout为主节点故障后等待多久确认无法恢复再触发切换默认 300 秒设为 0 则检测到故障立即切换RTO 最低但可能误切换。大白话理解相当于考勤制度每隔 10 分钟查一次岗loop_wait总监 30 分钟没签到ttl就默认缺席立刻选新总监。4. 主从选举规则RPO 核心参数maximum_lag_on_failover单位为字节参与主节点选举的从节点最大允许的同步延迟超过这个值的从节点不能被选为新主防止切换后丢太多数据。配置建议为异步复制场景建议设为 1MB~10MB平衡切换成功率和数据丢失量。5. 同步复制模式synchronous_mode为是否开启同步复制模式可选off/on/quorum开启后 Patroni 会自动管理synchronous_standby_names保证同步节点数量。synchronous_mode_strict为严格同步模式没有可用同步从节点时阻塞主节点所有写入保证零数据丢失。synchronous_node_count为同步从节点的数量默认 1 个。6. PostgreSQL 实例管理配置示例为postgresql: listen: 0.0.0.0:5432; connect_address: 192.168.1.100:5432; data_dir: /data/pgdata; pg_ctl: /usr/pgsql-15/bin/pg_ctl; authentication: replication: {username: replicator, password: xxx}; superuser: {username: postgres, password: xxx}。Patroni 会自动管理 PG 的核心参数、复制槽和主从关系无需手动配置。三、高可用配置最佳实践异步复制优先按需用同步绝大多数业务异步复制足够性能好、运维简单只有强一致性要求的核心业务才开同步复制。复制槽必开配合上限保护复制槽能大幅减少同步中断概率但一定要设置max_slot_wal_keep_size防止从节点离线打爆主节点磁盘。归档是最后一道防线无论主从做的多完善WAL 归档一定要开配合定期全量备份应对删库、数据损坏等极端场景。故障切换时效按需调整核心业务可以调小ttl和loop_wait加快切换但要注意网络波动可能导致误切换非核心业务可以调大提升稳定性。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价