Incident Library

IL-0255 37signals · 2020-08-28networkingdatabase

Basecamp's two redundant links between data centers dropped together and a Redis replica resync loop stalled chat

Basecamp has redundant metro links between its primary data center in Ashburn, VA and its other data center in Chicago, IL. A few months before the incident it changed networking providers for these links after its previous vendor was acquired, ran the new provider alongside the old one for several weeks, and switched over entirely in late June 2020.

On 28 August the short loss of connectivity between the data centers led to replication errors on a Redis standby server, and the replica fell into a resynchronization loop that kept taking resources from the primary and made it very slow. Chat reconnections added load that slowed the whole of BC3. The team turned chat off at the load balancer layer to stabilise the rest of BC3, and restarting Redis on the replica brought an immediate improvement, after which BC3 returned to normal. The Redis behaviour was a known issue with a documented workaround that was new to the team; the Ops lead created a todo for the configuration change but did not make sure it was assigned or finished before the next incident.

The question afterwards was how a 30 second loss of one redundant link could take BC3 down. Logs showed that both links had dropped. The providers first pointed to sub-optimal BGP configuration settings, which did not fully explain the loss of both circuits. When the links dropped again on 1 September, the providers watched it happen and found that both metro links share a physical path in Pennsylvania that was affected by a fiber cut, which surprised Basecamp and the providers alike.

Severity
–
Scope
BC3: slow responses throughout, and chats and pings not working
Users affected
–
Region
–
Time to detect
–
Time to resolve
–

Symptoms

At 11:59AM CDT on Friday 28 August 2020, Basecamp's Ops team received a flood of alerts from PagerDuty, Nagios and Prometheus. Monitoring showed that the newer of the two metro links between the data centers in Ashburn, VA and Chicago, IL had been lost for about 20-30 seconds, and BC3 kept responding slowly after the link came back.

Chats and pings in BC3 then stopped working entirely, and chat reconnections were overloading the network and slowing all of BC3. Because the problem was clearly tied to chat, the team restarted the Cable service, which did not fix the connections. Turning chat off at the load balancer layer let the rest of BC3 settle, but a second Cable restart had no effect.

When the alert noise died down, one alert for a single Redis DB instance remained. The team had passed over it at first because the database was not down, and probes from the command line still got answers. Further digging found replication errors on a standby server: its replica was stuck in a resynchronization loop that kept taking resources and slowed the primary so much that it answered little more than monitoring checks.

Logs reviewed after the incident showed that both metro links, not only the newer one, had dropped for short periods.

Symptom Link flappingHigh latencyReplication lag

Root cause

Trigger
Both redundant metro links between Basecamp's Ashburn and Chicago data centers dropped for short periods; monitoring showed the newer link down for about 20-30 seconds.

Detection

A flood of alerts from PagerDuty, Nagios and Prometheus, with monitoring showing the lost metro link. A lingering alert for one Redis DB instance later pointed to the replication problem.

Remediation

Action items

Lessons

Planned redundancy and live testing had given Basecamp a false sense of security, especially at peak load: moving between redundant network links or shifting load across data centers should work without issue, and Basecamp would rather find out in a controlled test with the full team ready. The follow-up from an outage needs urgency and explicitly cleared time, not just a place on a list.

Sources

Related cases

Check your cluster for this

kubegap audits a Kubernetes cluster for conditions like the ones in this case, Backbone network (WAN), BGP routing, In-memory cache among them, read-only, from Claude Code or Codex. Its checks cite public reports like this one.

For AI tools and scripts

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.