2. 常见故障域类型

故障域(Failure Domain)是集群中可能因单一故障点而同时失效的资源集合。划分故障域的核心目的是将冗余副本或任务分散到相互独立的故障域中,从而避免单点故障导致整个服务不可用。以下是生产环境中最常见的六类故障域,按物理范围从小到大排列。

2.1 故障域层级总览

下表对比了各故障域的典型范围、常见故障场景及在集群中的隔离策略:

故障域类型 物理范围 典型故障场景 隔离策略
物理服务器 单台主机 电源故障、主板损坏、内存ECC错误、磁盘损坏 副本跨主机、反亲和性调度
机架 单个机柜 ToR交换机故障、机架PDU跳闸、机架级断电 副本跨机架、机架感知调度
数据中心 单栋建筑/楼层 空调失效、火灾、市电中断、网络核心故障 副本跨数据中心、异地多活
区域 地理区域(城市/省份) 地震、洪水、大规模电网瘫痪 副本跨区域、两地三中心
云可用区 云服务商独立设施 AZ内网络分区、虚拟化集群故障 副本跨可用区、AZ亲和性/反亲和性

2.2 物理服务器故障域

物理服务器是最小粒度的故障域。一台服务器包含CPU、内存、磁盘、网卡、电源等组件,任何关键组件失效都可能导致整机不可用。在Kubernetes或Mesos等调度系统中,通常将每台物理服务器视为一个独立的故障域,并通过Pod反亲和性或主机组打散策略确保同一服务的多个副本不会调度到同一台服务器上。

关键指标: 单台物理服务器的年故障率(AFR)通常在1%~5%之间。对于1000台规模的集群,每天平均有1~3台服务器发生硬件故障。

2.3 机架故障域

机架(Rack)是比服务器高一级的故障域。同一机架内的服务器共享ToR(Top of Rack)交换机、机架PDU(Power Distribution Unit)和物理布线。一旦ToR交换机宕机或机架PDU跳闸,该机架内的所有服务器将同时失去网络或电力。机架故障域划分要求将服务的冗余副本分布到至少两个不同的机架上。

实践建议: 在机架部署时,为每个机架分配唯一的故障域标签(如 rack=rack-01),并在调度策略中强制要求副本分布在至少2个不同的机架标签上。

2.4 数据中心故障域

数据中心(Data Center)故障域涵盖整栋建筑或独立楼层。常见的故障场景包括:

  • 电力中断: 市电输入故障 + UPS后备耗尽 + 发电机未能启动
  • 制冷失效: 精密空调故障导致机房温度超过45°C,触发服务器自动关机
  • 网络核心故障: 数据中心核心交换机或汇聚交换机宕机
  • 火灾/水患: 消防系统启动导致强制断电,或水管爆裂损坏设备

跨数据中心部署是保障业务连续性的基础手段。典型架构包括主备模式(Active-Standby)和双活模式(Active-Active)。

2.5 区域故障域

区域(Region)故障域覆盖更大的地理范围,通常对应一个城市或省份。区域级故障通常由自然灾害(地震、洪水、台风)或大规模基础设施事故(电网瘫痪、骨干网中断)引发。跨区域部署是最高级别的容灾手段,但会引入更高的网络延迟(通常RTT > 10ms)和数据同步成本。

风险提示: 跨区域复制必须考虑网络带宽限制和异步复制带来的数据不一致窗口。在极端情况下,区域故障可能导致整个Region的数据丢失,因此需要结合RPO/RTO目标设计备份和恢复策略。

2.6 云可用区故障域

在公有云环境中,可用区(Availability Zone, AZ)是云服务商提供的最核心故障域。每个AZ由独立的数据中心或数据中心集群构成,拥有独立的电力、网络和制冷系统。同一Region内的多个AZ之间通过低延迟光纤互联(通常RTT < 2ms)。

云原生架构的最佳实践是将应用副本分布到至少3个可用区,以实现AZ级容错。Kubernetes的topologySpreadConstraints和云服务商提供的availability-zone标签可用于实现跨AZ的Pod分布。

2.7 故障域层次结构图

下图展示了从物理服务器到区域故障域的层次关系,以及各层级之间的包含关系:

故障域层次结构 区域故障域(Region) 数据中心故障域(DC) 机架 01 机架 02 机架 03 服务器 A1 服务器 A2 服务器 A3 服务器 B1 服务器 B2 服务器 B3 服务器 C1 服务器 C2 服务器 C3 云可用区(AZ)— 独立电力/网络/制冷设施 物理服务器 机架 数据中心 区域 云可用区

2.8 云可用区与物理故障域的映射关系

在混合云或多云架构中,需要理解云可用区与物理故障域的对应关系。下图展示了同一Region内3个可用区的逻辑拓扑,以及每个AZ内部包含的物理机架和服务器:

云可用区与物理故障域映射 Region(区域) 可用区 AZ-1 机架 R1-A ~ R1-D 物理服务器 × 80 物理服务器 × 80 独立电力 / 网络 / 制冷 可用区 AZ-2 机架 R2-A ~ R2-D 物理服务器 × 80 物理服务器 × 80 独立电力 / 网络 / 制冷 可用区 AZ-3 机架 R3-A ~ R3-D 物理服务器 × 80 物理服务器 × 80 独立电力 / 网络 / 制冷 低延迟光纤 低延迟光纤 可用区 机架组 物理服务器 基础设施

2.9 故障域划分的核心原则

  1. 共享风险分组: 将共享同一电源、网络设备或物理位置的资源归入同一故障域。
  2. 最小化故障半径: 每个故障域应尽可能小,避免一个故障影响过多副本。
  3. 冗余副本隔离: 服务的N个副本必须分布在N个不同的故障域中(N ≥ 2)。
  4. 层次化打散: 在多个层级同时做反亲和性,例如跨机架 + 跨数据中心。
  5. 动态感知: 调度系统应能实时感知故障域拓扑变化(如机架下线、AZ故障)。
最佳实践: 在Kubernetes中,使用 topology.kubernetes.io/zone 和 topology.kubernetes.io/region 标签标记节点,并通过 topologySpreadConstraints 实现跨故障域的Pod分布。对于物理机环境,建议在CMDB中维护机架和DC的层级关系,并通过自定义调度器扩展实现机架感知。