首页 > 数据库 > 国内数据库 > 双机热备的工作原理:服务器是如何实现"自动续命"的
很多运维人员的心态是:双机热备软件装好了,心跳配通了,状态显示"正常",就可以松一口气了。但真正出事时,配置里的每一个细节都可能决定切换是成功还是失败——心跳间隔设得太激进,网络一抖动就误切换;脑裂防护没配好,两台机器同时写一份数据,文件系统直接损坏;数据同步方式选错了,切换过去发现数据对不上,业务根本起不来。
双机热备不是装完就忘的保险,它是一套需要精心调教的机制。下面把心跳检测、脑裂防护、数据同步这三个核心环节的原理和常见陷阱,逐一拆开讲清楚。
双机热备的底层依赖是心跳机制。两台服务器之间建立一条或多条专用网络通道,持续互相发送极小的数据包 ——这就是"心跳"。它的作用只有一个:告诉对方"我还在运行"。
备机持续监听来自主机的心跳信号。如果在预设的时间窗口内连续收不到心跳,备机就会判定主机发生了故障,随即启动切换流程:接管主机的虚拟IP地址、启动应用服务进程、挂载存储资源。从检测到故障到业务恢复,通常只需要几秒到几十秒。
听起来不复杂,但实际调优时有两个关键点直接影响切换的可靠性。
心跳频率和超时阈值的权衡。 以RoseHA为例,常见的生产环境配置是每秒发送一次心跳包,连续丢失5次才触发故障判定,大约5秒钟确认主机失联。这个阈值不是越小越好——如果把频率调得太高、阈值设得太低,网络稍微出现拥塞或延迟抖动,就可能误判主机宕机,触发一次不必要的切换。而切换本身是有代价的:VIP漂移会导致现有连接中断,数据库服务重启会让正在执行的查询失败,频繁的误切换反而降低了系统的整体可用性。
反过来,阈值设得太宽松也有问题。如果连续丢20次心跳才判定故障,意味着要等20秒才能确认主机出了问题。生产环境的经验值是:心跳间隔1秒,连续丢失5次触发切换判断,在灵敏度和抗抖动之间取得平衡。
心跳通道的冗余 是另一个容易被忽略的点。如果两台服务器之间只有一条心跳链路 ——比如只走业务网的一张网卡——那么这张网卡、这根网线、这个交换机端口,任何一个环节出问题,都会导致心跳中断,进而触发备机误判主机故障。
靠谱的部署方式是至少配置两条独立的心跳通道。第一条走业务网络(以太网),第二条走独立的直连线路(可以用另一张网卡做点对点连接),或者走串口线。只有两条通道同时中断,备机才判定主机故障,单条链路故障不会引发误切换。更完善的方案还会配置第三条"磁盘心跳"——两台机器同时往共享存储的特定区域写入时间戳标记,通过读取对方的标记来判断存活状态。这种方式不依赖网络,作为网络心跳失效时的兜底手段。
心跳检测有一个无法回避的困境:它只能通过"收不到信号"来推断对方故障,但"收不到"的原因不一定是对方真的死了,也可能是网络出了问题。
最典型的场景是 主机假死 。主机的操作系统内核因为某种原因卡住了 ——比如驱动bug导致的内核死锁——但CPU还在运转,心跳进程照样能发包。备机接收心跳正常,不会触发切换。但对外部用户来说,主机已经不响应任何业务请求了。业务就这么僵持着,双机热备系统觉得一切正常,实际上服务已经不可用。
更危险的情况是 网络分区导致的脑裂 。主备服务器之间的网络连接突然中断 ——比如交换机故障、网线被拔掉、路由配置错误——但两台服务器本身都运行正常。备机收不到心跳,按照规则判定主机挂了,于是把自己升级为主节点,开始接管IP地址和服务。主机那边其实也没死,它继续认为自己还是主节点。结果是两台服务器同时以主节点的身份运行,都认为自己是合法的——这就是"脑裂"(Split-Brain)。
脑裂的后果可以很致命。如果两台服务器同时往同一个共享存储卷写入数据,文件系统的元数据会被写乱,数据文件可能同时被两个进程修改,最终导致数据损坏。这种损坏往往难以修复,最后只能从备份恢复,损失数小时甚至数天的数据。
业界应对脑裂主要依赖两类机制:
仲裁机制 引入第三个节点作为"裁判"。主备之间通信正常时,仲裁节点只是旁观。一旦主备之间的直连网络中断,两边都尝试联系仲裁节点请求裁决。仲裁节点根据预设规则(比如"谁先到谁赢"或者"主机优先")判定哪一方继续提供服务,另一方则主动降级或隔离自己。仲裁节点不需要高性能硬件,甚至可以是一台云上的最低配虚拟机,只要网络可达、能响应投票请求即可。部署成本一年不过几百块,但关键时刻能避免数据灾难。
强制隔离机制 走的是另一条路。备机在决定接管之前,先通过服务器的硬件管理接口 ——比如IPMI、iLO、iDRAC等——向主机发送强制断电或强制关机的指令,确保主机彻底停止运行,然后再接管资源。这个思路的核心是"宁可让一台机器强行下线,也不能让两台机器同时写一份数据"。
相比脑裂造成的数据库文件损坏、文件系统元数据错乱,一次强制断电的代价要小得多。当前主流的服务器和存储阵列都配备了掉电保护机制,能在断电瞬间把缓存中的数据刷入持久存储,不会因为一次强制关机而丢失数据。
配置强制隔离时有两个实操要点需要注意:第一,管理接口的账号密码必须在部署前实测连通,确保备机在需要时能真正访问到主机的管理口;第二,管理网络必须独立于业务网络和心跳网络,否则业务网络一断,管理接口也连不上,隔离机制就失效了。
条件允许的情况下,建议仲裁机制和强制隔离机制同时配置,形成双重防护。仲裁机制解决"谁该继续服务"的判定问题,强制隔离机制解决"失败的节点必须彻底下线"的执行问题,两者互补。
检测到故障、完成仲裁、执行隔离 ——这三步解决了"谁来接管"的问题。但接管之后,备机上的数据必须与主机一致,否则业务恢复也是空谈。数据同步是双机热备的第三个核心环节,主流方案有两类。
共享存储方案 的思路是:数据不放在服务器本地硬盘里,而是放在两台服务器都能访问的独立存储设备上 ——通常是SAN(存储区域网络)或NAS(网络附加存储)。主机写入的数据直接落到共享存储里,备机接管后看到的还是同一份数据,不存在同步延迟和副本不一致的问题。
以金融行业的典型部署为例,使用光纤通道(FC)SAN作为共享存储的双机热备,切换过程非常顺畅:备机接管VIP,确认共享LUN的挂载状态,启动数据库实例,整个过程通常在10秒以内完成。数据自始至终只有一份,切换前后完全一致,RPO基本为零。
共享存储的代价是硬件成本。一台入门级的企业级SAN存储,采购价通常在十几万到几十万不等,还需要配置专用的光纤交换机和HBA卡。对于已经有存储基础设施的企业来说,这是自然的选择;但对于预算有限的中小企业,专门为了双机热备去买一台磁盘阵列,投入产出比未必划算。
镜像复制方案 是另一个选择。两台服务器各自配备独立的本地硬盘,主机上的数据发生变化时,通过网络实时复制到备机的硬盘上。不需要采购专用存储设备,两台普通服务器加千兆网络就能跑起来,硬件成本直接降一大截。
镜像方案适合预算紧张、但又不能接受冷备那种小时级恢复时间的场景。两台标准的2U机架服务器,千兆以太网直连,数据同步延迟通常在百毫秒到秒级之间,对于一般的ERP系统、OA系统、内部管理平台来说,这个延迟完全在可接受范围内。
但镜像方案有一个部署阶段必须注意的坑:初始全量同步。一个2TB的数据库第一次做镜像复制时,需要把主机的全部数据通过网络复制到备机。在千兆网络下,这个过程可能需要6到10个小时。在初始同步完成之前,如果主机发生故障,备机上的数据是不完整的,无法接管业务。所以镜像方案上线前,一定要等初始同步跑完、状态显示为"同步完成",再正式把业务切进来。
镜像复制还分同步和异步两种模式。同步镜像要求主机每次写入操作都必须等备机确认接收成功后,才向应用返回写入完成。这种方式数据零丢失,RPO为零,但代价是写入延迟增加——每一笔写操作都要等网络往返。异步镜像则主机写入后立即返回,备机异步接收数据,性能影响小得多,但存在极端情况下丢失最后几秒数据的风险。对于绝大多数中小企业的业务场景,异步镜像的性能和可靠性已经够用;只有金融交易、证券核心账务这类对每一笔数据都不能丢的场景,才值得为同步镜像付出性能代价。
一次典型的双机热备自动切换,在软件控制下按以下顺序执行:
1. 故障检测 :备机通过心跳机制发现主机在超时窗口内无响应,耗时约3到5秒。
2. 仲裁判定 (如配置了仲裁节点):备机向仲裁节点申请裁决,确认主机确实不可用,排除网络分区导致的误判。
3. 强制隔离 (如配置了硬件管理接口):备机通过IPMI/iLO/iDRAC等接口向主机发送强制关机指令,确保失败的节点彻底停止运行。
4. 资源接管 :备机将虚拟IP地址绑定到自身网卡,挂载共享存储卷(或确认镜像数据已同步完整)。VIP漂移通常在1到2秒内完成。
5. 服务启动 :备机上依次启动应用服务进程,数据库实例启动通常需要10到30秒。
6. 状态确认 :备机确认所有资源已正常接管,进入稳定运行状态。
整个过程从检测到业务恢复,实际耗时通常在15秒到1分钟之间。切换完成后不要看到"服务已启动"就认为万事大吉,应手动检查数据库连接池、缓存预热、定时任务等关键点。
预算充足、已有存储基础设施的环境 ——优先选择共享存储方案。切换速度快,数据一致性强,运维简单,不存在镜像延迟带来的数据缺口问题。主流的双机热备软件都支持共享存储模式。敦阳泰克的RoseHA面向共享存储架构,RoseMirrorHA则专注于镜像复制模式,企业可以根据现有基础设施灵活选择。
希望控制硬件成本、不想采购磁盘阵列的中小企业 ——镜像方案更合适。省了存储设备的投入,部署也更灵活,两台普通服务器就能搭建完整的高可用环境。
对数据一致性要求极高的行业 (如金融、医疗核心系统) ——要么用共享存储,要么用同步镜像。不要用异步方案,因为这些行业承受不起任何数据丢失的风险。
无论选哪种方案,部署完成后务必做一次真实的切换演练。很多环境装完双机热备软件就再也没切过,配置文件里的错误、权限设置的问题、资源依赖的遗漏,只有在真实切换中才会暴露。别让高可用方案变成"假可用"。
参考:GB/T 20988灾备等级标准、主流双机热备软件技术文档。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70049680/viewspace-3181536/ ,如需转载,请注明出处,否则将追究法律责任。