Großausfall bei Cloudflare  

Der Vorfall dauerte vom 2. November um 11:44 UTC bis zum 4. November um 04:25 UTC. Für viele Kunden gab es keine Probleme mit den meisten unserer Produkte. Es gab zwar Zeiten, in denen Kunden keine Änderungen an diesen Diensten vornehmen konnten, der Datenverkehr durch unser Netzwerk war jedoch nicht beeinträchtigt. Dieser Beitrag beschreibt die Ereignisse, die diesen Vorfall verursacht haben, die Architektur, die wir eingerichtet hatten, um Probleme wie diese zu verhindern, was fehlgeschlagen ist, was funktioniert hat und warum, und die Änderungen, die wir basierend auf den Erkenntnissen der letzten 36 Stunden vornehmen.

Zunächst einmal hätte dies nie passieren dürfen. Wir waren davon überzeugt, dass wir über Hochverfügbarkeitssysteme verfügten, die einen Ausfall wie diesen hätten verhindern sollen, selbst wenn einer unserer wichtigsten Rechenzentrumsanbieter katastrophal ausgefallen wäre. Und obwohl viele Systeme wie geplant online blieben, gab es bei einigen kritischen Systemen nicht offensichtliche Abhängigkeiten, die sie nicht verfügbar machten.

Am 2. November um 08:50 UTC kam es bei Portland General Electric (PGE), dem Versorgungsunternehmen, das PDX-04 versorgt, zu einem ungeplanten Wartungsereignis, das eine der unabhängigen Stromeinspeisungen in das Gebäude betraf. Dadurch wurde eine Einspeisung in PDX-04 abgeschaltet. Das Rechenzentrum verfügt über mehrere unabhängige Einspeisungen, die die Anlage mit Strom versorgen können. Flexential schaltete jedoch seine Generatoren ein, um die ausgefallene Einspeisung effektiv zu ergänzen.

Im Gegensatz zu Best Practices hat Flexential Cloudflare nicht darüber informiert, dass sie auf Generatorstrom umgeschaltet haben.

Um ca. 11:40 UTC kam es zu einem Erdschluss an einem PGE-Transformator bei PDX-04. Wir gehen davon aus, dass es sich dabei um den Transformator handelt, der den Strom aus dem Netz für die zweite Einspeisung abschaltete, die bei der Einspeisung in das Rechenzentrum noch in Betrieb war. Es wahrscheinlich, dass der Erdschluss durch die ungeplanten Wartungsarbeiten von PGE verursacht wurde, die die erste Einspeisung beeinträchtigten. Oder es war ein sehr unglücklicher Zufall. Leider schaltete die Schutzmaßnahme in diesem Fall auch alle Generatoren von PDX-04 ab. Dies bedeutete, dass die beiden Quellen der Stromerzeugung für die Anlage – sowohl die redundanten Versorgungsleitungen als auch die 10 Generatoren – offline waren.

Glücklicherweise verfügt PDX-04 neben den Generatoren auch über eine Reihe von USV-Batterien. Diese Batterien reichen angeblich aus, um die Anlage für etwa 10 Minuten mit Strom zu versorgen. In Wirklichkeit begannen die Batterien bereits nach 4 Minuten zu versagen, wie wir an unseren eigenen Geräten beobachten konnten. Und Flexential brauchte viel länger als 10 Minuten, um die Generatoren wieder in Gang zu bringen.

Drei Dinge, die Wiederinbetriebnahme der Generatoren behindert haben:

  1. Erstens musste man sich Zugang zu den Generatoren verschaffen und sie manuell wieder einschalten, da der Erdschluss die Stromkreise ausgelöst hatte.
  2. Zweitens wurde das Zugangskontrollsystem von Flexential nicht von den Batterie-Backups gespeist und war daher offline.
  3. Drittens war über Nacht kein erfahrener Betriebs- oder Elektrofachmann vor Ort – die Nachtschicht bestand aus Sicherheitskräften und einem unbegleiteten Techniker, der erst seit einer Woche im Einsatz war.

Zwischen 11:44 Uhr und 12:01 Uhr UTC, als die Generatoren noch nicht wieder vollständig hochgefahren waren, ging den USV-Batterien der Strom aus und alle Kunden des Rechenzentrums waren ohne Strom.

Das Design des PDX-04 wurde vor dem Bau als Tier III zertifiziert und sollte hohe Verfügbarkeits-SLAs bieten.

Die beiden anderen Rechenzentren in der Region würden die Verantwortung für den Hochverfügbarkeitscluster übernehmen und kritische Dienste online halten. Im Allgemeinen funktionierte das wie geplant. Leider stellten wir fest, dass eine Untergruppe von Diensten, die im Hochverfügbarkeitscluster enthalten sein sollten, von Diensten abhängt, die ausschließlich in PDX-04 laufen.

Um 12:48 UTC gelang es Flexential, die Generatoren wieder in Gang zu setzen. Teile der Anlage wurden wieder mit Strom versorgt. Damit das System nicht überlastet wird, erfolgt die Wiederherstellung der Stromversorgung in einem Rechenzentrum in der Regel schrittweise, indem ein Stromkreis nach dem anderen wieder in Betrieb genommen wird. Wie bei den Stromkreisunterbrechern in einem Privathaushalt wird jeder Kunde von redundanten Unterbrechern versorgt. Als Flexential versuchte, die Stromkreise von Cloudflare wieder in Betrieb zu nehmen, stellte sich heraus, dass die Unterbrecher defekt waren. Wir wissen nicht, ob die Unterbrecher aufgrund des Erdschlusses oder einer anderen Überspannung infolge des Vorfalls ausgefallen sind oder ob sie schon vorher defekt waren und dies erst nach dem Ausschalten entdeckt wurde.

Flexential begann mit dem Austausch der defekten Schutzschalter. Dazu mussten sie neue Schalter beschaffen, da mehr defekt waren, als sie in der Anlage zur Verfügung hatten.

Als die Dienste dort hochgefahren wurden, kam es zu einem gewaltigen Herdenproblem, bei dem die fehlgeschlagenen API-Aufrufe unsere Dienste überforderten. Einige Systeme mussten jedoch noch manuell konfiguriert werden. Eine Handvoll Produkte wurde auf unseren Disaster-Recovery-Sites nicht ordnungsgemäß wiederhergestellt. Dabei handelte es sich in der Regel um neuere Produkte, für die wir noch kein vollständiges Disaster-Recovery-Verfahren implementiert und getestet hatten.

Der Wiederaufbau dieser Server dauerte 3 Stunden. Von dort aus konnte unser Team den Wiederaufbau der übrigen Server, die unsere Dienste versorgen, in Angriff nehmen. Jeder Server benötigte zwischen 10 Minuten und 2 Stunden für den Wiederaufbau. Obwohl wir in der Lage waren, dies parallel auf mehreren Servern durchzuführen, gab es Abhängigkeiten zwischen den Diensten, die es erforderlich machten, einige nacheinander wieder online zu bringen.

Lessons and Remediation

  • Abschaffung der Abhängigkeiten von unseren zentralen Rechenzentren für die Konfiguration der Steuerungsebene aller Dienste und Verlagerung dieser Dienste, wo immer dies möglich ist, auf unser verteiltes Netzwerk
  • Sicherstellen, dass die Kontrollebene im Netzwerk auch dann noch funktioniert, wenn alle unsere Kernrechenzentren offline sind
  • Alle Produkte und Funktionen, die als allgemein verfügbar eingestuft sind, müssen sich auf den Hochverfügbarkeits-Cluster stützen (wenn sie sich auf eines unserer Kernrechenzentren stützen), ohne dass Software-Abhängigkeiten von bestimmten Einrichtungen bestehen.
  • Alle Produkte und Funktionen, die als allgemein verfügbar eingestuft sind, müssen über einen zuverlässigen, getesteten Notfallwiederherstellungsplan verfügen.
  • Testen Sie den Explosionsradius von Systemausfällen und minimieren Sie die Anzahl der Dienste, die von einem Ausfall betroffen sind.
  • Implementierung strengerer Chaostests aller Rechenzentrumsfunktionen, einschließlich der vollständigen Entfernung aller unserer zentralen Rechenzentrumseinrichtungen
  • Gründliche Überprüfung aller zentralen Rechenzentren und ein Plan zur erneuten Überprüfung, um sicherzustellen, dass sie unseren Standards entsprechen
  • Ein Notfallwiederherstellungsplan für die Protokollierung und Analyse, der sicherstellt, dass auch bei einem Ausfall aller unserer Kerneinrichtungen keine Protokolle verloren gehen

Wir verfügen über die richtigen Systeme und Verfahren, um selbst einer solchen Kaskade von Ausfällen, wie wir sie bei unserem Rechenzentrumsbetreiber erlebt haben, standhalten zu können, aber wir müssen strenger darauf achten, dass sie befolgt und auf unbekannte Abhängigkeiten getestet werden.