2、双机热备核心概念:主备模式、Active/Standby、故障切换、心跳检测、虚拟IP(VIP)

好,咱们正式开始聊双机热备的核心概念。说实话,很多刚入行的朋友一听到「主备模式」、「心跳检测」这些词,就觉得特别高大上。其实说白了,就是两台机器搭伙过日子,一台干活,一台盯着,出事了立马顶上。

我这些年做过的项目里,双机热备的坑踩了不少。今天就把这些核心概念掰开了揉碎了讲给你听。你想想看,理解了这些,后面配置Keepalived、VRRP什么的,就顺理成章了。

2.1 主备模式(Active/Standby)

主备模式,也叫Active/Standby。这是最经典、最稳妥的一种冗余设计。

核心思想: 一台机器干活(主),另一台机器闲着(备)。主节点挂了,备节点立刻顶上。

我个人习惯把这种模式比作「替补队员」。主力队员在场上打比赛,替补坐在板凳上。主力受伤了,替补才上场。嗯,就是这么个道理。

关键特征:

  • 同一时刻,只有一台设备处理业务流量
  • 备用设备保持同步状态,但不处理请求
  • 故障切换时,备用设备接管所有业务

我在项目中遇到过一种情况:客户非要让两台机器同时干活,说这样不浪费资源。结果呢?两台机器同时处理同一个VIP的流量,数据乱得一塌糊涂。后来老老实实改回主备模式,世界清净了。

2.2 Active/Standby 的两种形态

这里要区分一下,Active/Standby其实有两种玩法:

形态 说明 适用场景
冷备(Cold Standby) 备用机完全关机或待机,不运行任何服务 对切换时间要求不高的场景
热备(Hot Standby) 备用机开机运行,服务已启动,随时准备接管 对高可用要求严格的场景

说白了,冷备就是替补还在更衣室换衣服,热备就是替补已经在场边热身了。咱们做双机热备,绝大多数情况都是热备。为什么?因为冷备切换太慢了,等你把机器开起来,用户早就骂娘了。

2.3 故障切换(Failover)

故障切换,就是当主节点出问题后,备用节点接管业务的过程。这是双机热备的核心价值所在。

切换流程大致是这样的:

  1. 备用节点检测到主节点失联
  2. 备用节点确认主节点确实挂了(防止误判)
  3. 备用节点接管虚拟IP(VIP)
  4. 备用节点开始处理业务流量
  5. 原主节点恢复后,自动成为备用(或手动切回)

我曾经遇到过一个问题:切换倒是成功了,但备用机上的服务还没完全启动好,结果流量进来了,直接502。所以啊,我建议你在切换脚本里加个健康检查,确认服务就绪了再接管VIP。

注意: 故障切换不是瞬间完成的。从检测到故障到接管完成,通常需要几秒到几十秒。这期间业务会中断。设计时一定要考虑这个窗口期。

2.4 心跳检测(Heartbeat)

心跳检测,是双机热备的「眼睛」和「耳朵」。两台机器之间通过心跳线互相发送「我还活着」的信号。

心跳检测的方式有很多种:

  • 串口心跳: 用RS-232线直连,最可靠,但距离有限
  • 以太网心跳: 通过网络通信,最常用
  • 磁盘心跳: 通过共享存储,防止脑裂

我个人习惯用双心跳线。一条网线,一条串口线。为什么?因为网线断了的情况我遇到过,串口线作为备份,能避免误判。

心跳检测的几个关键参数:

参数 说明 建议值
心跳间隔 每次发送心跳的时间间隔 1-2秒
超时次数 连续几次未收到心跳判定为故障 3-5次
切换延迟 判定故障后等待多久再切换 0-5秒

你想想看,如果心跳间隔设成10秒,超时次数设成3次,那检测到故障至少需要30秒。这30秒里业务全挂,用户早跑光了。所以心跳间隔要短,但也不能太短,否则网络抖动就会导致频繁切换。

2.5 虚拟IP(VIP)

虚拟IP,这是双机热备里最巧妙的设计。说白了,就是给用户一个固定的IP地址,不管背后是哪台机器在干活,用户都访问这个IP。

VIP的工作原理:

  • 正常情况下,VIP绑定在主节点上
  • 主节点挂了,VIP漂移到备用节点上
  • 用户始终访问同一个IP,完全感知不到后端的变化

小技巧: 配置VIP时,建议不要和物理IP在同一个网段。比如物理IP是192.168.1.10/24,VIP可以设成192.168.1.100/24。这样方便区分,也便于排错。

我记得有一次,客户说他们的VIP总是不通。我上去一看,好家伙,VIP配的掩码是32位,广播地址都不对。改回24位掩码,问题立刻解决。嗯,这种细节最容易忽略。

2.6 脑裂问题

说到双机热备,不得不提脑裂。这是最让人头疼的问题。

什么是脑裂? 就是两台机器都认为自己是主节点,都开始处理业务。结果数据冲突,系统崩溃。

为什么会发生脑裂?最常见的原因是心跳线断了。两台机器互相联系不上,都以为对方挂了,于是各自抢着当老大。

防止脑裂的常用手段:

  1. 冗余心跳: 至少两条心跳线,一条断了还有另一条
  2. 仲裁机制: 引入第三方设备(如交换机)做仲裁
  3. STONITH: Shoot The Other Node In The Head,直接断电干掉对方

我曾经在一个项目中吃过脑裂的亏。两台服务器通过一根网线做心跳,结果网线被老鼠咬断了。两台机器同时接管VIP,数据库直接崩了。从那以后,我所有的项目都强制要求双心跳线,外加一个仲裁IP。

2.7 总结一下

好了,核心概念就这些。咱们捋一捋:

  • 主备模式: 一台干活,一台盯着
  • Active/Standby: 热备才是王道
  • 故障切换: 不是瞬间完成,要考虑窗口期
  • 心跳检测: 双心跳线更靠谱
  • 虚拟IP: 用户无感知的秘诀
  • 脑裂: 一定要防,不然后果很严重

下一章咱们会聊VRRP协议,这是实现双机热备的核心协议。理解了今天这些概念,后面就好办了。