📌 今日关键词:数据库容灾、同城容灾、两地三中心、高可用集群、RPO、RTO
大家好呀!我是 数据库小学妹 👋
最近在学习数据库高可用,绕不开一个词——容灾。
"同城容灾和两地三中心有啥区别?"
"RPO和RTO又是啥?"
刚学完主从复制、读写分离的我,被这些概念绕晕了!花了两周,总算搞清楚了。今天把这篇学习笔记分享出来,帮你少走弯路!💪
一、为什么要做容灾?
简单说,容灾就是为了防止数据丢失和业务中断。
举几个例子:
- 机房断电了怎么办?
- 数据库服务器硬盘坏了怎么办?
- 整个机房都不可用了怎么办?
没有容灾,任何一个故障都可能导致:
- 几小时甚至几天的业务停摆
- 珍贵数据找不回来
- 客户流失、赔偿损失
所以,容灾是生产系统的必备基础设施。
二、两个核心概念:RPO 和 RTO
选型前先搞懂这两个指标:
| 指标 | 全称 | 含义 | 你需要关注的 |
|---|---|---|---|
| RPO | Recovery Point Objective | 数据恢复点目标 | 允许丢失多长时间的数据? |
| RTO | Recovery Time Objective | 恢复时间目标 | 业务中断后多久能恢复? |
- RPO = 0:不允许丢失任何数据,必须实时同步
- RPO = 1小时:允许丢失最多1小时的数据
- RTO = 30分钟:故障后30分钟内必须恢复业务
这两个指标直接决定容灾方案级别,也决定要投入多少成本。
三、同城容灾 vs 两地三中心
1. 同城容灾
两个机房都在同一个城市,距离几十公里以内。
┌─────────────────┐ 同步复制 ┌─────────────────┐
│ 主机房 │ ◄──────────────► │ 同城备机房 │
│ (A机房) │ 延迟 < 1ms │ (B机房) │
└─────────────────┘ └─────────────────┘
- 数据实时同步(同步复制)
- 切换速度快(RTO 可以做到分钟级)
- 能应对机房级别故障
- 成本相对较低
- 无法应对城市级别灾难(比如地震、洪水)
适用场景:城市内有两个可用机房、业务要求RTO在30分钟以内
2. 两地三中心
两个城市,三个机房。
┌─────────────────┐ 同步复制 ┌─────────────────┐
│ 主数据中心 │ ◄──────────────► │ 同城数据中心 │
│ (A城市机房1) │ 延迟 < 1ms │ (A城市机房2) │
└─────────────────┘ └─────────────────┘
│
│ 异步复制
▼ (延迟几分钟到几小时)
┌─────────────────┐
│ 异地数据中心 │
│ (B城市机房) │
└─────────────────┘
- 主机房和同城机房同步复制,数据实时一致
- 异地机房异步复制,允许少量数据延迟
- 能应对城市级别灾难
- 成本高、运维复杂
- RTO 通常在小时级别
适用场景:金融、政务等关键业务、有足够预算和运维能力
四、选型需要考虑的因素
在做容灾方案选择时,需要综合考虑以下几个关键因素:
1. 业务中断容忍度
核心业务系统通常只能接受15分钟以内的业务中断,而一般业务系统可容忍1-2小时的中断时间。
2. 数据丢失容忍度
核心交易数据(如支付、订单)必须实现RPO=0(零数据丢失),而日志类数据可以接受少量丢失(RPO可设为分钟级或小时级)。
3. 预算和团队能力
预算有限且运维团队人少的情况下,同城容灾是最实用的选择;有足够预算和专职DBA团队时,两地三中心方案更合适。
4. 数据库产品能力
不同数据库对容灾的支持差异很大:
- 开源MySQL:依赖主从复制,需额外配置集群组件(如MHA、Keepalived)
- 商业数据库:通常内置高可用集群软件,配置更简单
- 国产数据库:部分产品将集群能力集成在一起,比如金仓的Clusterware支持主备集群、读写分离集群、多写共享存储集群等多种模式
结合这些因素,可以做个简要评估:
| 维度 | 同城容灾 | 两地三中心 |
|---|---|---|
| RPO | 0(实时同步) | 0-几小时(分数据重要性) |
| RTO | 分钟级 | 小时级 |
| 成本 | 较低 | 高 |
| 运维难度 | 一般 | 复杂 |
| 能应对的灾难级别 | 机房级 | 城市级 |
我的理解:大多数业务系统,同城容灾足够用了;金融、政务等关键系统,考虑两地三中心;预算有限时,至少做个主从备份,比没有容灾强。
💡 小学妹碎碎念:选数据库的时候,容灾能力也是重要考量因素。有的数据库默认就带高可用方案,有的需要额外购买授权。之前看过金仓的文档,他们的KES数据库内置了Clusterware集群软件,部署相对简单。
五、容灾架构的技术实现
1. 数据复制方式
同步复制:主库完成操作后,必须等备库也完成才返回成功。数据完全不丢失,但会增加延迟。适合RPO=0的场景。
异步复制:主库完成操作后立即返回,备库异步同步。延迟小,但主库故障时可能丢失少量数据。适合对数据完整性要求不那么高的场景。
💡 小学妹笔记:同步复制通常只适合同城机房(延迟<1ms),跨城市只能靠异步。有些数据库提供更灵活的复制方案,比如金仓的KFS支持双轨并行和柔性迁移,可以在业务运行的同时进行数据同步。
2. 主备复制 + 自动切换
┌─────────────┐ 检测+切换 ┌─────────────┐
│ 集群软件 │ ◄────────────► │ 主库 │
│ (Clusterware)│ 心跳检测 │ (Primary) │
└─────────────┘ └─────────────┘
│
▼ ┌─────────────┐
自动决策 │ 从库 │
故障转移 │ (Standby) │
│ └─────────────┘
▼
VIP 漂移
集群软件会:实时监控主库状态、检测到故障后自动切换、将VIP漂移到新主库、应用程序无需修改连接配置。
💡 小学妹笔记:集群软件是实现高可用的核心组件。国产数据库通常会内置这类能力,比如金仓的Clusterware支持主备集群和读写分离集群的自动切换,可以实现RTO≈0的效果。
3. 读写分离
应用程序
│
├── 写请求 ──► 主库
│
├── 读请求1 ──► 从库1
├── 读请求2 ──► 从库2
└── 读请求3 ──► 从库3
减轻主库压力、提升整体吞吐量,但要注意主从延迟问题。
六、新手容易踩的坑
坑1:以为做了容灾就万无一失
实际案例:容灾切换演练过很多次,但第一次真实切换时,应用连接一直失败。
原因:应用配置的是主库IP,没有使用VIP(虚拟IP)。切换后从库IP变了,应用连不上。
解决:一定要用VIP,切换时集群软件会自动漂移VIP,应用无感知。
坑2:忽略网络延迟
实际案例:同步复制时,业务响应明显变慢。
原因:主备之间网络延迟超过5ms,业务无法接受。
解决:优化网络、选用低延迟线路、调整数据库参数减少网络往返次数、考虑用异步复制。
坑3:没有定期演练
实际案例:容灾配置好之后,一直没测试过。半年后主库故障,切换失败了。
原因:某些配置在演练时没问题,但长时间运行后出现了配置漂移。
解决:每季度至少做一次真实的切换演练,确保切换脚本、切换流程都是可行的。
💡 小学妹补充:很多数据库提供图形化管理工具,比如金仓的KStudio支持图形化集群管理,切换操作点点鼠标就能完成。再好的工具也不能替代定期演练!
七、学习心得
今天的内容总结成三句话:
1️⃣ 先定RPO和RTO,再选方案 指标决定了架构,别本末倒置
2️⃣ 同城容灾是大多数公司的选择 成本可控、效果明显
3️⃣ 容灾必须定期演练 配好不算完,必须验证能用!
遇到容灾选型别慌,问清楚业务需求,一切就清晰了。
👋 我是 数据库小学妹,一个用 设计师思维 学数据库的转行人。我们一起,把复杂的技术变得简单有趣!💕
本文基于学习总结,不同数据库产品的容灾实现方式各有差异,建议根据具体产品文档进行配置。