Dieses Prinzip in der Säule „Zuverlässigkeit“ des Google Cloud Well-Architected Framework enthält Empfehlungen, die Ihnen beim Entwerfen und Ausführen von Tests für die Wiederherstellung im Falle von Ausfällen helfen.
Dieses Prinzip ist für den Schwerpunkt der Zuverlässigkeit beim Lernen relevant.
Prinzip – Übersicht
Damit Ihr System nach Fehlern wiederhergestellt werden kann, müssen Sie regelmäßig Tests ausführen, die regionale Failovers, Release-Rollbacks und die Datenwiederherstellung aus Sicherungen beinhalten.
Mit diesen Tests können Sie Reaktionen auf Ereignisse üben, die ein erhebliches Zuverlässigkeitsrisiko darstellen, z. B. den Ausfall einer ganzen Region. Mit diesen Tests können Sie auch prüfen, ob sich Ihr System während einer Störung wie beabsichtigt verhält.
Im unwahrscheinlichen Fall, dass eine ganze Region ausfällt, muss der gesamte Traffic per Failover auf eine andere Region übertragen werden. Wenn Daten während des normalen Betriebs Ihrer Arbeitslast geändert werden, müssen diese von der primären Region mit der Failover-Region synchronisiert werden. Sie müssen sicherstellen, dass die replizierten Daten immer sehr aktuell sind, damit keine Datenverluste oder Sitzungsunterbrechungen auftreten. Das Load-Balancing-System muss außerdem in der Lage sein, den Traffic jederzeit ohne Dienstunterbrechung in die Failover-Region zu verlagern. Um die Ausfallzeit nach einem regionalen Ausfall zu minimieren, müssen Betriebstechniker auch in der Lage sein, den Nutzertraffic manuell und effizient aus einer Region in so weniger Zeit wie möglich zu verlagern. Dieser Vorgang wird auch als Draining einer Region bezeichnet. Dies bedeutet, dass Sie den eingehenden Traffic in die Region beenden und ihn an eine andere Stelle verschieben.
Empfehlungen
Beachten Sie beim Entwerfen und Ausführen von Tests zur Wiederherstellung nach Fehlern die Empfehlungen in den folgenden Unterabschnitten.
Testziele und -umfang definieren
Definieren Sie klar, was Sie mit den Tests erreichen möchten. Ihre Ziele können beispielsweise Folgendes umfassen:
- Validieren Sie das Recovery Time Objective (RTO) und das Recovery Point Objective (RPO). Weitere Informationen finden Sie unter Grundlagen der DR-Planung.
- Bewerten Sie die Ausfallsicherheit und Fehlertoleranz des Systems bei verschiedenen Fehlerszenarien.
- Testen Sie die Wirksamkeit automatisierter Failover-Mechanismen.
Entscheiden Sie, welche Komponenten, Dienste oder Regionen im Testumfang enthalten sind. Der Bereich kann bestimmte Anwendungsebenen wie Frontend, Backend und Datenbank oder bestimmte Google Cloud Ressourcen wie Cloud SQL-Instanzen oder GKE-Cluster umfassen. Im Bereich müssen auch alle externen Abhängigkeiten angegeben werden, z. B. Drittanbieter-APIs oder Cloud-Verbindungen.
Umgebung für Tests vorbereiten
Wählen Sie eine geeignete Umgebung aus, vorzugsweise eine Staging- oder Sandbox-Umgebung, die Ihre Produktionskonfiguration repliziert. Wenn Sie den Test in der Produktion durchführen, sollten Sie darauf achten, dass Sie Sicherheitsmaßnahmen wie automatisierte Überwachung und manuelle Rollbacks haben.
Erstellen Sie einen Sicherungsplan. Erstellen Sie Snapshots oder Sicherungen von kritischen Datenbanken und Diensten, um Datenverluste während des Tests zu verhindern. Sorgen Sie dafür, dass Ihr Team auf manuelle Eingriffe vorbereitet ist, wenn die automatisierten Failover-Mechanismen fehlschlagen.
Achten Sie darauf, dass Ihre IAM-Rollen, Richtlinien und Failover-Konfigurationen korrekt eingerichtet sind, um Testunterbrechungen zu vermeiden. Prüfen Sie, ob die erforderlichen Berechtigungen für die Testtools und -skripte vorhanden sind.
Informieren Sie die Beteiligten, einschließlich Betrieb, DevOps und Anwendungsinhaber, über den Testzeitplan, den Umfang und die möglichen Auswirkungen. Den Stakeholdern einen geschätzten Zeitplan und das erwartete Verhalten während des Tests bereitstellen.
Fehlerszenarien simulieren
Mithilfe von Tools wie Chaos Monkey können Sie Fehler planen und ausführen. Sie können benutzerdefinierte Skripts verwenden, um Fehler bei kritischen Diensten zu simulieren, z. B. das Herunterfahren eines primären Knotens in einem GKE-Cluster mit mehreren Zonen oder einer deaktivierten Cloud SQL-Instanz. Sie können auch Skripts verwenden, um einen regionalen Netzwerkausfall zu simulieren. Dazu werden Firewallregeln oder API-Einschränkungen verwendet, die auf Ihrem Testumfang basieren. Eskalieren Sie die Fehlerszenarien nach und nach, um das Systemverhalten unter verschiedenen Bedingungen zu beobachten.
Führen Sie Belastungstests und Fehlerszenarien durch, um die reale Nutzung bei Ausfällen zu replizieren. Testen Sie die Auswirkungen kaskadierender Fehler, z. B. wie sich Frontend-Systeme verhalten, wenn Backend-Dienste nicht verfügbar sind.
Testen Sie Szenarien, die Fehlkonfigurationen beinhalten, um Konfigurationsänderungen zu validieren und die Widerstandsfähigkeit des Systems gegen menschliche Fehler zu bewerten. Führen Sie beispielsweise Tests mit falschen DNS-Failover-Einstellungen oder falschen IAM-Berechtigungen aus.
Systemverhalten überwachen
Überwachen Sie, wie Load-Balancer, Systemdiagnosen und andere Mechanismen den Traffic umleiten. Verwenden Sie Google Cloud -Tools wie Cloud Monitoring und Cloud Logging, um während des Tests Messwerte und Ereignisse zu erfassen.
Beobachten Sie Änderungen der Latenz, Fehlerraten und des Durchsatzes während und nach der Fehlersimulation und überwachen Sie die Auswirkungen auf die Gesamtleistung. Ermittle alle Beeinträchtigungen oder Inkonsistenzen in der Nutzererfahrung.
Sorgen Sie dafür, dass Logs generiert und Benachrichtigungen für Schlüsselereignisse wie Dienstausfälle oder Failovers ausgelöst werden. Verwenden Sie diese Daten, um die Effektivität Ihrer Systeme für Benachrichtigungen und Vorfallreaktion zu überprüfen.
Wiederherstellung anhand von RTO und RPO prüfen
Messen Sie, wie lange es dauert, bis das System nach einem Ausfall den normalen Betrieb wiederaufnimmt, vergleichen Sie diese Daten mit dem definierten RTO und dokumentieren Sie etwaige Lücken.
Achten Sie darauf, dass Datenintegrität und -verfügbarkeit mit dem RPO übereinstimmen. Vergleichen Sie zum Testen der Datenbankkonsistenz Snapshots oder Sicherungen der Datenbank vor und nach einem Fehler.
Prüfen Sie die Wiederherstellung der Dienste und stellen Sie sicher, dass alle Dienste in einem funktionsfähigen Zustand mit minimaler Unterbrechung der Nutzer wiederhergestellt wurden.
Ergebnisse dokumentieren und analysieren
Dokumentiere jeden Testschritt, das Fehlerszenario und das entsprechende Systemverhalten. Zeitstempel, Logs und Messwerte für detaillierte Analysen einbinden
Heben Sie Engpässe, Single Points of Failure oder unerwartetes Verhalten hervor, das während des Tests beobachtet wurde. Kategorisieren Sie Probleme nach Schweregrad und Auswirkung, um Korrekturen zu priorisieren.
Schlagen Sie Verbesserungen der Systemarchitektur, des Failover-Verfahrens oder der Überwachungseinrichtungen vor. Aktualisieren Sie auf der Grundlage der Testergebnisse alle relevanten Failover-Richtlinien und Playbooks. Sie präsentieren den Stakeholdern einen Postmortem-Bericht. Der Bericht sollte die Ergebnisse, gewonnenen Erkenntnisse und nächsten Schritte zusammenfassen. Weitere Informationen finden Sie unter Gründliche Postmortems durchführen.
Iterieren und verbessern
Planen Sie regelmäßige Tests (z. B. vierteljährlich), um die kontinuierliche Zuverlässigkeit und Robustheit zu validieren.
Führen Sie Tests in verschiedenen Szenarien durch, einschließlich Infrastrukturänderungen, Softwareupdates und erhöhter Traffic-Lasten.
Automatisieren Sie Failover-Tests mit CI/CD-Pipelines, um Zuverlässigkeitstests in Ihren Entwicklungszyklus einzubinden.
Nutzen Sie während der Postmortem-Analyse das Feedback von Stakeholdern und Endnutzern, um den Testprozess und die Ausfallsicherheit des Systems zu verbessern.