第1章:多副本部署概述

为什么需要多副本?

先问个问题:你的服务如果挂了一台机器,用户还能正常用吗?

如果答案是“不能”,那你遇到的就是单点故障。我在几年前带过一个金融项目,线上只部署了一个实例,数据库也是单节点。某天半夜磁盘写满,整个系统直接瘫痪,运维同事凌晨三点爬起来扩容——那滋味,真不好受。

多副本部署,说白了就是把一套服务或数据,复制成多份,分布在不同的物理机、不同的机架、甚至不同的可用区。这样任何一个副本挂了,其他副本能立刻顶上,用户无感知。

核心价值:多副本不是“奢侈”,而是“保险”。你付出的额外硬件成本,买的是业务不中断、数据不丢。

可用性与可靠性的基本概念

这两个词经常被混用,但咱们得掰扯清楚。

维度 可用性(Availability) 可靠性(Reliability)
关注点 系统“能不能用” 数据“准不准、丢没丢”
典型指标 可用时间 / 总时间(如 99.99%) 数据持久性、错误率
瓶颈 基础设施故障、网络分区 存储设备损坏、数据不一致
多副本作用 故障转移,请求切到正常节点 多副本冗余,单点故障不丢数据

举个例子:一个 Web 服务,如果后端有 3 个副本,即使挂掉 2 个,还有 1 个能处理请求——可用性高。但如果这 3 个副本用的是同一块磁盘,磁盘坏了,所有副本数据全丢——可靠性低。所以可靠性和可用性需要同时设计,缺一不可。

多副本的典型架构模式

我个人习惯把常见的模式分成三类:

  1. 主从复制(Master-Follower)——一个主节点写,多个从节点同步读。MySQL、Redis Sentinel 就是典型。
  2. 对等复制(Peer-to-Peer)——所有节点平等,可读写,通过共识算法保持一致。Cassandra、Raft 集群就是这路子。
  3. 灾备复制(Disaster Recovery)——跨数据中心、跨地域的异步复制,主要用来防地域性灾难。

你想想看:选哪种模式,取决于你对一致性、延迟、成本和运维复杂度的取舍。主从模式实现简单,但主节点挂了要手动推举;对等模式自动容错,但网络开销大。没有银弹。

我的经验:在创业早期,我建议先用主从复制,足够支撑千万级流量。等业务体量再往上走,再考虑对等复制或分片 + 多副本。步子大了容易扯着。

故障转移的核心流程

多副本部署不自动等于故障转移。你得有一套机制,在副本故障时能自动切换。一般流程如下:

  • 健康检测:心跳包、TCP 探活、HTTP 健康检查——每隔几秒发一次。
  • 故障判定:连续几次心跳超时,或者服务返回 5xx,就标记为“不可用”。
  • 仲裁与选主:如果是主从模式,剩余节点要选出新主;对等模式通常靠多数派(Quorum)来决定。
  • 流量切换:负载均衡器或 DNS 把请求导向可用节点。
  • 恢复与同步:故障节点恢复后,增量同步数据,重新加入集群。

这里最容易翻车的是“脑裂”问题——两个节点都以为自己是主,同时写数据,导致数据冲突。我之前在负责一个消息队列集群时,就因为心跳超时阈值设得太短,网络抖动触发了一遍又一遍的选主,结果多个节点同时充当主节点,消息顺序全乱了。嗯,那次教训让我学会了给故障切换加上必要的“冷静期”和“多数派判断”。

避坑指南:我曾经遇到过,健康检测只检查进程是否存在,没检查端口是否真正响应。结果进程假死、端口僵持,负载均衡还在发流量——用户全超时。所以一定要做全链路健康检查。

核心概念关系图

下面这张图能帮你把本章的知识点串起来:多副本部署是基础,目标是提升可用性与可靠性;而故障转移是实现目标的关键手段。

多副本部署与故障转移核心关系 多副本部署 可用性 (Availability) 可靠性 (Reliability) 故障转移 (Failover) 健康检测 故障裁决 流量切换 恢复同步 不同模式(主从/对等/灾备)的健康检测方式和切换策略略有差异,后续章节会逐一展开

小结:什么时候该上多副本?

我的判断标准比较简单:

  • 系统宕机超过30分钟会影响营收或用户信任——必须上。
  • 系统宕机只会造成内部同事不便,且你能在上班时间修复——可以不上,但最好还是上。
  • 数据丢了就无法恢复(比如没有备份)——必须多副本+跨地域备份。

最后留个思考题:如果让你设计一个只有两台机器的集群,怎么保证其中一台挂了之后服务不中断?下节课我们会动手搭一套主从复制环境,到时候你就知道答案了。

本章重点:记住“多副本解决的是可用性和可靠性”,故障转移是“检测 → 裁决 → 切换 → 恢复”四步走。后面的内容都建立在这个基础之上。