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)
故障切换,就是当主节点出问题后,备用节点接管业务的过程。这是双机热备的核心价值所在。
切换流程大致是这样的:
- 备用节点检测到主节点失联
- 备用节点确认主节点确实挂了(防止误判)
- 备用节点接管虚拟IP(VIP)
- 备用节点开始处理业务流量
- 原主节点恢复后,自动成为备用(或手动切回)
我曾经遇到过一个问题:切换倒是成功了,但备用机上的服务还没完全启动好,结果流量进来了,直接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 脑裂问题
说到双机热备,不得不提脑裂。这是最让人头疼的问题。
什么是脑裂? 就是两台机器都认为自己是主节点,都开始处理业务。结果数据冲突,系统崩溃。
为什么会发生脑裂?最常见的原因是心跳线断了。两台机器互相联系不上,都以为对方挂了,于是各自抢着当老大。
防止脑裂的常用手段:
- 冗余心跳: 至少两条心跳线,一条断了还有另一条
- 仲裁机制: 引入第三方设备(如交换机)做仲裁
- STONITH: Shoot The Other Node In The Head,直接断电干掉对方
我曾经在一个项目中吃过脑裂的亏。两台服务器通过一根网线做心跳,结果网线被老鼠咬断了。两台机器同时接管VIP,数据库直接崩了。从那以后,我所有的项目都强制要求双心跳线,外加一个仲裁IP。
2.7 总结一下
好了,核心概念就这些。咱们捋一捋:
- 主备模式: 一台干活,一台盯着
- Active/Standby: 热备才是王道
- 故障切换: 不是瞬间完成,要考虑窗口期
- 心跳检测: 双心跳线更靠谱
- 虚拟IP: 用户无感知的秘诀
- 脑裂: 一定要防,不然后果很严重
下一章咱们会聊VRRP协议,这是实现双机热备的核心协议。理解了今天这些概念,后面就好办了。