容灾与多活
单机房故障(断电、光纤被挖)是真实风险。容灾设计的目标:机房级别故障下,数据不丢、服务可用。面试主线:容灾层级、双活架构、备份与演练。
容灾层级
| 层级 | 架构 | 切换时间 | 成本 |
|---|---|---|---|
| 同城双活 | 两个机房同城互备,同时服务 | 分钟级 | 中 |
| 异地多活 | 多地域机房同时服务 | 分钟级 | 高 |
| 异地冷备 | 异地机房备份,不服务 | 小时级(拉起) | 低 |
- 同城双活:两个机房距离近(光纤直连),数据库同步复制,流量均分。防机房故障,防不了地域灾难
- 异地多活:跨地域,防地域灾难(地震、大面积断网)。代价:跨地域同步延迟大,架构复杂度高
- 选型:核心业务同城双活起步,重要数据异地备份
RPO 与 RTO
| 指标 | 含义 | 容灾目标 |
|---|---|---|
| RPO | 可容忍的数据丢失量(时间) | 越小越好,同步复制 RPO=0 |
| RTO | 服务恢复时间 | 越小越好,双活分钟级 |
- 同城双活:RPO≈0(同步复制)、RTO 分钟级
- 异步复制到异地:RPO 秒到分级(丢最近写入)
- 面试话术:RPO 决定丢多少数据,RTO 决定停多久服务,两者由复制模式和切换机制决定(见冗余与故障转移篇)
备份恢复
备份是容灾的兜底(双活挂了还有备份):
| 方式 | 内容 | 恢复 |
|---|---|---|
| 全量备份 | 定期全量快照 | 恢复慢,丢备份周期内数据 |
| 增量/WAL 归档 | 全量 + 持续日志 | PITR 恢复到任意时间点(见数据库 WAL 篇) |
| 异地备份 | 备份副本放异地 | 防本地灾难 |
要点:备份要验证可恢复(定期演练恢复流程),备份要异地(同机房备份随机房一起挂)。只备份不验证等于没备份。
故障演练
- 混沌工程:主动注入故障(杀节点、断网络、延迟),验证系统自愈能力
- 演练内容:单实例故障、机房故障、依赖故障(Redis/DB 挂)、流量突增
- 演练产出:发现预案漏洞、验证监控告警、训练运维响应
- 原则:从低风险开始(先演练非核心、低流量时段),逐步扩大
面试追问
- 同城双活和异地多活? 双活同城互备防机房故障(同步复制 RPO≈0);多活跨地域防地域灾难(延迟大、复杂)。按风险选
- RPO 和 RTO 怎么权衡? RPO 是丢多少,RTO 是停多久。同步复制 RPO=0 但延迟高;异步低延迟但可能丢数据
- 备份为什么必须演练? 备份不可恢复等于没有。定期验证恢复流程,备份放异地
- 多活的难点? 数据同步延迟、冲突处理、流量调度。数据库是最大的难点(跨地域同步)
- 故障演练的价值? 验证预案和自愈能力。从低风险开始,逐步扩大范围