Cases2 cases
1 to 2 of 2
IL-0277Patching Elastic Cloud's ZooKeeper ensemble in us-east-1 lost quorum, and hosted clusters and Kibana went unreachableElastic2019- Symptoms
On 4 February 2019 at about 02:50 UTC, Elastic Cloud customers with deployments in AWS us-east-1 lost stable access to their Elasticsearch clusters, and an increase in HTTP 5xx errors showed on the load balancer. Deployments were partially or completely unavailable until 09:28 UTC, Kibana access was disrupted for most customers in the region, and the Elastic Cloud User Console timed out when customers tried to view their deployments.
- Trigger
A routine patching procedure in AWS us-east-1 replaced the first and second members of the three-node ZooKeeper ensemble with patched hosts between 02:25 and 02:45 UTC, following the same documented process used in the other 12 regions.
- Root cause
- Component
- Contributing factor
- Detection
An increase in HTTP 5xx errors on the load balancer was identified at 02:50 UTC, the time the ZooKeeper ensemble lost its leader.
- Remediation
- Restarted internal services in sweeping restarts at 03:22 and 06:00 to reduce client connection problems
- Isolated the ZooKeeper ensemble by cutting off client connections
- Rolled back the remaining ensemble member after its host became unstable
- Rolled back the second ensemble member after its host became unstable
- Rebooted the ZooKeeper hosts made unresponsive by the runc CPU softlocks
- Re-established ZooKeeper quorum by removing client load and operator debugging, then reintroduced client load gradually
- Increased the initLimit setting of the ZooKeeper observer layer used by the proxies
- Scaled the proxy fleet up and out to handle the increased traffic
- Applied a runbook that restarted the internal proxying containers and Kibana instances and set sysctl limits
- Action items
- Reduce the dataset size carried by the ZooKeeper ensembles by over 60%
- Reduce the number of health checks and intervals needed before a healthy proxy node joins the load balancing layer
- Stop counting ZooKeeper connectivity in the proxy health checks once a proxy has its configuration and routes
- Canary the rewritten proxy v2 architecture, which decouples the proxy service from ZooKeeper state, in production regions
- Improve visibility into ZooKeeper with better logging and metrics for the ZooKeeper processes, the JVM and the container and host systems
- Make Kibana route discovery more resilient
- Fix the Kibana issues that amplify internal HTTP requests during availability events
- Fix the Kibana issues that leak connections
- Make internal monitoring agents use backoff with jitter
- Formalize a maintenance matrix with set timeframes per region, so failures of critical services fall in non-critical times
- Give runbooks for coordination layer maintenance a better decision criteria matrix
- Set up a feedback loop with support leadership for incident communications through support and the status page
- Lessons
Service metrics that reported the ZooKeeper hosts healthy were not enough to show the state of individual hosts or of the ensemble, so they gave a false signal that maintenance could continue. Because the platform depended on the coordination layer, losing its quorum caused a major service disruption in which every Elasticsearch cluster in the region saw some failures, and fixes that worked one by one fell short at the scale of the failure.
IL-0274GitHub's code search Elasticsearch cluster hit near-100% CPU and rapid master elections; a restart found lost shardsGitHub2013- Symptoms
On Thursday 24 January 2013 GitHub's exception tracking and monitoring systems detected a large spike in exceptions. Most of them were timeouts in code search queries and in the background jobs that update the code search indexes with data from new pushes, and the outage of the newly launched Code Search lasted into Friday 25 January.
- Trigger
On 17 January GitHub upgraded the code search cluster from Elasticsearch 0.19.9 to 0.20.2 before launching Code Search publicly; the outage began on 24 January, after the public launch.
- Root cause
- Component
- Contributing factor
- Detection
GitHub's exception tracking and monitoring systems detected a large spike in exceptions, mostly timeouts from code search queries and from the indexing background jobs.
- Remediation
- Stopped the whole cluster and brought it back in maintenance mode, with shard allocation and rebalancing disabled
- Brought in engineers from elasticsearch, the company, to review the cluster and its unallocatable shards
- Upgraded Java and Elasticsearch and applied the recommended configuration through a Puppet topic branch and environment
- Action items
- Provision a staging environment for the code search cluster to test infrastructure changes
- Have the elasticsearch team audit the code search cluster configuration again in future
- Lessons
The Elasticsearch upgrade was not tested enough on GitHub's infrastructure before it reached the code search cluster, partly because the cluster had no proper staging environment. For large clusters the elasticsearch team recommended equal minimum and maximum JVM heap through ES_HEAP_SIZE, at 50% of system RAM, starting recovery immediately instead of after recover_after_time, and configuring minimum_master_nodes so that paused nodes do not form their own clusters.
These 2 cases involve Elasticsearch or OpenSearch and conntrack table. kubegap audits a Kubernetes cluster for gaps like these, read-only, from Claude Code or Codex; its checks cite public reports like the ones in this library.
By root cause1
Software defect2 cases
- Component
- Contributing factor