Die Auswirkungen der Netzwerkschleife auf unsere MongoDB-Prozesse und wie wir reagiert haben
Da unsere MongoDB-Prozesse während der Netzwerkschleife keine normale Verbindung herstellen konnten, markierte jeder einzelne alle zugehörigen Prozesse als offline. Das heißt, jeder MongoS-Prozess hat alle zugehörigen MongoD-Prozesse als offline markiert, und jeder MongoD-Prozess hat seine zugehörigen Replikatsatzmitglieder als Offline markiert. Doch selbst nachdem Rackspace die Netzwerkkonnektivität zu unseren physischen Servern wiederhergestellt hatte, stellten weder die mongoS- noch die mongoD-Prozesse alle Verbindungen zu den anderen Prozessen wieder her, die als offline markiert wurden.
Um die Behebungsbemühungen unseres Rackspace-Datenbankadministratorteams (DBA) zu unterstützen, begannen die DevOps-Teams von Braze zu diesem Zeitpunkt mit der schnellen Fehlerbehebung und dem Testen von Methoden zur Wiederherstellung dieser Konnektivität. Unsere Untersuchung ergab, dass die einzige verfügbare Option darin bestand, jeden der fast 16.000 MongoD- und über 6.000 MongoS-Prozesse in ihren virtualisierten Containern neu zu starten. Angesichts des Ausmaßes dieses Unterfangens und der Tatsache, dass es keine Automatisierung gab, um so viele Container schnell neu zu starten, schrieben die Rackspace-Ingenieure während des Vorfalls neuen Code, um eine Automatisierungsfunktion im laufenden Betrieb zu schaffen.
Leider trat mit zunehmender Dauer des Neustartvorgangs ein weiteres Problem im Domain Name System (DNS)-System auf. Wenn mongoS- und mongoD-Prozesse online gehen, fordern sie Informationen von DNS-Resolvern in einem Prozess an, der als DNS-Suche bezeichnet wird. Aufgrund der kontinuierlichen DNS-Suchvorgänge, die durch die Geschwindigkeit der Neustarts bedingt waren, waren die DNS-Server stark ausgelastet, was zu Konnektivitäts-Timeouts auf den MongoS-Ebenen führte, als diese sich wieder mit den MongoD-Prozessen verbanden. Um dieser wachsenden Last gerecht zu werden, erhöhte unser Rackspace-Team die DNS-CPU-Kapazität, war dann aber gezwungen, die mongoS-Ebene ein zweites Mal neu zu starten, um gesunde Verbindungen von jedem mongoS zu den zugehörigen mongoD-Prozessen herzustellen.
Gegen 17:05 UTC ermöglichte der Neustartvorgang, dass einige Cluster wieder online gingen. Als sich die Datenbankleistung erholte und sich die Cluster stabilisierten, steigerte Braze die Datenverarbeitungs- und Messaging-Versandkapazität weiter. Diese Bemühungen wurden jedoch durch den massiven Rückstand aufgrund der vorherigen Nichtverfügbarkeit erschwert.
Angesichts der Größe und Komplexität unserer Rackspace-Datenbankumgebung, die aus Hunderten unterschiedlicher Datenbanken besteht, der Länge des Ausfalls und des daraus resultierenden Volumens unseres Rückstands (der Milliarden von Nachrichten und Milliarden aufgenommener Datenpunkte darstellt) ist der Wiederherstellungsprozess erforderlich -Momentane Anpassung unserer normalen Genesungsprozesse. Dies war notwendig, um sicherzustellen, dass die Datenbankressourcen im Gleichgewicht mit den laufenden Verarbeitungsanforderungen blieben, einschließlich der Einführung einer enormen Gesamtverarbeitungskapazität.
Dabei stieß Braze jedoch an eine AWS-Grenze hinsichtlich der Anzahl virtueller CPUs, die wir bereitstellen konnten, und hinderte uns daran, zusätzliche Serverkapazität hinzuzufügen. Das Braze-Team hat diesen Umstand schnell mit unserem AWS-Team eskaliert und eine Erhöhung erhalten, die es unseren Ingenieuren ermöglichte, die Verarbeitungskapazität unseres Servers auf ein Rekordniveau zu steigern, das mehr als 50 % höher war als unsere bisherige maximale Kapazität, die auf Black erreicht worden war Freitag 2023.
Um 20:30 UTC hatten alle unsere US-Cluster außer US 01, US 03 und US 08 die Verarbeitung ihrer Rückstände abgeschlossen, und die verbleibenden Cluster verarbeiteten die Spitzengeschwindigkeiten vom Tag vor dem Vorfall oder übertrafen sie. Innerhalb weniger Stunden konnten alle Cluster wieder in Echtzeit verarbeitet werden und wir erklärten den Vorfall für behoben.