SQL Academy · 课时

故障切换与主节点选举(Patroni、Stolon)

使用 Patroni 或 Stolon 自动执行故障切换,并配置法定人数以避免脑裂

第 3 / 4 课15 个步骤

故障切换与主节点选举(Patroni、Stolon) 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

为什么要自动故障转移

手动故障转移速度慢且容易出错。工具可以检测主库故障,并在无需人工干预的情况下提升副本。

故障转移步骤

需要完成以下操作:

  1. 检测主库是否宕机(健康检查、共识机制)
  2. 选择拥有最新 WAL 的副本
  3. 提升该副本(pg_promote / pg_ctl promote)
  4. 重新配置其他副本,使其跟随新的主库
  5. 更新应用的连接路由

脑裂风险

如果网络发生分区,您可能会在旧主库仍然存活时提升一个副本。两个主库会导致写入冲突,进而造成数据损坏。请使用仲裁机制来避免这种情况。

Patroni

这是一个基于 Python 的守护进程,它使用外部 DCS(分布式配置存储)——通常是 etcd、Consul 或 Zookeeper——来进行领导者选举:

# patroni.yml
name: pg1
scope: my_cluster
etcd:
  hosts: 10.0.0.10:2379,10.0.0.11:2379,10.0.0.12:2379
postgresql:
  data_dir: /var/lib/postgresql/data

Patroni 如何选择新领导者

每个节点上的 Patroni 守护进程都会竞争获取 etcd 中的领导者锁。只有一个进程可以持有该锁,该节点便成为主库,其他节点跟随它。

Stolon

这是一个基于 Go 的替代方案。它使用类似的共识模型,但具有不同的运维特性。它将职责划分给 sentinel、keeper 和 proxy 组件。

repmgr

这是由 2ndQuadrant 提供的轻量级工具——自动化程度较低,但手动控制更多。适合规模较小的部署。

云托管故障转移

RDS、Cloud SQL 和 Aurora 会为您处理故障转移。您需要用灵活性换取运维简便性。

故障转移后的连接路由

应用需要知道新的主库。可选方案包括:

  • 更新 DNS(由于 TTL,速度较慢)
  • 使用故障转移工具管理的浮动 IP
  • 代理层:HAProxy、带脚本的 pgbouncer、AWS RDS 端点

同步复制与故障转移

同步备用库可以保证不会丢失数据。将其与自动故障转移结合,可实现最强的 HA。

仲裁

对于同步复制,请使用仲裁配置 synchronous_standby_names:3 个副本中任意 2 个必须确认。这样即使一个副本速度较慢或发生故障,也不会阻塞提交。

synchronous_standby_names = 'ANY 2 (replica1, replica2, replica3)'

读己之写

故障转移后或存在复制延迟时,应用可能将数据写入新的主库,却立即从副本读取到过时数据。您可以将写入后的读取路由到主库,或使用 pg_last_wal_replay_lsn 进行跟踪。

测试故障转移

请在真正需要之前进行测试。每月在预发布环境中停止主库,演练操作手册。真实故障转移的压力已经够大,意外情况只会让问题更加严重。

回顾

自动故障转移可以将人工操作从关键路径中移除。

  • 自建环境使用 Patroni / Stolon
  • 托管环境使用 RDS / Cloud SQL
  • 警惕脑裂——使用仲裁机制
  • 定期演练故障转移

快速检查

在 PostgreSQL 复制的语境中,“脑裂”指什么?

免费开始

用 AI 导师学习 SQL — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
46
课程
183

常见问题解答

「故障切换与主节点选举(Patroni、Stolon)」课时是免费的吗?

是的 — 「故障切换与主节点选举(Patroni、Stolon)」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。

「故障切换与主节点选举(Patroni、Stolon)」这节课中我会学到什么?

使用 Patroni 或 Stolon 自动执行故障切换,并配置法定人数以避免脑裂 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 SQL Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「故障切换与主节点选举(Patroni、Stolon)」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 SQL Academy 课中编写并运行代码吗?

能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 流复制与 WAL
  2. 用于分片的逻辑复制
  3. 故障切换与主节点选举(Patroni、Stolon)
  4. 只读副本与连接路由
← 返回 SQL Academy