容灾
容灾(Disaster Recovery,DR)是在灾难性事件(如火灾、地震、断电)发生后,恢复系统和服务的能力。容灾是业务连续性的保障,是大型系统的最后一道防线。
容灾等级
RPO 和 RTO
RPO(Recovery Point Objective,恢复点目标):数据可以容忍的最大丢失时间,如 5 分钟、1 小时、1 天。
RTO(Recovery Time Objective,恢复时间目标):服务可以容忍的最大中断时间,如 1 小时、4 小时、1 天。
RPO 和 RTO 的权衡:RPO 和 RTO 越小,容灾成本越高。根据业务重要性选择合适的 RPO 和 RTO。
容灾等级
等级 1:数据本地备份,无异地备份。灾难发生后数据可能全部丢失。
等级 2:数据异地备份(冷备)。灾难发生后需要从异地恢复数据,RPO 和 RTO 较大。
等级 3:数据异地备份 + 异地备用系统(温备)。灾难发生后需要启动备用系统,RTO 中等。
等级 4:数据实时同步 + 异地双活(热备)。灾难发生后自动切换,RPO 和 RTO 最小。
容灾架构
本地高可用
本地高可用是在同一数据中心内部署多个实例,故障时自动切换。本地高可用无法应对数据中心级别的灾难。
本地高可用的实现:服务冗余、负载均衡、数据冗余(主从复制、多副本)。
异地冷备
异地冷备是将数据定期备份到异地数据中心,灾难发生后从异地恢复数据。异地冷备成本低,但 RPO 和 RTO 大。
异地冷备的实现:定期备份(每日备份到异地)、异步复制(异步复制数据到异地)。
异地温备
异地温备是将数据实时同步到异地数据中心,备用系统处于待命状态。灾难发生后需要启动备用系统,RPO 小、RTO 中等。
异地温备的实现:数据同步(主从复制、数据流)、备用系统(部署完整的备用系统)。
异地双活
异地双活是两个数据中心同时提供服务,任一数据中心故障时,另一个数据中心接管全部请求。异地双活成本高,但 RPO 和 RTO 最小。
异地双活的实现:数据同步(双向复制、冲突解决)、流量调度(DNS 调度、负载均衡调度)、统一配置(配置中心同步配置)。
多地多活
多地多活是多个数据中心同时提供服务,任一数据中心故障时,其他数据中心接管。多地多活是大型互联网公司的容灾方案。
多地多活的实现:单元化(按用户或地域划分单元)、流量调度(就近接入、故障切换)、数据同步(数据分片、同步复制)。
容灾的关键技术
数据同步
同步复制:主节点等待备节点确认后才返回成功,数据不丢失但性能差。
异步复制:主节点不等待备节点确认就返回成功,性能好但可能丢失数据。
半同步复制:主节点等待至少一个备节点确认后才返回成功,折中方案。
数据冲突:多地写入可能导致数据冲突,需要冲突解决机制(时间戳、向量时钟)。
流量调度
DNS 调度:DNS 根据地域返回不同的 IP,就近接入。DNS 的问题:缓存导致故障切换慢。
HTTPDNS:使用 HTTP 协议查询 DNS,避免 DNS 缓存,故障切换快。
负载均衡调度:全局负载均衡器(GSLB)根据地域和健康状态调度流量。
配置同步
配置中心:所有数据中心从配置中心获取配置,保证配置一致。
配置同步:配置变更时同步到所有数据中心,避免配置不一致。
容灾的挑战
数据一致性
多地写入可能导致数据冲突,需要冲突解决机制。
解决方案:单点写入(每个数据分片只有一个主写入)、冲突解决(时间戳、向量时钟、业务规则)。
流量切换
灾难发生时需要快速切换流量到异地数据中心。
解决方案:DNS 切换、负载均衡切换、客户端重连。
成本
容灾需要额外的数据中心、服务器、网络,成本高。
解决方案:根据业务重要性选择合适的容灾等级、使用云服务(弹性、按需付费)。
容灾的最佳实践
定期演练:定期进行容灾演练,验证容灾方案的有效性。
监控告警:监控数据中心状态、数据同步状态,异常时及时告警。
自动化:自动化容灾切换,减少人工干预,提高恢复速度。
文档记录:记录容灾流程和运维手册,便于知识传承。
分层容灾:根据业务重要性分层容灾,核心业务 RPO 和 RTO 小,非核心业务 RPO 和 RTO 大。
容灾是业务连续性的保障,是大型系统的最后一道防线。理解容灾的原理和挑战,有助于设计可靠的容灾方案。