RPO/RTO 设计方法论
业务影响分析(BIA)
在设计容灾方案前,必须进行业务影响分析:
BIA 分析步骤:
1. 识别关键业务系统
- 核心交易系统(银行转账、电商下单)
- 支撑系统(ERP、CRM、OA)
- 基础设施(DNS、AD、邮件)
2. 评估停机影响
- 财务损失(每小时损失多少钱)
- 声誉损失(客户流失风险)
- 合规风险(监管要求)
3. 确定 RPO/RTO 目标
- 基于业务影响和成本平衡
- 越低的 RPO/RTO,成本越高
4. 输出:业务连续性需求文档RPO/RTO 与技术方案映射
RPO = 0,RTO < 1 分钟:
技术:同步复制 + 双活
成本:极高
适用:金融核心交易、医疗急救系统
RPO < 15 分钟,RTO < 15 分钟:
技术:异步复制 + 快速切换
成本:高
适用:电商核心系统、政务关键系统
RPO < 1 小时,RTO < 1 小时:
技术:定期快照 + 备份
成本:中等
适用:ERP、CRM、邮件系统
RPO < 24 小时,RTO < 4 小时:
技术:每日备份
成本:低
适用:开发测试、归档系统存储同步技术
同步复制
工作原理:
主存储写入数据
↓ 同时
备存储写入数据
↓ 两者都确认
返回写入成功
特点:
RPO = 0(零数据丢失)
写入延迟 = 本地延迟 + 网络往返延迟
延迟要求:
网络延迟 < 5ms(同城专线)
超过 5ms 会显著影响应用性能
H3C 实现:
H3C 全闪存储双活(Active-Active)
两台存储互为镜像,同时提供服务异步复制
工作原理:
主存储写入数据 → 立即返回成功
↓ 异步
将变化数据复制到备存储
特点:
RPO > 0(有数据丢失风险)
写入延迟不受网络影响
适合跨城(延迟 20-50ms)
H3C 实现:
H3C 远程复制(Remote Replication)
支持:同步/异步/半同步三种模式连续数据保护(CDP)
CDP(Continuous Data Protection):
每次写入都记录到日志
可以恢复到任意时间点
实现方式:
存储层 CDP:在存储控制器层面记录
主机层 CDP:在主机 I/O 路径上记录
优势:
RPO 接近 0(秒级)
可以恢复到任意历史时间点
劣势:
存储开销大(需要保存所有历史 I/O)
通常只保留最近 24-72 小时容灾演练
演练计划
年度容灾演练计划:
Q1:桌面演练(Tabletop Exercise)
- 不实际切换,只讨论流程
- 验证文档和流程的完整性
- 时间:2-4 小时
Q2:功能演练(Functional Exercise)
- 实际切换到灾备环境
- 验证技术方案可行性
- 时间:1 天(含恢复)
Q3:桌面演练
Q4:全面演练(Full-Scale Exercise)
- 模拟真实灾难场景
- 包括人员、流程、技术全面验证
- 时间:2-3 天演练脚本示例
场景:主数据中心机房断电,切换到灾备数据中心
演练步骤:
T+0:宣布演练开始,模拟主数据中心断电
T+5分钟:确认主数据中心不可用
T+10分钟:启动灾备切换流程
- 通知相关团队
- 确认灾备数据中心状态
T+15分钟:存储切换
- 将灾备存储提升为主存储
- 验证数据完整性
T+20分钟:应用启动
- 在灾备数据中心启动应用服务器
- 验证应用可用性
T+25分钟:DNS 切换
- 将域名解析指向灾备数据中心
T+30分钟:业务验证
- 执行业务功能测试
- 确认核心功能正常
T+35分钟:宣布切换完成,记录 RTO
演练结束后:
- 记录实际 RTO(目标 < 30 分钟)
- 记录数据丢失量(目标 RPO < 15 分钟)
- 输出演练报告,记录问题和改进项容灾方案成本估算
python
def dr_cost_estimation(
primary_storage_tb: float,
rpo_minutes: int,
rto_minutes: int,
distance_km: int
):
"""
容灾方案成本估算(参考)
"""
base_storage_cost = primary_storage_tb * 5000 # 5000元/TB
if rpo_minutes == 0 and rto_minutes <= 5:
# 同步双活方案
multiplier = 3.0
solution = "同步双活(Active-Active)"
elif rpo_minutes <= 15 and rto_minutes <= 15:
# 异步复制 + 快速切换
multiplier = 2.0
solution = "异步复制 + 快速切换"
elif rpo_minutes <= 60 and rto_minutes <= 60:
# 定期快照 + 备份
multiplier = 1.3
solution = "定期快照 + 备份"
else:
# 基础备份
multiplier = 1.1
solution = "基础备份"
# 专线成本(距离越远越贵)
if distance_km <= 50:
line_cost_monthly = 50000 # 同城专线
elif distance_km <= 500:
line_cost_monthly = 150000 # 省内专线
else:
line_cost_monthly = 300000 # 跨省专线
total_hardware = base_storage_cost * multiplier
annual_line_cost = line_cost_monthly * 12
print(f"=== 容灾方案成本估算 ===")
print(f"方案:{solution}")
print(f"RPO 目标:{rpo_minutes} 分钟")
print(f"RTO 目标:{rto_minutes} 分钟")
print(f"硬件成本:{total_hardware:,.0f} 元")
print(f"专线年费:{annual_line_cost:,.0f} 元")
print(f"总 TCO(3年):{total_hardware + annual_line_cost * 3:,.0f} 元")
# 示例
dr_cost_estimation(
primary_storage_tb=100,
rpo_minutes=15,
rto_minutes=30,
distance_km=200
)