双活与主备的差别
双活(Active-Active)指两个站点同时承载业务读写,任一站点故障时由另一站点接管,切换过程对业务接近透明。它与主备模式的根本差别在于:主备架构只有一端承载写入,另一端处于待命状态,切换需要人工或脚本介入并存在中断窗口;双活两端都在提供服务,故障时不需要数据提升动作,业务侧感知更弱。代价是两端都必须按能够独立承载全部业务来规划容量,因此资源利用率通常只有一半左右。
基本信息
| 定义 | 两个站点同时承载业务读写 |
|---|---|
| 与主备差异 | 主备一端待命需切换;双活两端在线 |
| 存储前提 | 跨站点数据一致能力与仲裁机制 |
| 链路前提 | 站点间低时延、低抖动、双链路冗余 |
| 应用前提 | 支持多活写入,或已明确读写分离方案 |
| 主要收益 | 切换时间接近零,资源利用率高于主备 |
典型使用场景
- 核心交易系统要求 RTO 接近零,无法接受切换中断
- 资源整合:把两套站点的算力与存储合并为一个资源池
- 计划内维护:检修其中一端而业务不中断
- 区域性故障:一端整体失联,另一端继续提供服务
- 就近接入:不同区域用户访问较近站点以降低访问时延
- 容量弹性:高峰两端共同承载,低谷时可关闭部分资源
前提条件与后果
| 层次 | 前提 | 不满足的后果 |
|---|---|---|
| 链路 | 低时延、低抖动、双链路冗余 | 同步写入时延超出应用容忍范围 |
| 存储 | 跨站点一致性与仲裁能力 | 两端数据分叉,无法确定性接管 |
| 网络 | 客户端可访问任一站点 | 切换需改地址,做不到透明 |
| 应用 | 支持多活写入或读写分离 | 出现跨站点写冲突 |
| 运维 | 两侧配置一致,变更同步下发 | 单侧配置漂移导致行为不同 |
| 容量 | 单侧可承载全部业务 | 故障时容量不足,业务降级 |
双活的容量是共享而不是叠加。两端各自都要按能够承载全部业务来规划,实际运行时的平均利用率通常只有一半左右,这是双活相对主备在成本上的主要增量,也是方案评审时必须提前说明、否则后期容易被质疑的部分。
双活最大的技术风险是链路中断后的裂脑:两端都健康但互相看不见,如果都继续提供写服务就会产生两份互不相容的数据。必须依赖独立于两站点的仲裁机制来确定哪一侧保留写权限,另一侧转为只读或停止服务,并把这一决策规则写进应急预案。
前提自检表
前提自检表
# [ ] 两站点往返时延实测值稳定在毫秒级
# [ ] 存储层具备跨站点一致性与仲裁能力
# [ ] 应用支持两端同时写入,或已明确读写分离
# [ ] 客户端接入方案在两站点之间透明
# [ ] 单侧容量可承载全部业务
# [ ] 存在独立于两站点的仲裁与决策机制