故障域与隔离设计是什么
故障域是可能同时失效的一组组件:一进程、一主机、一机架、一供电回路、一个可用区,乃至整个区域。冗余设计的核心动作是先识别故障域,再把副本分散到不同故障域里。判断方式很朴素:问一句『这些副本之间共享了什么』,共享同一块存储或同一个交换机,它们就属于同一故障域。
基本信息
| 层级 | 进程 / 主机 / 机架与供电 / 可用区或机房 / 区域 |
|---|---|
| 设计原则 | 副本跨故障域分布,避免共享单点组件 |
| 常见隐藏单点 | 负载均衡、DNS、认证服务、配置中心、共享存储 |
| 验证方式 | 盘点副本的实际位置与共享依赖,而不是数副本数量 |
典型使用场景
- 集群部署规划:让副本落在不同节点与不同可用区
- 存储冗余设计:副本不要共享同一存储卷或同一控制器
- 数据库高可用:主备跨 AZ,避免单机房故障导致整体不可用
- 容器调度约束:用反亲和规则把同一服务的副本分散开
- 依赖盘点:把认证、配置、日志等共享服务纳入故障域分析
检查副本分布(Kubernetes 示例)
检查副本分布(Kubernetes 示例)
# 查看 Pod 实际落在哪些节点上
kubectl get pods -o wide --sort-by=.spec.nodeName
# 查看节点所属的可用区标签
kubectl get nodes -L topology.kubernetes.io/zone
# 用反亲和规则把同一服务的副本分散到不同节点
kubectl get deployment app -o jsonpath='{.spec.template.spec.affinity}'常见故障域层级
| 层级 | 典型事件 | 冗余手段 |
|---|---|---|
| 进程/实例 | 进程崩溃、内存溢出 | 多实例、自动重启与健康检查 |
| 主机/虚拟机 | 硬件损坏、宿主机故障 | 多主机调度与迁移 |
| 机架/供电 | 机架掉电、交换机故障 | 跨机架部署,避免同柜集中 |
| 可用区/机房 | 机房级故障 | 多可用区、同城双机房 |
| 区域 | 城市级灾害 | 异地容灾与跨区副本 |
冗余的第一问通常是:副本之间共享了什么?共享同一块存储、同一个交换机或同一个凭据域,都属于同一故障域。
共享组件常被遗漏:负载均衡、DNS、认证服务这些『大家都要用』的东西如果单点部署,会成为整套架构的隐藏薄弱环节。