IL-0295 Pusher · 2022-04-11database
Pusher's Channels publish API on the mt1 cluster was largely unavailable for 11 minutes while a Redis master failed over
Pusher runs Redis in groups of one master and two replicas, and since the beginning of November 2021 had been moving all groups to a new version of its Redis group module. Every node of the new groups runs a script at node termination that checks whether the node is a Redis master and, if it is, starts a failover to one of the replicas. To help the clusters cope with more traffic, Pusher increased the replication buffer size in the Redis configuration of every group, which needed each Redis node to be restarted; this had already been done on test clusters and on one smaller production cluster.
At 08:47 UTC an engineer began replacing nodes in the mt1 cluster and restarted both replica nodes of one Redis group, one at a time, without problems. At 10:42 the engineer did the same for the master. The failover started, but the Redis process was terminated before it completed. The shutdown script assumed that once the failover command had run successfully, the node could be terminated; on most clusters failover finishes before the Redis process is killed, but on a heavily loaded cluster such as mt1 the node terminated during failover and left the group in an inconsistent state that takes longer to recover from than no failover at all. After a period in which the old and new masters contended for leadership, the group recovered at 10:53 and the new master handled all messages.
- Severity
- –
- Scope
- Publishing to Channels on the mt1 cluster largely unavailable; messages delayed or lost
- Users affected
- –
- Region
- –
- Time to detect
- –
- Time to resolve
- 11m
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.
Until 10:53, users could fail to publish messages, receive messages late with more than 900ms end-to-end latency, or not receive messages at all, and some messages may have been lost. During this time the old and the new master of one Redis group were both contending for leadership.
Root cause
Root cause Software defect
- 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.
Detection
Pusher saw error rates rise for requests to the MT1 API from about 10:44 UTC.
Remediation
–
Action items
- Fix the Redis shutdown script to check that failover has completed and the node is no longer a master before terminating
Lessons
–
Sources
- https://status.pusher.com/incidents/scvz124sfw8f · official-status · archived copy
Related cases
IL-0310An Aurora PostgreSQL failover to an upsized reader reversed twice and backend writes failed in read-only transactionsHightouch · 2025same root cause · shared Database failover manager
IL-0376A maintenance update set off needless full syncs between Upstash Redis replicas in eu-west-1, slowing the databasesUpstash · 2025same root cause · shared In-memory cache
IL-0216Wikimedia on-wiki search was slow or rejected after a datacenter switchover overloaded one Elasticsearch node in codfwWikimedia Foundation · 2023same root cause · shared In-memory cache
IL-0217Honeycomb's main MySQL database locked up under cache-miss reads and ran out of connections, a 68-minute total outageHoneycomb · 2023same root cause · shared In-memory cache
IL-0213Roblox was down for 73 hours because key-value writes on its single Consul cluster slowed from under 300 ms to 2 secondsRoblox · 2021same root cause · shared In-memory cache
IL-0241A database shard could not elect a new primary, and the Stripe API failed most requests in two periods on one dayStripe · 2019same root cause · shared Database failover manager
IL-0279One failed Redis Cluster replica left only about 1 in 21 calls to Grab's Apollo service succeeding for a minuteGrab · 2019same root cause · shared In-memory cache
IL-0388A Google Cloud live migration took a Discord Redis primary offline, and the failover broke API instances and then guildsDiscord · 2017same root cause · shared In-memory cache
IL-0303GitHub's MySQL master failed over to a node with a cold buffer pool during a schema migration and GitHub.com went downGitHub · 2012same root cause · shared Database failover manager
Check your cluster for this
For AI tools and scripts
- This case as JSON: https://incidentlib-api.benchlet.com/cases/IL-0295
- The cases most like it: https://incidentlib-api.benchlet.com/cases/IL-0295/similar
- MCP server (Streamable HTTP, no key):
https://incidentlib-mcp.benchlet.com/mcp
The API needs no key. The MCP server offers search_incidents, get_incident, list_incidents, get_topic and vocab; both are explained on API and MCP.