Hallo, DreamHoster!
Kürzlich erlitt DreamObjects eine lang anhaltende Ausfallzeit. Der Dienst war für einen Zeitraum von ungefähr sechs Stunden am Freitag, den 13. Juni, und erneut für einen zweiten Zeitraum von ungefähr vier Stunden am Samstag, den 14. Juni, weitgehend unzugänglich. Wir möchten Ihnen einige Einblicke in das Was und Warum des Ausfalls geben.
Zuerst, um den Kontext zu verstehen, lassen Sie uns besprechen, wie DreamObjects funktioniert. DreamObjects existiert als ein Cluster von Servern, wobei jeder Server mehrere Festplatten hat. Die meisten Server im Cluster führen eine Software namens Ceph aus, die ein verteiltes, fehlertolerantes Speichersystem ist.
Ein verteiltes Speichersystem ist eines, das Daten auf mehreren Laufwerken speichert, und häufig sind diese Laufwerke über mehrere Server verteilt. Ein fehlertolerantes Speichersystem ist eines, das den Ausfall eines oder mehrerer Laufwerke oder sogar ganzer Server oder Servergestelle verkraften kann, ohne Daten zu verlieren. Ceph (und somit DreamObjects) ist sowohl verteilt als auch fehlertolerant. Kurz gesagt, alles, was Sie uns senden, wird auf drei Laufwerke geschrieben, um die Integrität und Haltbarkeit Ihrer Daten zu schützen.
Das bedeutet nicht, dass jede Maschine im Cluster die Aufgabe hat, Ihre Daten zu speichern. Einige – die Gateways – sind die Maschinen, mit denen Sie tatsächlich über die S3 oder Swift HTTP APIs kommunizieren. Diese Gateways stellen dann in Ihrem Namen Anfragen an die Maschinen, die tatsächlich Daten speichern.
Und das bringt uns zur Ursache des Ausfalls: TL;DR die Gateways konnten nicht mit den backend Speicherservern kommunizieren, und so erschien der Dienst als „nicht verfügbar“, obwohl das zugrundeliegende Speichersystem aktiv war und sicherstellte, dass Ihre Daten sicher waren.
Am Freitag wurde eine Änderung an der „CRUSH-Karte“ vorgenommen, die Ceph anweist, wie Daten zwischen den Servern und Laufwerken aufgeteilt werden sollen, die DreamObjects bilden. Diese Änderungen waren notwendig, hätten jedoch nicht alle auf einmal durchgeführt werden sollen. Dies führte dazu, dass so viele Daten innerhalb des backend des Clusters verschoben wurden, dass Anfragen von den Gateways nicht rechtzeitig bearbeitet werden konnten. Zur Sicherheit der Daten – die erste Aufgabe jedes Speichersystems – gibt Ceph der internen Datenbewegung Priorität vor Anfragen von den Gateways. Unsere Ingenieure hatten effektiv und ganz unbeabsichtigt einen internen Denial-of-Service-Angriff gegen DreamObjects erstellt. Die Änderung an der Karte erfolgte als Ergebnis eines dringenden Problems mit dem Ceph-Cluster selbst. Diese Änderung wurde jedoch überstürzt vorgenommen und hätte während eines geplanten (und angekündigten) Wartungsfensters langsamer eingeführt werden sollen.
Der Ausfall am Freitag wurde durch einen Fehler in der damals verwendeten Version von Ceph verschärft. Dieser Fehler führte dazu, dass einzelne Laufwerke wiederholt unzugänglich wurden, was die Wiederherstellungszeit nach der Kartenänderung erheblich verlängerte. Etwa in der Mitte des Ausfalls entschieden wir uns für ein Upgrade von Ceph. Das war letztendlich der Grund, warum der Cluster viel schneller als normal gesund wurde.
Am Samstag wurde durch den Stress der anhaltenden Cluster-Wiederherstellung ein weiterer Fehler aufgedeckt, der auch dazu führte, dass wir wiederholt den Zugang zu einzelnen Laufwerken verloren haben. Unsere Freunde bei Inktank haben freundlicherweise eine spezielle Version von Ceph für uns erstellt, um das Problem zu beheben.
Kurz gesagt, der Ausfall von DreamObjects war das Ergebnis einer übermäßig aggressiven Änderung unserer Ceph-Konfiguration und wurde dann durch latente Fehler innerhalb von Ceph verschlimmert. Letztendlich konnten wir mit Hilfe von Inktank alle Probleme schnell lösen und Ceph selbst wurde durch unsere Erkenntnisse gestärkt. Es ist auch wichtig zu erwähnen, dass das zugrundeliegende Speichersystem wie vorgesehen funktionierte und sicherstellte, dass die Kundendaten sicher und nie gefährdet waren.
Wir setzen uns absolut dafür ein, die hohe Qualität und Verfügbarkeit all unserer Dienste zu gewährleisten. Das DreamObjects-Team hat eine Reihe von Änderungen an unserem Code, unseren Prozessen und Verfahren identifiziert, um sicherzustellen, dass eine solche Ausfallzeit nicht noch einmal vorkommt. Insbesondere werden die Betriebsingenieure Änderungen der „CRUSH map“ durch einen strengeren Überprüfungsprozess prüfen, einschließlich einer externen Überprüfung durch Inktank, die Ersteller von Ceph. Zusätzlich werden Änderungen dieses Ausmaßes rechtzeitig angekündigt und in den verkehrsarmen Zeiten durchgeführt, um das Risiko zu minimieren.
Noch eine letzte Sache.
Alle DreamObjects-Kunden erhalten im Juni 2014 10% Rabatt auf ihre Rechnung.
Vielen Dank gebührt unseren Kollegen bei DreamHost in den Datenzentrum-Operationen, dem technischen Support und den Cloud-Operationen; sowie den großartigen Leuten bei Inktank, die unermüdlich gearbeitet haben, um die Verfügbarkeit wiederherzustellen und Kundendaten zu schützen.