Cases3 cases
1 to 3 of 3
IL-0219GoCardless's API and Dashboard failed every request for 1 hour 50 minutes when Pacemaker did not promote a replicaGoCardless2017- Symptoms
At 15:09 BST on 10 October 2017, GoCardless's monitoring detected a total outage of its API and Dashboard: every request failed and returned an error. By 15:11 engineers saw evidence of a disk array failure on the primary Postgres node, but the Pacemaker cluster had not failed over to the synchronous replica as it should have.
- Trigger
The RAID controller of the primary Postgres node lost 3 disks of its array at once, so all reads and writes on the primary failed.
- Root cause
- Component
- Contributing factor
- Detection
GoCardless's monitoring detected the total outage of the API and Dashboard at 15:09 BST, and engineers began investigating.
- Remediation
- Powered off the broken primary Postgres node
- Cleared the Pacemaker error counts with crm resource cleanup, which had no effect
- Edited recovery.conf on the synchronous replica under maintenance mode several times, which Pacemaker reverted
- Put the cluster into maintenance mode, configured the synchronous replica as primary and started Postgres by hand
- Reconfigured the backend applications to connect to the new primary's actual IP address
- Bootstrapped a third node as an asynchronous replica
- Added a VIP managed by hand by the infrastructure team for manual failover
- Verified data integrity and found no corruption
- Migrated to a new Pacemaker-managed database cluster in a maintenance window and decommissioned the old one
- Action items
- Express the Backup VIP rule as an INF preference for a replica instead of a -INF preference against the primary
- Replace the VIPs with proxies on the application servers that route traffic by the state of the cluster
- Run harsher fault injection tests of the Postgres cluster and consider automation that injects failures continually
- Consider adding arbitrary restrictions to game day exercises, such as automation that has failed and a problem that cannot be diagnosed, so engineers practise bringing the service back another way
- Lessons
A rule that two resources must not run together does not behave like the opposite of a rule that they must run together, and in some failure conditions the difference stopped Pacemaker from promoting a replica. A misconfiguration that shows only when two processes crash at almost the same time will not appear in basic tests or daily operations, only through fault injection. After two years in which the automation had handled every failure, the team's skill at controlling the cluster by hand had faded, and a runbook unused for years would likely have been out of date.
IL-0278A weekly update put a Redis Cloud management process into an infinite loop, and most nodes of a GCP cluster failedRedis2016- Symptoms
On 8 February 2016 at 17:45 UTC, four nodes of the Redis Cloud cluster us-central1-1-1.gce.garantiadata.com on Google Cloud Platform stopped responding, four minutes after a first node had failed. The databases whose endpoints end in us-central1-1-1.gce.garantiadata.com went down.
- Trigger
The weekly upgrade of Redis Cloud's non-critical cluster components reached its first Google Cloud Platform cluster, us-central1-1-1.gce.garantiadata.com, at 17:30 UTC.
- Root cause
- Component
- Contributing factor
- Remediation
- Shut down and terminated all nodes of the cluster
- Deleted all of the cluster's endpoints from its DNS zone, removing by hand the entries left by throttled deletes
- Provisioned new cluster nodes from scratch without the weekly update
- Reconnected the original nodes' storage to the new nodes so persistence-enabled databases could be recovered
- Bootstrapped and launched the databases, recovering the ones with persistence from storage
- Action items
- Suspend all automatic weekly upgrades until a procedure that prevents this kind of outage is in place
- Revalidate the QA processes for DevOps code deployments
- Improve the tooling so it handles throttling of DNS requests
IL-0303GitHub's MySQL master failed over to a node with a cold buffer pool during a schema migration and GitHub.com went downGitHub2012- Symptoms
On Monday, September 10th, 2012, during a schema migration, the health checks on GitHub's MySQL master failed and Percona Replication Manager moved the 'active' role to another node of the new three-node cluster. That node's InnoDB buffer pool was cold and it performed poorly, its health checks failed in turn, and the role failed back to the original server. GitHub.com went down.
- Trigger
A schema migration on Monday, September 10th put more load on the master database than earlier migrations had, and Percona Replication Manager's health checks on the master failed.
- Root cause
- Component
- Contributing factor
- Detection
On the morning of September 11th, a developer told the operations team that the 'standby' node was returning incorrect query results.
- Remediation
- Enabled Pacemaker's maintenance-mode so no health checks or automatic failovers ran, and let the buffer pool warm
- Powered off the out-of-date node 'c' to end the partition
- Stopped Pacemaker and Heartbeat on nodes 'a' and 'b' and started them on node 'a' only
- Started MySQL on node 'a' in the active role
- Removed the events leaked to wrong dashboards and audited the wrongly routed repositories
- Contacted the owners of the exposed private repositories
- Action items
- Change the Pacemaker configuration so the active database role fails over only when an operations engineer starts it
- Find a way to warm the InnoDB buffer pool of slave databases so failovers do not hurt performance
- Audit the Pacemaker and Heartbeat stack, focusing on the code path behind the segfault
- Run hardware tests on the server where the segfault happened
- Lessons
GitHub concluded that automated failover is not the right strategy for its primary production database: for every failover in this incident, any member of the operations team would have said it should not happen. Failovers that must happen, in an emergency or during maintenance, should not hurt performance.
These 3 cases involve Database failover manager and Database. 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 cause3
Hardware failure1 case
- Component
- Contributing factor
- Organisation
Faulty deployment1 case
- Contributing factor
- Organisation
Software defect1 case
- Contributing factor
- Organisation