分离故障域
通过反亲和性将实例分散到不同工作节点,并在支持的情况下跨可用区部署。为恢复预留容量。
RUK-COM / 托管数据库集群
面向关键企业系统的数据库集群。根据需求设计复制、故障转移及恢复,并由 Ruk-Com 专家从架构设计支持到实际恢复。
重点方案 / CLOUDNATIVEPG
通过 CloudNativePG 在 Kubernetes 上运行 PostgreSQL
KUBERNETES + CLOUDNATIVEPG
这是我们为希望通过 Kubernetes API 管理 PostgreSQL 的团队推荐的方式。CloudNativePG 负责集群生命周期、流复制及故障转移,同时保持 PostgreSQL 数据路径清晰。
Kubernetes 上的 PostgreSQL,具有独立的写入/读取服务及 WAL 复制。Operator 管理生命周期及故障转移;可选的 PgBouncer 提供连接池,而专用 PVC、备份及 PITR 分别承担不同职责。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
写入操作通过 PgBouncer → cluster-rw → 主节点。副本读取结果通过 cluster-ro 返回。主节点直接将 WAL 日志流式传输到副本节点,每个 Pod 都有独立的 PVC。
可选的 PgBouncer 位于 cluster-rw 之前。cluster-ro 选择副本;图中未绘出的 cluster-r 允许从所有实例读取。Operator/API 构成控制平面,并非 SQL 路径。PITR 会创建独立的新集群,而不是执行故障转移。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。为便于阅读,Barman 作为逻辑阶段单独显示;在本例中,它作为 sidecar 运行于被选作备份源的当前主 Pod 内,而不是独立的备份服务器。
来源文档 ↗
客户端通过以下端点写入: cluster-rw 通过以下端点读取副本: cluster-ro. cluster-r 从所有就绪实例读取。请根据数据实时性需求选择端点;需要连接池时可添加 PgBouncer。
使用 Barman Cloud 插件,将基础备份及 WAL 归档保存到对象存储。执行 PITR 恢复到新集群,并在切换客户端前验证数据。
连接 Ruk-Com 对象存储 →生产环境检查清单
通过反亲和性将实例分散到不同工作节点,并在支持的情况下跨可用区部署。为恢复预留容量。
验证 IOPS、延迟、WAL 预留空间及 CSI 扩容支持。每个实例维护自己的数据卷。
异步复制更灵活。同步复制及故障转移法定人数机制涉及延迟与可用性之间的取舍。
遵循最小权限原则,将密钥及证书管理与数据库备份分开。
通过指标和日志跟踪复制延迟、保留的 WAL、归档及备份,并配备可执行的告警和运维手册。
测试主备切换、恢复及重连。设置资源请求和 PDB;PDB 无法防止硬件故障。
PITR 需要可用的基础备份、连续至目标时间点的 WAL,以及可访问的凭据和密钥。同步策略并不意味着在所有情况下都能保证零数据丢失。
选择数据库
选择引擎和模式,模拟故障、角色切换及重新加入,并区分客户端、复制和恢复路径。
客户端通过两个 ProxySQL 节点发送 SQL。两个主节点均接受写入并交换二进制日志,额外的从节点提供读取。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
现有两个主节点均提供写入;ProxySQL 路由读写请求,同时通过二进制日志进行复制。
默认有两个 ProxySQL 节点。虚线表示的额外节点在此扩展示例中已启用;图示数量并非部署的最低要求。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。读取路径仅作代表性展示,两个代理共享同一组按角色划分的后端池。
来源文档 ↗SQL 经过两个 ProxySQL 节点。一个主节点处理写入,从节点可处理读取。ProxySQL 健康路由不会自动提升主节点。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
一个主节点负责写入操作,并异步将二进制日志复制到从节点。ProxySQL 负责分发读取流量。
默认有两个 ProxySQL 节点。虚线表示的额外节点在此扩展示例中已启用;图示数量并非部署的最低要求。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。读取路径仅作代表性展示,两个代理共享同一组按角色划分的后端池。
来源文档 ↗客户端通过两个 ProxySQL 节点发送 SQL。两个主节点均接受写入并交换二进制日志,额外的从节点提供读取。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
现有两个主节点均提供写入;ProxySQL 路由读写请求,同时通过二进制日志进行复制。
默认有两个 ProxySQL 节点。虚线表示的额外节点在此扩展示例中已启用;图示数量并非部署的最低要求。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。读取路径仅作代表性展示,两个代理共享同一组按角色划分的后端池。
来源文档 ↗SQL 经过两个 ProxySQL 节点。一个主节点处理写入,从节点可处理读取。ProxySQL 健康路由不会自动提升主节点。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
一个主节点负责写入操作,并异步将二进制日志复制到从节点。ProxySQL 负责分发读取流量。
默认有两个 ProxySQL 节点。虚线表示的额外节点在此扩展示例中已启用;图示数量并非部署的最低要求。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。读取路径仅作代表性展示,两个代理共享同一组按角色划分的后端池。
来源文档 ↗客户端使用两个 ProxySQL 节点连接可写数据库节点。写入集认证在保留多数节点的组件中协调变更。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
所有四个示例节点均参与,包括可选的额外节点。写入集在可写节点之间复制。
默认有两个 ProxySQL 节点。虚线表示的额外节点在此扩展示例中已启用;图示数量并非部署的最低要求。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。读取路径仅作代表性展示,两个代理共享同一组按角色划分的后端池。复制路径表示组内写集交换,而非链式复制。
来源文档 ↗客户端通过两个 ProxySQL 节点发送 SQL。两个主节点均接受写入并交换二进制日志,额外的从节点提供读取。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
现有两个主节点均提供写入;ProxySQL 路由读写请求,同时通过二进制日志进行复制。
默认有两个 ProxySQL 节点。虚线表示的额外节点在此扩展示例中已启用;图示数量并非部署的最低要求。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。读取路径仅作代表性展示,两个代理共享同一组按角色划分的后端池。
来源文档 ↗SQL 经过两个 ProxySQL 节点。一个主节点处理写入,从节点可处理读取。ProxySQL 健康路由不会自动提升主节点。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
一个主节点负责写入操作,并异步将二进制日志复制到从节点。ProxySQL 负责分发读取流量。
默认有两个 ProxySQL 节点。虚线表示的额外节点在此扩展示例中已启用;图示数量并非部署的最低要求。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。读取路径仅作代表性展示,两个代理共享同一组按角色划分的后端池。
来源文档 ↗客户端使用两个 ProxySQL 节点连接可写数据库节点。写入集认证在保留多数节点的组件中协调变更。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
所有四个示例节点均参与,包括可选的额外节点。写入集在可写节点之间复制。
默认有两个 ProxySQL 节点。虚线表示的额外节点在此扩展示例中已启用;图示数量并非部署的最低要求。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。读取路径仅作代表性展示,两个代理共享同一组按角色划分的后端池。复制路径表示组内写集交换,而非链式复制。
来源文档 ↗客户端直接连接 PostgreSQL:写入使用主节点,已配置的读取连接使用从节点。没有代理或自动故障转移管理器。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
主节点异步向从节点流式传输 WAL。查询遵循节点角色;虚线成员表示已启用的扩展示例。
一个主节点、一个从节点,以及一个可选的额外从节点。本例已启用虚线扩展节点。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。
来源文档 ↗客户端使用活跃的 Pgpool-II,并通过 Watchdog 与备用代理协调。写入到达主节点,从节点提供读取。Pgpool-II 监控数据库健康状况并管理故障转移。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
主节点异步向从节点流式传输 WAL。查询遵循节点角色;虚线成员表示已启用的扩展示例。
一个活跃的 Pgpool-II 节点、两个可选备用节点,以及图示的三个数据库成员。WAL 复制为异步复制;此架构不是 Patroni。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。
来源文档 ↗HAProxy 将主节点写入端点与副本读取端点分离,并可选择为每个节点配置 PgBouncer 连接池。Patroni 通过 etcd 法定人数机制协调角色;PostgreSQL 直接在数据库节点之间流式传输 WAL。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
写入根据领导者锁路由至节点 2,副本提供读取结果。PgBouncer 提供连接池,WAL 则直接从主节点流向副本。
三个 PostgreSQL 节点及一个可选的横向扩展副本,配有三个 etcd 成员。PgBouncer 和 VIP 均为可选项。HAProxy 检查 Patroni 角色;etcd 不传输 SQL 或 WAL。此架构与 CloudNativePG 不同。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。
来源文档 ↗驱动程序发现副本集成员,并将写操作发送到主节点。读操作默认使用主节点,或根据读偏好使用次节点。无需单独的代理组件。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
主节点将写入记录到 oplog,从节点异步复制。驱动根据角色及读取偏好选择目标。
三个存储数据的成员。选举需要多数投票;选举时间不构成 SLA,从节点读取也可能存在延迟。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。
来源文档 ↗集群感知客户端直接将命令发送到拥有每个哈希槽的主节点。每个主节点对应一个副本。该拓扑结构不使用代理或 Sentinel。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
三个分片将哈希槽进行划分。每个主节点负责其槽位,并异步复制到配对的副本。
三个主节点和三个副本,共六个节点。扩容通过增加成对节点并重新分片完成;异步复制可能在故障转移时丢失部分写入。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。
来源文档 ↗SDK 使用 vBucket 映射直接路由。节点持有活跃和副本 vBucket。扩容通过重新平衡分配数据,不存在独立的查询代理。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
SDK 根据 vBucket 映射路由,副本分区位于其他成员上。箭头表示分区放置,并不意味着每个节点均保存完整数据库副本。
参考图使用两个实线节点和两个虚线节点表示扩展,并非两节点部署基线。套餐默认三个节点,本例启用全部四个节点。请适当配置副本及故障转移。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。
来源文档 ↗Beats 通过 Logstash 将数据发送至 OpenSearch,Dashboards 对其查询并可视化。本例将 OpenSearch 扩展为三个节点,以说明分片恢复,并非套餐的最低配置。
写入表示请求进入数据库。读取表示结果返回客户端;SELECT 请求沿相反方向传输。
Logstash 负责数据摄取,Dashboards 负责搜索。分片 A 的主分片位于节点 1,副本位于节点 2;节点 3 持有其他分片。
参考流程:Beats → Logstash → OpenSearch ← Dashboards。Logstash 和 Dashboards 均为可选项。分片 A 的位置仅作示意,并非全局数据库写入节点。红色表示进入数据库的写入请求;绿色表示返回客户端的读取结果,SELECT 请求沿相反方向传输。琥珀色表示复制,蓝色虚线表示监控/控制。
来源文档 ↗自动故障转移取决于拓扑、法定人数及配置。MySQL / MariaDB / Percona 的主从模式及标准 PostgreSQL,需要由运维人员提升主节点并调整路由。
可用性 + 可恢复性
复制维护实时副本,备份则提供删除或非预期变更之前的恢复点。企业数据保护需要两者兼备。
根据引擎、延迟、一致性及 RPO 需求,选择异步复制、流复制或基于法定人数的复制。
路由写入前,验证候选节点、法定人数及原主节点的隔离情况。测试客户端重连及重试行为。
明确保留策略、恢复点及恢复演练。将备份与集群分开保存,并验证恢复后的数据可用。
节点返回 → 检查时间线 / 日志 → 追赶同步或重建 → 验证就绪状态 → 恢复流量
RUK-COM / 数据库运维
根据系统的重要性确定服务范围及 SLA,涵盖性能、事件响应和恢复规划。
跟踪查询延迟、连接、复制延迟、慢查询、存储及备份结果,及早识别问题。
为各引擎规划只读副本、连接池及存储增长,同时考虑 IOPS、WAL / binlog 及恢复预留空间。
设计私有连接、TLS 及基于角色的权限,使机密信息管理、补丁及审计实践符合您的政策。
专家调查客户端连接、查询、代理、复制及底层基础设施。
在生产环境变更前,测试主备切换、故障转移、恢复及回滚,并提供可重复使用的运维手册和结果记录。
Agent 辅助汇总异常并确定调查优先级。访问及系统变更遵循约定的权限和流程。
评估 / 迁移 / 运维
审查引擎、版本、规模、扩展及 RPO / RTO。
选择拓扑,并使用获授权的数据演练。
验证数据,并根据迁移方式明确停止写入及回滚安排。
移交运维手册、监控、备份及容量计划。
部署之前
需要。删除或非预期变更可能复制到所有副本。应维护独立备份、适当的保留期限,并定期测试恢复。
不会。有些模式依赖法定人数及健康检测,另一些需要手动提升主节点,尤其是此处参考的 MySQL 系列主从模式及标准 PostgreSQL 模式。
应先验证一致性及追赶同步状态。根据引擎及保留的历史记录,恢复可能使用 binlog、WAL、oplog、IST / SST 或重建。
根据各系统的同步策略、数据量、网络、备份及恢复方式,按照标准 99.9% SLA 定义并测试目标,同时明确范围及排除事项。
请提供引擎及版本、数据量、读写工作负载、峰值连接数、扩展、安全需求及迁移窗口。
您的数据 / 我们的专业能力
与 Ruk-Com 讨论架构、迁移及托管服务范围。