summary
2019-01-18 约 10:08 UTC,Elastic Cloud 在 AWS eu-west-1(爱尔兰)区域的协调层(ZooKeeper 集群)leader 出现高 CPU,导致依赖它的代理/路由层连接 ZooKeeper 不稳定;客户端库(Curator TreeCache)处理不佳,请求积压至 OOM,区域集群访问严重降级,并有约 20 分钟完全不可用。
timeline
09:35 协调层告警;10:08 代理/路由层降级;10:30 进一步恶化,12:42–13:02 区域完全不可用;工程扩容代理层并触发 ZooKeeper leader 重新选举使其稳定,13:03 恢复。
root_cause
协调层(ZooKeeper)leader 高 CPU 引发连接抖动;代理层作为 ZooKeeper 客户端用 TreeCache 缓存全量节点,连接不稳时大量刷新请求排队、重试并堆积,最终 OOM。本质是客户端缓存实现未对连接抖动做背压。
amplifiers
① 协调层单点高负载即拖垮路由层。② TreeCache 在连接不稳时雪崩式重拉,请求积压 OOM。③ 恢复需扩容+重新选举,窗口内完全不可用约 20 分钟。④ 区域级影响,跨多客户部署。
mitigation
扩容代理层吸收突增流量、手动触发 ZooKeeper leader 重新选举并稳定集群;后续改进客户端对 ZooKeeper 抖动的背压与重试上限。
lessons
协调层(ZooKeeper/etcd)必须高可用且防单点高负载;客户端缓存实现要对连接抖动做背压与重试上限,避免雪崩 OOM;关键控制面独立于数据面。
checklist
① 协调层做资源隔离与单点高负载防护。② 客户端缓存加背压与重试上限。③ ZooKeeper 连接抖动告警。④ 演练协调层恢复(重新选举/扩容)。