Wiederherstellung nach Fehlern testen

Last reviewed 2024-12-30 UTC

Dieses Prinzip in der Säule „Zuverlässigkeit“ des Google Cloud Well-Architected Framework enthält Empfehlungen, die Ihnen helfen, Tests für die Wiederherstellung im Falle von Fehlern zu entwickeln und auszuführen.

Dieses Prinzip ist für den Lernbereich „Zuverlässigkeit“ relevant.

Prinzipübersicht

Damit Sie sicher sein können, dass Ihr System sich von Fehlern erholen kann, müssen Sie regelmäßig Tests durchführen, die regionale Failover, Rollbacks von Releases und die Wiederherstellung von Daten aus Sicherungen umfassen.

Diese Tests helfen Ihnen, auf Ereignisse zu reagieren, die ein großes Risiko für die Zuverlässigkeit darstellen, z. B. den Ausfall einer ganzen Region. Außerdem können Sie damit prüfen, ob sich Ihr System bei einer Störung wie erwartet verhält.

Im unwahrscheinlichen Fall, dass eine ganze Region ausfällt, müssen Sie den gesamten Traffic zu einer anderen Region weiterleiten. Im Normalbetrieb Ihrer Arbeitslast müssen Daten, die geändert werden, von der primären Region zur Failover-Region synchronisiert werden. Sie müssen prüfen, ob die replizierten Daten immer sehr aktuell sind, damit Nutzer keine Daten verlieren oder Sitzungen unterbrochen werden. Das Load-Balancing-System muss außerdem in der Lage sein, den Traffic jederzeit ohne Dienstunterbrechungen zur Failover-Region zu verschieben. Um Ausfallzeiten nach einem regionalen Ausfall zu minimieren, müssen Betriebsingenieure außerdem in der Lage sein, den Nutzertraffic manuell und effizient und in möglichst kurzer Zeit von einer Region wegzuleiten. Dieser Vorgang wird manchmal als Entleeren einer Region bezeichnet. Dabei wird der eingehende Traffic zur Region gestoppt und der gesamte Traffic an einen anderen Ort verschoben.

Empfehlungen

Wenn Sie Tests für die Wiederherstellung nach einem Fehler entwickeln und ausführen, sollten Sie die Empfehlungen in den folgenden Unterabschnitten berücksichtigen.

Testziele und -umfang definieren

Definieren Sie klar, was Sie mit den Tests erreichen möchten. Beispiele für Ziele:

  • Recovery Time Objective (RTO) und Recovery Point Objective (RPO) validieren Weitere Informationen finden Sie unter Grundlagen der Notfallwiederherstellungsplanung.
  • Systemresilienz und Fehlertoleranz in verschiedenen Fehlerszenarien bewerten
  • Effektivität automatisierter Failover-Mechanismen testen

Legen Sie fest, welche Komponenten, Dienste oder Regionen in den Testumfang fallen. Der Umfang kann bestimmte Anwendungsebenen wie das Frontend, das Backend und die Datenbank oder bestimmte Google Cloud Ressourcen wie Cloud SQL-Instanzen oder GKE-Cluster umfassen. Außerdem müssen alle externen Abhängigkeiten angegeben werden, z. B. APIs von Drittanbietern oder Cloud-Verbindungen.

Umgebung für Tests vorbereiten

Wählen Sie eine geeignete Umgebung aus, vorzugsweise eine Staging- oder Sandbox-Umgebung, die Ihrer Produktionsumgebung entspricht. Wenn Sie den Test in der Produktion durchführen, müssen Sie Sicherheitsmaßnahmen wie automatisierte Überwachung und manuelle Rollback-Verfahren bereithalten.

Erstellen Sie einen Sicherungsplan. Erstellen Sie Snapshots oder Sicherungen von kritischen Datenbanken und Diensten, um Datenverlust während des Tests zu vermeiden. Achten Sie darauf, dass Ihr Team bereit ist, manuell einzugreifen, wenn die automatisierten Failover-Mechanismen ausfallen.

Damit es nicht zu Unterbrechungen kommt, müssen Ihre IAM-Rollen, -Richtlinien und Failover-Konfigurationen korrekt eingerichtet sein. Prüfen Sie, ob die erforderlichen Berechtigungen für die Testtools und -Skripts vorhanden sind.

Informieren Sie Stakeholder, einschließlich Betriebs-, DevOps- und Anwendungsinhaber, über den Testplan, den Umfang und die potenziellen Auswirkungen. Geben Sie Stakeholdern einen geschätzten Zeitplan und die erwarteten Verhaltensweisen während des Tests an.

Fehlerszenarien simulieren

Planen und führen Sie Fehler mit Tools wie Chaos Monkey aus. Mit benutzerdefinierten Skripts können Sie Fehler bei kritischen Diensten simulieren, z. B. das Herunterfahren eines primären Knotens in einem GKE-Cluster mit mehreren Zonen oder eine deaktivierte Cloud SQL-Instanz. Sie können auch Skripts verwenden, um einen regionsweiten Netzwerkausfall zu simulieren, indem Sie Firewallregeln oder API-Beschränkungen basierend auf dem Umfang Ihres Tests verwenden. Erhöhen Sie die Fehlerszenarien schrittweise, um das Systemverhalten unter verschiedenen Bedingungen zu beobachten.

Führen Sie neben Fehlerszenarien auch Lasttests durch, um die reale Nutzung während Ausfällen zu simulieren. Testen Sie die Auswirkungen von kaskadierenden Fehlern, z. B. wie sich Frontendsysteme verhalten, wenn Back-End-Dienste nicht verfügbar sind.

Um Konfigurationsänderungen zu validieren und die Resilienz des Systems gegenüber menschlichen Fehlern zu bewerten, testen Sie Szenarien mit Fehlkonfigurationen. Führen Sie beispielsweise Tests mit falschen DNS-Failover-Einstellungen oder falschen IAM-Berechtigungen durch.

Systemverhalten beobachten

Beobachten Sie, wie Load-Balancer, Systemdiagnosen und andere Mechanismen den Traffic weiterleiten. Verwenden Sie Google Cloud Tools wie Cloud Monitoring und Cloud Logging, um während des Tests Messwerte und Ereignisse zu erfassen.

Beobachten Sie Änderungen bei Latenz, Fehlerraten und Durchsatz während und nach der Fehlersimulation und prüfen Sie die Auswirkungen auf die Gesamtleistung. Identifizieren Sie alle Beeinträchtigungen oder Inkonsistenzen bei der Nutzererfahrung.

Achten Sie darauf, dass Protokolle generiert und Benachrichtigungen für wichtige Ereignisse wie Dienstausfälle oder Failover ausgelöst werden. Anhand dieser Daten können Sie die Effektivität Ihrer Benachrichtigungs- und Incident Response-Systeme prüfen.

Wiederherstellung anhand von RTO und RPO prüfen

Messen Sie, wie lange es dauert, bis das System nach einem Fehler wieder normal funktioniert, vergleichen Sie diese Daten mit dem definierten RTO und dokumentieren Sie alle Abweichungen.

Achten Sie darauf, dass Datenintegrität und -verfügbarkeit mit dem RPO übereinstimmen. Um die Datenbankkonsistenz zu testen, vergleichen Sie Snapshots oder Sicherungen der Datenbank vor und nach einem Fehler.

Bewerten Sie die Wiederherstellung des Dienstes und prüfen Sie, ob alle Dienste mit minimalen Unterbrechungen für die Nutzer wieder in einen funktionsfähigen Zustand versetzt wurden.

Ergebnisse dokumentieren und analysieren

Dokumentieren Sie jeden Testschritt, jedes Fehlerszenario und das entsprechende Systemverhalten. Fügen Sie Zeitstempel, Protokolle und Messwerte für detaillierte Analysen hinzu.

Heben Sie Engpässe, Single Points of Failure oder unerwartete Verhaltensweisen hervor, die während des Tests beobachtet wurden. Um die Priorisierung von Korrekturen zu erleichtern, kategorisieren Sie Probleme nach Schweregrad und Auswirkungen.

Schlagen Sie Verbesserungen an der Systemarchitektur, den Failover-Mechanismen oder den Überwachungseinrichtungen vor. Aktualisieren Sie anhand der Testergebnisse alle relevanten Failover-Richtlinien und -Playbooks. Präsentieren Sie den Stakeholdern einen Postmortem-Bericht. Der Bericht sollte die Ergebnisse, die gewonnenen Erkenntnisse und die nächsten Schritte zusammenfassen. Weitere Informationen finden Sie unter siehe Gründliche Postmortems durchführen.

Iterieren und verbessern

Um die kontinuierliche Zuverlässigkeit und Resilienz zu validieren, planen Sie regelmäßige Tests (z. B. vierteljährlich).

Führen Sie Tests in verschiedenen Szenarien durch, einschließlich Infrastrukturänderungen, Softwareupdates und erhöhten Trafficlasten.

Automatisieren Sie Failover-Tests mit CI/CD-Pipelines, um Zuverlässigkeitstests in Ihren Entwicklungszyklus zu integrieren.

Nutzen Sie während des Postmortems das Feedback von Stakeholdern und Endnutzern, um den Testprozess und die Systemresilienz zu verbessern.