3、故障域定义与分类:物理故障域(机房/机架)、逻辑故障域(etcd成员/租户)、故障隔离边界
在分布式系统与多租户架构中,故障域(Failure Domain)是描述系统组件在发生故障时受影响范围的核心概念。定义清晰的故障域是设计高可用架构、制定迁移策略和进行恢复演练的基础。本章将故障域划分为物理故障域与逻辑故障域,并明确其隔离边界。
3.1 物理故障域
物理故障域指由硬件、基础设施或物理环境边界定义的故障影响范围。在集群升级场景中,物理故障域的划分直接决定了资源冗余策略和迁移优先级。
| 故障域层级 | 定义 | 典型故障场景 | 影响范围 |
|---|---|---|---|
| 机房级 | 整个数据中心或机房因电力、网络、制冷中断而不可用 | 市电断电、骨干网中断、火灾 | 该机房内所有服务器、存储、网络设备 |
| 机架级 | 同一机架内的服务器共享电源分配单元(PDU)和接入交换机 | PDU跳闸、ToR交换机故障 | 该机架内所有节点 |
| 节点级 | 单台物理服务器或虚拟机 | 磁盘损坏、内存故障、内核Panic | 该节点上的所有Pod和进程 |
实践要点:在etcd集群部署时,应确保etcd成员分布在至少3个不同的机架级故障域中。若条件允许,跨机房部署可进一步提升容灾能力,但需评估网络延迟对etcd写入性能的影响(通常RTT应小于10ms)。
3.2 逻辑故障域
逻辑故障域由软件架构、数据分区或服务边界定义,与物理位置无直接关联。在etcd故障与多租户迁移场景中,逻辑故障域的划分决定了数据一致性的保护范围和迁移操作的原子性边界。
| 故障域层级 | 定义 | 典型故障场景 | 影响范围 |
|---|---|---|---|
| etcd成员级 | 单个etcd节点实例,参与Raft共识协议 | etcd进程崩溃、磁盘IO hang、网络分区 | 该成员上的数据分片,集群进入降级模式 |
| etcd集群级 | 一组etcd成员组成的Raft组,提供强一致性KV存储 | 多数成员故障(quorum丢失) | 所有依赖该etcd集群的服务无法读写 |
| 租户级 | 逻辑租户在etcd中的key空间划分(如前缀隔离) | 租户数据损坏、租户级限流、租户迁移 | 该租户下的所有微服务和数据 |
| 服务级 | 单个微服务或应用实例 | 服务崩溃、配置错误、依赖超时 | 该服务实例及其下游调用 |
关键风险:逻辑故障域与物理故障域之间不存在一一对应关系。例如,一个etcd集群的3个成员可能分布在3个不同的机架上(物理隔离),但若Raft quorum丢失,整个集群级故障域将不可用。在迁移演练中,必须同时考虑两种故障域的叠加效应。
3.3 故障隔离边界
故障隔离边界定义了故障传播的终止点,是设计弹性系统和制定迁移恢复策略的核心依据。在etcd故障下进行多租户迁移时,必须明确以下隔离边界:
- 进程边界:etcd进程崩溃不应导致宿主机上其他进程(如kubelet、监控agent)失效。通过cgroup和命名空间实现资源隔离。
- 存储边界:etcd数据目录的磁盘故障不应影响同一节点上其他组件的持久化数据。建议使用独立磁盘或LVM卷隔离。
- 网络边界:etcd集群内部通信(Raft端口2380)与客户端通信(端口2379)应使用不同的网络策略和防火墙规则,防止客户端流量异常影响Raft心跳。
- 租户边界:不同租户的key空间通过前缀隔离,但底层共享同一个etcd存储引擎。租户A的写放大(如大量watch请求)不应导致租户B的读写延迟飙升。可通过租户级限流和请求优先级队列实现。
- 升级边界:滚动升级过程中,应确保同一时间只有一个etcd成员处于升级状态,且升级操作不跨越租户迁移的原子操作边界。
迁移恢复演练设计原则:在制定演练场景时,应选择单一故障域作为注入点(如模拟一个机架断电),并验证故障是否被成功隔离在预期边界内。若发现故障跨越了隔离边界(如租户A的故障导致租户B的服务中断),则说明隔离策略存在缺陷,需要优先修复。
3.4 故障域分类总结
| 分类维度 | 故障域类型 | 隔离粒度 | 迁移恢复策略 |
|---|---|---|---|
| 物理 | 机房级 | 粗粒度 | 跨机房容灾、DNS流量切换 |
| 机架级 | 中粒度 | etcd成员反亲和部署、Pod拓扑约束 | |
| 逻辑 | etcd成员级 | 中粒度 | Raft自动选主、成员替换 |
| etcd集群级 | 粗粒度 | 备份恢复、集群重建 | |
| 租户级 | 细粒度 | 租户数据导出/导入、key前缀迁移 |