3. 故障域概念:故障域的定义、物理故障域与逻辑故障域
故障域(Failure Domain)是分布式系统与数据中心架构中最基础的容错边界概念。它定义了一组共享同一单点故障(Single Point of Failure, SPOF)的组件集合——当该边界内的某个关键资源(如电源、网络交换机、机架顶部交换机)失效时,边界内的所有工作负载将同时受到影响。理解故障域是进行容量规划、资源预留与多租户隔离的前提。
3.1 故障域的定义与核心特征
| 特征 | 说明 | 容量规划意义 |
|---|---|---|
| 共享风险 | 同一故障域内的资源共享同一失效点(电源、网络、冷却) | 预留容量必须跨故障域分布,避免单域过载导致级联故障 |
| 故障半径 | 故障域越大,受影响的资源数量越多 | 小故障域(如单机架)比大故障域(如整个AZ)更容易通过冗余补偿 |
| 隔离粒度 | 从物理硬件到逻辑集群,故障域可分层嵌套 | 多租户场景下,租户工作负载应分布在最小公共故障域之外 |
| 恢复时间 | 故障域边界决定了故障隔离与恢复的范围 | 容量规划需为故障域恢复预留突发资源(Buffer) |
关键原则:故障域边界即容错边界。在容量规划中,任何单一故障域内的资源利用率不应超过 100% - (预留Buffer%),否则故障发生时将无可用容量进行故障转移。
3.2 物理故障域
物理故障域以数据中心基础设施的物理组件为边界,是故障隔离的最底层单元。常见的物理故障域包括机架、电源域和网络域。
3.2.1 机架(Rack)故障域
- 定义:同一机架内的服务器共享机架顶部交换机(ToR)、机架内PDU(电源分配单元)和物理空间。
- 典型故障场景:ToR交换机宕机、机架内PDU跳闸、机架级冷却失效。
- 容量规划要点:同一服务或租户的副本/实例应分布在至少 2 个不同机架;机架级预留容量应 ≥ 单机架最大实例数 × 实例规格。
3.2.2 电源域(Power Domain)
- 定义:由同一路UPS(不间断电源)或同一路市电供电的服务器集合。通常一个电源域覆盖多个机架。
- 典型故障场景:UPS故障、市电中断、配电柜断路器跳闸。
- 容量规划要点:关键工作负载必须配置双电源(A/B路),且A路与B路必须来自不同电源域;单电源域故障时,另一域需承载全部负载,因此单域容量需 ≥ 总负载的 100%。
3.2.3 网络域(Network Domain)
- 定义:由同一组 Spine 交换机或同一网络分区(Pod)覆盖的服务器集合。
- 典型故障场景:Spine交换机故障、光纤中断、BGP会话中断。
- 容量规划要点:东西向流量与南北向流量的故障域边界不同;跨网络域的通信需考虑带宽预留与延迟预算。
物理故障域对比表:
| 故障域类型 | 典型故障半径 | 共享资源 | 冗余策略 |
|---|---|---|---|
| 机架 | 40-80 台服务器 | ToR交换机、机架PDU | 跨机架部署实例 |
| 电源域 | 2-8 个机架 | UPS、配电柜 | A/B双路供电 |
| 网络域 | 1 个 Pod / 1 组 Spine | Spine交换机、光纤 | 多Spine冗余、ECMP |
3.3 逻辑故障域
逻辑故障域是在物理基础设施之上通过软件抽象定义的故障边界,用于在更高层次实现容错与隔离。常见的逻辑故障域包括可用区(AZ)、区域(Region)和集群(Cluster)。
3.3.1 可用区(Availability Zone, AZ)
- 定义:一个AZ由一个或多个数据中心组成,AZ之间通过低延迟光纤互联,但彼此独立供电、独立制冷、独立网络。
- 故障隔离特性:单个AZ故障不会影响其他AZ;AZ之间通常相距数十公里。
- 容量规划要点:多AZ部署时,每个AZ应预留足够的冗余容量以承载其他AZ故障时的流量转移;典型做法是 N+1 或 N+2 冗余。
3.3.2 区域(Region)
- 定义:一个Region由多个AZ组成,Region之间通过公网或专线互联,延迟较高(通常 > 10ms)。
- 故障隔离特性:Region级故障极为罕见(如大规模地震、政治事件),但一旦发生影响范围极大。
- 容量规划要点:跨Region容灾通常采用主备或双活模式;容量规划需考虑Region间带宽限制与数据同步延迟。
3.3.3 集群(Cluster)
- 定义:一组通过编排系统(如Kubernetes、Mesos)统一管理的计算节点集合。集群通常部署在单个AZ内。
- 故障隔离特性:集群级故障可能由控制平面故障、etcd集群故障或网络策略错误引发。
- 容量规划要点:多租户场景下,每个租户应分布在多个集群中;集群内需通过 Pod Anti-Affinity 规则实现节点级故障域隔离。
常见误区:将“集群”视为单一故障域。实际上,Kubernetes 集群内部仍存在节点故障域、机架故障域和AZ故障域(如果集群跨AZ)。容量规划时必须逐层分解,不能仅停留在集群层面。
3.4 物理故障域 vs 逻辑故障域:关键差异
| 对比维度 | 物理故障域 | 逻辑故障域 |
|---|---|---|
| 边界定义 | 硬件物理组件(机架、电源、网络设备) | 软件抽象(AZ、Region、集群) |
| 故障检测 | 硬件告警、电源监控、网络连通性探测 | API健康检查、心跳超时、控制平面状态 |
| 故障恢复 | 硬件更换、电源切换、网络重路由 | Pod重新调度、流量切换、集群扩容 |
| 容量规划粒度 | 以机架/电源域为单位预留物理资源 | 以AZ/集群为单位预留计算与存储配额 |
| 多租户隔离 | 通过物理机架隔离、网络ACL实现 | 通过Namespace、ResourceQuota、PodAntiAffinity实现 |
| 典型故障半径 | 数十台服务器 | 数百至数千台服务器 |
容量规划最佳实践:在物理故障域层面,确保每个机架/电源域的预留容量 ≥ 该域内最大实例规格 × 2(用于故障转移);在逻辑故障域层面,确保每个AZ的预留容量 ≥ 总容量的 1/(N+1)(N为AZ数量)。同时,通过 Pod Topology Spread Constraints 将工作负载均匀分布到所有故障域。