Linux怎么安装PostgreSQL 17高可用集群 Patroni自动故障转移详解

浅明大大_6722

浅明大大_6722

2026-04-29

526人浏览

原创

postgresql 17高可用集群用patroni实现自动故障转移,必须部署etcd(或consul/zookeeper)作为强制前置的分布式协调器;三节点etcd为最小安全配置,需先启动并验证healthy,再启patroni,且配置中postgresql.use_pg_rewind、tags.nofailover等关键开关须正确设置。

linux怎么安装postgresql 17高可用集群 patroni自动故障转移详解

直接上结论:PostgreSQL 17 高可用集群用 Patroni 实现自动故障转移,**不能只装 Patroni 和 PostgreSQL**,必须搭好 etcd(或 Consul/ZooKeeper)作为分布式协调器,否则 Patroni 启动后连状态都存不进去,patronictl list 会一直报 DCS is not accessible

etcd 集群必须先跑起来,且节点数得是奇数

Patroni 依赖 etcd 做选主和状态同步,它不是“可选组件”,而是强制前置条件。三节点是最小安全配置,两节点在 etcd 自身故障时会卡死——因为 Raft 要求多数派(quorum),2 节点中只要挂 1 个,剩下 1 个无法达成 2/2 多数,整个集群失能。

  • 所有 etcd 节点都要开 listen-client-urlsadvertise-client-urls,地址必须是其他 Patroni 节点能直连的 IP,别写 127.0.0.1
  • initial-cluster 字符串里每个节点名必须和对应节点的 ETCD_NAME 完全一致,大小写、下划线都不能错
  • 启动顺序:先启所有 etcd 节点,再用 etcdctl endpoint health 确认全部 healthy,最后才起 Patroni
  • 常见错误现象:patronictl -c patroni.yml list 显示空列表或报 Connection refused,大概率是 Patroni 的 etcd.hosts 指向了未监听的端口,或防火墙拦了 2379

Patroni 配置里最关键的三个布尔开关

很多故障转移失败,不是因为 etcd 没通,而是这几个布尔值设错了。它们控制 Patroni 是否敢升主、是否敢重放 WAL、是否允许你手动切:

Linux Desktop Control
Linux Desktop Control

Linux 桌面自动化与控制。适用于以下场景:(1)截取屏幕或窗口的截图,(2)控制鼠标和键盘,(3)管理窗口,(4……

下载
  • postgresql.use_pg_rewind: true —— 必开。主库异常下线后,如果 WAL 位置落后太多,备库升主前必须用 pg_rewind 回退数据目录,否则会脑裂。关了它,Patroni 在检测到复制延迟大时直接拒绝升主
  • tags.nofailover: false —— 必须为 false。设成 true 就等于给这个节点贴了“禁止升主”标签,哪怕它是唯一存活节点也不会被选
  • bootstrap.dcs.ttl: 30bootstrap.dcs.retry_timeout: 10 —— 这俩要满足 retry_timeout * 2 ,否则 Patroni 会因心跳超时频繁失联,误判为故障

PostgreSQL 17 的 pg_hba.conf 和 recovery.signal 要彻底删干净

Patroni 启动时会自己生成 recovery.signal 或删掉它,也会覆盖 pg_hba.conf。如果你手动生成过 standby,残留的文件会导致 Patroni 初始化失败,日志里出现 cluster has no memberscould not open file "recovery.signal"

  • 初始化前,进到 data_dir 目录,手动删掉:recovery.signalstandby.signalpostmaster.pidpg_wal/archive_status/ 下所有文件
  • pg_hba.conf 里别留任何硬编码的 replication 条目,Patroni 会在运行时动态注入,冲突会导致连接拒绝
  • 确保 postgresql.bin_dir 指向的是 PostgreSQL 17 的真实路径,比如 /usr/lib/postgresql/17/bin,而不是 14 或 15 的旧路径——版本错配会导致 pg_ctl promote 失败

验证自动故障转移,别只看 patronictl list

patronictl list 显示新 Leader 是 running,只是表面正常。真正要确认是否生效,得查三件事:

  • 新主库的 pg_is_in_recovery() 返回 false,老主库(恢复后)返回 true,且 WAL 接收进程在跑
  • SELECT * FROM pg_stat_replication; 在新主上查,应看到至少一个 state = 'streaming' 的连接
  • 客户端连 HAProxy/VIP 写入一条带时间戳的数据,停掉当前 Leader,等 30 秒,再查这条数据是否已同步到新主——别只查 select,要测写入链路
  • 最容易被忽略的一点:postgresql.parameters.max_connections 在 Patroni 配置里改了,但 PostgreSQL 进程没 reload,实际生效值还是旧的。每次改完记得 patronictl reload 或重启 Patroni

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、\l、\c、\dt、\d table_name、\du、\i file_name、\e和\q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.10

193

5

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

3969

19

postgresql常用命令有哪些
postgresql常用命令有哪些

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、\l、\c、\dt、\d table_name、\du、\i file_name、\e和\q等。更详细的postgresql常用命令,大家可以访问下面的文章。

2023.11.16

607

3

postgresql常用命令介绍
postgresql常用命令介绍

postgresql常用命令有\l、\d、\d5、\di、\ds、\dv、\df、\dn、\db、\dg、\dp、\c、\pset、show search_path、ALTER TABLE、INSERT INTO、UPDATE、DELETE FROM、SELECT等。想了解更多postgresql的相关内容,可以阅读本专题下面的文章。

2023.11.20

1316

6

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

2026.02.12

420

19

PostgreSQL 性能优化与查询执行计划实战
PostgreSQL 性能优化与查询执行计划实战

本专题深入解析PostgreSQL性能优化核心,聚焦查询执行计划的实战应用。通过EXPLAIN命令精准定位瓶颈,结合索引策略、SQL改写与参数调优,系统提升查询效率。从执行计划解读到性能调优全流程,助你掌握数据库性能诊断与优化实战能力。

2026.05.08

130

10

PostgreSQL 在 Next.js / Go 全栈架构中的工程化实践
PostgreSQL 在 Next.js / Go 全栈架构中的工程化实践

本文详解如何利用Next.js(搭配Drizzle ORM)与Go后端构建高性能应用,充分发挥PG在JSONB非结构化存储与pgvector向量检索上的优势。从数据建模到Docker容器化部署,打造支持AI时代的“One Database”工程化解决方案。

2026.05.08

861

10

PostgreSQL高级特性、内核机制与现代数据架构
PostgreSQL高级特性、内核机制与现代数据架构

本专题从MVCC并发控制与WAL日志等内核机制出发,详解JSONB、PostGIS及pgvector等高级特性。探讨如何利用单一引擎支撑关系型、向量及图数据等现代数据架构需求,助您掌握构建高并发、智能化应用的核心技术。

2026.05.08

204

10

磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

3550

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习

CLion 远程开发实战
CLion 远程开发实战

共0课时 | 0人学习