本节摘要:高可用的目标不是"不出故障",而是"出故障时业务无感或分钟级恢复"。本节讲故障切换的三代方案演进、负载均衡的两种接入形态、以及容灾层级的思考框架。位置:第 6 章收官——把复制、拆分等组件编排成完整的可用性体系。
先校准概念。可用性 99.95% 意味着全年停机不超过约 4.4 小时;99.99% 就是 53 分钟以内。但工程师很快会学到:故障不按年均匀分布——它专挑大促前夜、版本发布日、周五下班前出现。所以高可用的工程重点是两个数字:RTO(故障到恢复的时长)与RPO(最多丢多少数据)。复制方案的选型本质是给这两个数定价:异步复制 RPO 可能丢秒级数据、RTO 分钟级;半同步复制 RPO 趋近零但写入延迟上升。评审会要的答案不是"越高越好",而是"这个业务付得起哪个价"。
第一代:主从手工切换。 主库挂了,运维登上来执行 CHANGE MASTER 换主、应用改配置。RTO 以半小时计,适合内部系统。它的价值在于让团队理解切换的每一个动作——自动化方案的每一步都是对它的封装。
第二代:编排自动切换。 在主从之上加仲裁组件(如 MHA 类工具或云平台的托管高可用):持续探测主库心跳,判定故障后自动完成"从库提升为主、其他从库改挂新主、VIP 或 DNS 漂移"。RTO 压到分钟级内。要点是防脑裂——仲裁必须有多数派确认,避免网络分区时新旧主同时对外写入(那比宕机严重得多)。
第三代:组复制与云托管。 MySQL 官方的 MGR(Group Replication)基于 Paxos 协议多节点多数派提交,自动选主、自动故障转移,配合 MySQL Router 或 InnoDB Cluster 形成整套方案;云数据库的托管高可用则把这一切封装成"一个配置项"。取舍:MGR 要求多节点写入语义的适配、运维学习曲线陡;云托管把复杂度外包,但带来平台绑定。团队自运维能力强走 MGR,追求稳态效率走云托管,两者都比第二代省心。
负载均衡解决"多个从库怎么分流量、写流量永远进主库"。两种形态:
| 维度 | 代理型(ProxySQL 等) | 客户端型(驱动或框架层路由) |
|---|---|---|
| 部署位置 | 独立中间层 | 应用进程内 |
| 故障转移 | 中间层统一处理 | 各应用实例各自处理 |
| 额外延迟 | 多一跳网络 | 无 |
| 运维心智 | 多一套组件要维护 | 逻辑散在应用配置里 |
| 典型场景 | 多语言多团队共享接入 | 单一技术栈的中小规模 |
选型口诀:多团队异构技术栈用代理型统一收口;单一栈追求低延迟用客户端型。无论哪种,都需配置健康检查(探活失败自动摘除)与读权重(从库规格不同则权重不同,避免小从库被打挂——6.2 留下的伏笔在此收口)。

背景:大促压测中人为 kill 掉主库进程,检验自动切换链路。时间线与动作:T+0 主库进程被杀;T+5 秒仲裁组件连续三次探活失败判定故障;T+15 秒选出数据最新的从库(比较 GTID 位点)执行提升;T+30 秒其余从库改挂新主;T+45 秒代理层把写流量路由到新主,VIP 漂移完成;业务恢复写入,全程约 1 分钟。检查清单逐项过:切换期间有无数据丢失(对比新旧主位点——丢失窗口等于复制延迟,这就是大促前要求延迟趋零的原因);有无脑裂(旧主复活后必须先隔离人工确认,防止双主写入);应用连接池是否自动重连。解读:演练暴露真问题——这次演练发现两台从库延迟 8 秒未达标,切换预案追加"延迟超阈值的从库不参与选主"规则。演练的价值就在这类规则的沉淀。变式:更严苛场景引入半同步复制,让选主候选集的数据零差异,代价是主库提交要等至少一个从库确认。
要点回顾:用 RTO 与 RPO 给方案定价而不是空谈百分比;切换方案三代演进,防脑裂是底线;负载均衡代理型收口、客户端型低延迟;切换演练每季度至少一次,规则从演练里长出来。架构层到此齐备,第 7 章进入让这套体系长期健康运行的运维面。
高可用方案的价值,只有在真正切过一次之后才成立。下面是一套演练记录(以一主两从 + 自动切换组件为例)。
故障注入:在主库所在机器上制造网络分区,模拟主库不可达。观察三个时间点:检测耗时、决策耗时、切换后服务恢复耗时。三者相加就是实际的 RTO(恢复时间目标)。
切换动作的四个阶段:
演练中最常暴露的三个问题:
演练收尾要留下的三件东西:一次完整的耗时记录(各阶段 RTO 明细)、一份问题清单与修复排期、以及下一次演练的时间。高可用的成熟度不取决于方案文档写得多漂亮,而取决于演练次数与最近一次演练距今多久。
容量层面的另一半是负载均衡:读流量按权重分配,权重依据从库规格设定;从库健康检查失败即自动摘除,恢复后先小流量预热再全量加回——预热的目的是让缓冲池重新加载热数据,避免刚加回就被打垮。