一、先锁定两项核心指标:RTO 与 RPO
RTO 不能一刀切统一设定,需要按照业务模块分级定义,匹配不同等级的资源投入。本次业务拆分为四档:
如果强制把全系统 RTO 压缩到半小时,大量预算会消耗在低优先级模块,投入产出严重失衡。
RPO 代表可容忍的数据丢失时长,单纯的时间指标业务方很难评估,必须折算成单据数量。
相同的时间窗口,对应不同业务的数据损失规模天差地别。
工程实施最容易踩坑:先选定异地双活架构,再倒推 RPO=0,最后发现跨城异步同步根本无法实现零数据丢失。
标准流程必须是:业务团队先给出分级 RTO、RPO 指标;技术团队输出满足指标的架构方案与预算;多方评审权衡成本与风险,反复迭代 2~3 轮。前期指标对齐,远好于后期架构返工。
同城双机房专线延迟仅 1~2ms,支撑应用双活 + 数据库一主一备同步复制,双节点同时承接业务流量。
但应用必须满足硬性约束:服务无状态、会话信息集中存储、上传文件接入共享存储、定时任务仅在单一节点执行。
本次改造中,3 个业务模块直接将附件保存在本地磁盘,双活切换后附件无法跨机房访问,仅这一项改造就耗时六周。
如果两个机房共用同一路市电、同一段市政光缆、同一组运维人员,市政施工、线路挖断会同时造成双机房中断,双活架构只能抵御单机房硬件故障,无法应对区域性事故。
搭建同城双活必须补齐三项基础保障:两路完全独立的市电、两条不同路由的运营商光缆、两套独立值守的运维班组,否则只是形式上的双活。
异地机房距离普遍超过 1000 公里,网络延迟达到十几毫秒,同步复制会大幅拖慢主库写入性能,只能采用异步复制。这也决定了异地架构天然无法做到 RPO=0。
异步同步存在数据滞后:日常延迟保持在秒级,但业务高峰、网络抖动时,延迟可能拉长至 20 分钟。
灾备最大风险不是切换失败,而是切到异地之后发现缺失几十分钟业务数据,需要人工补录单据。因此必须对同步延迟做持续监控,一旦超出阈值立刻触发告警。
[cluster]
name = "zone-a"
role = "primary"
weight = 100
[standby_zone]
name = "zone-b"
role = "standby"
weight = 0
[switchover]
mode = "manual_confirm"
probe_window_seconds = 180
health_probe = ["db_primary", "api_error_rate", "mq_backlog"]
degrade_order = ["report", "search", "preview"]
read_only_fallback = true
confirm_window_seconds = 120
[rollback]
window_minutes = 60
require_data_check = true
check_sql = "select count(*) from biz_order where updated_at > :since"
[remote]
role = "data_only"
lag_alert_minutes = 10流量切到备用机房后,新业务数据持续写入备用节点。切回主机房前,必须先把增量数据同步回原机房,同时规避主键冲突、时序错乱等数据分叉问题。
落地规范:
所有切换步骤固化在流程工单中:每一步操作项、等待时长、观测指标全部提前写明,运维人员无需临场临时决策,严格按照工单执行。
演练必须拉上业务人员参与。纯技术自测往往只调用低频接口,流量压力不足,演练结果失真,等到真实故障来临依然会卡点。
首轮全流程演练,切换耗时 57 分钟,远超 30 分钟目标,瓶颈集中在三点:
经过三轮迭代优化,最终将切换耗时压缩至 29 分钟。持续迭代演练,远比单纯扩容硬件更能提升容灾可靠性。
同城 + 异地整套架构的年度支出,是仅部署同城双活方案的 3 倍以上。异地灾备主要覆盖园区整体断电这类极低概率事故,对多数业务而言,全量投入性价比偏低。
最终落地策略:
该取舍方案必须形成书面文档并由业务负责人签字确认,规避事后责任纠纷。
Q1:同城双活能否做到 RPO=0?
A:全库同步复制可以实现零数据丢失,但跨机房网络抖动会直接拖慢主库写入响应。最优策略是分表配置:核心交易表启用同步复制,非核心业务采用异步复制,不搞一刀切全库强同步。
Q2:异地仅做数据级灾备,恢复需要多久?
A:恢复时长取决于环境自动化能力。依托镜像 + IaC 基础设施代码,可在 2 小时内完成环境拉起;如果依靠人工部署软硬件,两天都无法完成重建。数据级灾备的瓶颈从来不是数据同步,而是环境重建效率。
Q3:什么时候才能开启自动故障切换?
A:必须同时满足两个条件:健康探测指标足够稳定,不存在单点探测;主备双向回切流程经过多轮验证。只要探测条件存在不确定性,就坚持人工确认模式,误切换带来的损失,远高于多等待十几分钟的代价。
Q4:演练会不会影响线上业务?
A:会产生一定影响,因此必须选定业务低峰期执行,并提前准备完整回切预案。实操方案:演练前将流量限制在 30%,切换操作只影响这部分用户,一旦异常,10 分钟内完成回滚。从未经过实战演练的灾备方案,在真实故障中大概率无法启用。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。