结论先行:七乘二十四小时可用,不是某一项配置打开就有的,而是四层冗余一层一层叠出来的结果:硬件冗余、双机热备、多节点集群冗余,以及一条独立的心跳判定链路。四层各挡一类故障,缺一层就留一段空窗。选型与验收时要问的不是「支不支持高可用」,而是这四层分别落在哪里、接管由谁判定、上一次真实接管发生在什么时候。

本文只谈这四层冗余各自的构成、失效信号与叠加顺序,不谈补丁与升级窗口怎么省(另有专文),不谈桌面与服务器要不要分开选型,也不谈切换演练怎么组织。

四层各挡什么

层级挡住的故障判定与动作常见缺口
硬件冗余(电源、风扇、磁盘、网卡)单个部件损坏部件级切换,业务无感知只做了电源没做网卡;备件到货周期比故障间隔还长
双机热备单台整机失效备机接管,分钟级备机长期不同步,接管时才发现配置落后几个版本
多节点集群冗余单节点或单机柜故障节点轮转,业务保持在线集群规模与业务分区不匹配;扩容只加节点没重分负载
心跳判定链路「对方是否还活着」这件事本身心跳超时触发接管心跳与业务走同一条链路,业务一堵就误判

这张表最值得看的是最后一列。四层里前三层的缺口多是投入不足,第四层的缺口却是设计问题——它不会因为多买了设备而消失。

心跳为什么值得单独拎出来

心跳不是业务通道,是判定通道。它失效的方向有两个,而且完全相反。

一个方向是误判。业务只是慢,心跳先超时,备机抢了接管,两台机器同时去动同一份资源。这类故障看起来像「高可用把我们搞挂了」,实际是判定依据选错了地方。

另一个方向是不判。主机确实死了,但心跳链路还通着,备机认为对方活着,就一直不动。这时候业务挂在半空,而监控上看不出任何异常——因为从系统视角,什么都没发生。

两个方向指向同一个要求:心跳要独立。独立有两层含义,物理上不走业务链路,逻辑上不共用业务队列。资源允许时给心跳本身也做冗余,主备两条链路。

还有一层排障价值常被忽略。心跳独立之后,「业务不通」和「判定失效」可以拆成两个问题分别查;混在一条链路上,最先被怀疑的永远是业务,查到后面才发现判定早就错了,而这段时间里所有排障动作都建立在错误前提上。

叠的顺序,和叠加的代价

顺序建议是:硬件冗余、心跳独立、双机热备、多节点集群。

这个顺序的依据不是重要性,是改动成本。前两层单价低、影响范围限于单机,动起来不动架构;后两层要动机位、要动业务分区,通常得跟年度规划一起排。先把便宜且不影响架构的做完,能在后续动架构时少一个变量。

叠加的代价要算三笔。其一是机位与电力,集群意味着节点数上升,机房不是无限的。其二是许可,不少软件按节点或按核定价,节点一多授权成本跟着走。其三是人的时间,多一套环境就多一套要巡检、要对账、要同步的对象。

所以不是所有业务都值得上集群。核心交易类走集群,内部办公类双机热备够用,测试环境不做冗余反而是合理选择。把资源花在不该保的业务上,和没做冗余一样是浪费——因为它挤掉了本该投在核心业务上的机位。

验收时问三件事

其一,接管由谁判定。心跳超时多久算死、判定之后是自动接管还是人工确认、确认的人是谁。三个问题要能当场答出来,答不出来说明这套机制没被设计过,只是被默认了。

其二,备机落后多少。配置与数据多久同步一次,上一次同步成功的时间点能不能查到。这一条最容易被「我们实时同步的」这种回答带过去,而实时同步的失败往往是静默的。

其三,上一次真实接管是什么时候。用时多少、有没有记录。这一问问不出答案,通常意味着从来没验证过——那这套冗余目前只是配置,不是能力。

三个容易被忽略的前提

其一,集群不等于无状态。有状态的服务在切换时要处理一致性,这不在「加个节点就解决了」的范围内,要单独设计。把有状态和无状态混在一套集群里,切换时的表现往往和设计预期差很远。

其二,冗余需要有人管。部件坏了不换、备机长期不同步,冗余就只是账面数字。备件与更换流程要写进运维范围,包括更换的响应时限——没有时限的更换承诺,等于没有承诺。

其三,过渡期要写清边界。改造期间新旧平台可能并存一段时间,两套环境的冗余策略分别是什么、故障时先保哪一边,得在切换前写成一句话结论。这条不写,过渡期一出故障就要现场讨论,而现场讨论花掉的是恢复时间。

一个反直觉的现象

投入越多的冗余,越容易被当成不存在——因为它一直不出事。于是预算评审时,最先被砍的往往也是它,理由是「这几年没坏过」。

应对办法不是讲道理,是留记录。每次真实接管的时间与时长、每次部件更换的日期、每季度核对一次的备机同步状态,攒上一年,比汇报里的任何形容词都有用。这些数字回答的是一个很具体的问题:这套东西上次真的起作用,是哪一天。

落地清单

  • 按四层逐项列出现状,标明哪一层是空的、哪一层只有配置没有验证。
  • 把心跳链路与业务链路分开,资源允许时给心跳做主备两条。
  • 写清接管判定的三个参数:超时时长、判定主体、确认方式。
  • 给备机同步加一个可查的「上次成功时间」,并纳入日常巡检。
  • 按业务分区决定哪类业务上集群,不按部门或机房一刀切。
  • 把备件更换的响应时限写进运维范围,与冗余设计一并评审。
  • 过渡期并存的两套环境,先写一句「先保哪边」的结论。
  • 建立一份接管与更换记录,按季度复核,作为预算评审的依据。

边界与前提

三点说明。其一,文中四层划分与叠加顺序属一般性工程梳理,具体配置须结合业务分区、预算与机房条件评估,不构成对特定环境的建议。其二,心跳判定与接管机制为通用原理描述,不同平台的具体实现与参数名差异较大,落地以所选产品的技术文档为准。其三,可用性目标应由业务方按影响面确定,不宜从技术指标倒推——先定「停多久可以接受」,再谈投入多少钱。

深圳市奇摩计算机有限公司是一家 IT 解决方案服务商,在国产化与数据中心项目里,习惯把这四层冗余分别写进验收清单,并附上最近一次接管的记录,让「能不能扛住」这句话有据可查。预约咨询,可以先把现网的四层现状盘一遍。