Cases2 cases
1 to 2 of 2
IL-0295Pusher's Channels publish API on the mt1 cluster was largely unavailable for 11 minutes while a Redis master failed overPusher2022- Symptoms
At 10:42 UTC on 11 April 2022, the API for publishing messages to Pusher Channels on the mt1 cluster became largely unavailable, and from about 10:44 requests to the MT1 API returned more errors.
- Trigger
An engineer restarted the master node of an mt1 Redis group to apply a larger replication buffer, after restarting both replicas of that group.
- Root cause
- Component
- Contributing factor
- Detection
Pusher saw error rates rise for requests to the MT1 API from about 10:44 UTC.
- Action items
- Fix the Redis shutdown script to check that failover has completed and the node is no longer a master before terminating
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.
These 2 cases involve Database failover manager and In-memory cache. 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 cause2
Software defect1 case
- Contributing factor
- Organisation
Hardware failure1 case
- Component
- Contributing factor
- Organisation