设计高可用容灾架构需遵循分级冗余、自动故障转移、数据零丢失原则,通过多层次防御体系保障业务连续性。以下为经过亿级流量验证的架构方案及实施步骤:
一、全局容灾架构拓扑
graph TB
subgraph RegionA[主地域-上海]
AZ1[可用区A] --> LB1[SLB负载均衡]
AZ2[可用区B] --> LB1
LB1 --> App1[应用集群]
App1 --> DB1[(MySQL MGR组)]
App1 --> Cache1[Redis Cluster]
end
subgraph RegionB[灾备地域-北京]
AZ3[可用区C] --> LB2[SLB负载均衡]
App2[应用集群] --> DB2[(MySQL 异步从库)]
App2 --> Cache2[Redis CRDT副本]
end
RegionA -- 实时数据同步 --> RegionB
DNS[智能DNS] -->|健康检查| RegionA
DNS -->|故障切换| RegionB
二、核心层设计要点
1. 流量接入层(5秒切换)
组件 | 方案 | 关键指标 |
---|---|---|
智能DNS | AWS Route53/阿里云云解析 | TTL=10s |
负载均衡 | Nginx+Keepalived集群 | 心跳检测间隔500ms |
健康检查 | 四层TCP检查+七层API探活 | 连续失败3次判定异常 |
配置示例(Nginx主动健康检查):
upstream backend {
zone backend_zone 64k;
server 10.1.1.1:80 resolve;
server 10.1.1.2:80 resolve;
interval=3s fails=2;# 主动检查
}
2. 应用层容灾(60秒恢复)
- 多活部署:
# Kubernetes多区域部署 topologySpreadConstraints: - maxSkew: 1 topologyKey: topology.kubernetes.io/zone whenUnsatisfiable: ScheduleAnyway
- 故障熔断:
- 使用Sentinel实现自动熔断(失败率>50%触发)
- 服务降级预案:关闭非核心功能(如评论服务)
3. 数据层容灾(关键!)
数据库类型 | 同步方案 | RPO目标 |
---|---|---|
MySQL | MGR多主模式 + 异地日志异步复制 | ≤1秒 |
Redis | CRDT多活 + RDB/AOF双持久化 | =0 |
MongoDB | 分片集群 + 跨地域副本集 | ≤5秒 |
MySQL防脑裂配置:
# my.cnf
[mysqld]
plugin_load_add='group_replication.so'
loose-group_replication_group_name="xxxxx"
loose-group_replication_member_weights=40 # 主库权重更高
loose-group_replication_unreachable_majority_timeout=10
4. 基础设施冗余
- 云服务双活:
- 专线互联:
- 主备两条物理链路(电信+联通)
- 带宽按峰值流量200%预留
三、自动故障切换流程
sequenceDiagram
监控系统->>控制中枢: 检测上海地域API成功率<80%
控制中枢->>探测集群: 启动跨地域三次验证
探测集群-->>控制中枢: 确认故障(3/3失败)
控制中枢->>DNS系统: 修改域名解析权重(上海=>0%)
控制中枢->>数据库控制台: 激活北京读写实例
控制中枢->>应用集群: 下发配置切换指令
控制中枢->>告警平台: 触发电话/短信通知
用户流量->>北京地域: 新流量切至灾备区域
四、容灾能力量化指标
能力维度 | 金融级标准 | 实现方案 |
---|---|---|
RTO(恢复时间) | ≤90秒 | 自动化切换+预置资源 |
RPO(数据丢失) | =0 | MySQL MGR+Redis CRDT |
可演练性 | 每月1次真实切换 | 蓝绿发布流程集成 |
故障检测速度 | ≤15秒 | 毫秒级Prometheus采集 |
五、成本优化策略
- 业务分级容灾:
- 混合部署方案:
- 核心业务:双活架构(上海+北京)
- 边缘业务:冷备模式(按需激活)
六、必做容灾验证
-
混沌工程试验:
# 模拟上海机房网络中断 chaosd attack network loss -e 100% -i eth0 -d 5m
-
数据一致性校验:
/* 跨地域数据校验 */ SELECT COUNT(*) AS total, SUM(IF(SHA2(row_data)=checksum,1,0)) AS match_rate FROM data_verification;
-
压测指标:
场景 预期QPS 灾备区域承载度 全量切换 50万 87% 核心业务切换 20万 45%
七、经典案例:支付系统双活
架构难点突破:
- 分布式事务一致性:使用Seata AT模式 + 异步对账
- 全局ID冲突:美团Leaf-Snowflake跨机房分发
- 资金准实时核对:Binlog订阅+Spark Streaming
💡 黄金原则:容灾投入应≈业务损失成本×故障概率。每次故障后必须更新《容灾切换手册》,工具链建设>人工操作。