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 der Zuverlässigkeit relevant.

Prinzipübersicht

Damit 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 gesamten Region. Außerdem können Sie damit prüfen, ob sich Ihr System bei einer Störung wie vorgesehen verhält.

Im unwahrscheinlichen Fall, dass eine gesamte Region ausfällt, müssen Sie den gesamten Traffic zu einer anderen Region weiterleiten. Im Normalbetrieb Ihrer Arbeitslast müssen Daten, wenn sie 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 keinen Datenverlust oder Sitzungsunterbrechungen erleiden. Das Load-Balancing-System muss außerdem in der Lage sein, 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 im Testumfang enthalten sind. 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 Produktionskonfiguration 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.

Um Testunterbrechungen zu vermeiden, 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 Anwendungsverantwortliche, ü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 kritischer Dienste 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 Testumfang 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 aus.

Systemverhalten beobachten

Beobachten Sie, wie Load-Balancer, Systemdiagnosen und andere Mechanismen 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 Nutzerfreundlichkeit.

Achten Sie darauf, dass Logs generiert und Benachrichtigungen für wichtige Ereignisse wie Dienstausfälle oder Failover ausgelöst werden. Mit diesen 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 der Normalbetrieb des Systems nach einem Fehler wieder aufgenommen wird, vergleichen Sie diese Daten mit dem definierten RTO und dokumentieren Sie alle Abweichungen.

Achten Sie darauf, dass Datenintegrität und -verfügbarkeit dem RPO entsprechen. 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 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, Logs 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 Monitoring-Einrichtungen 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.

Wiederholen 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öhter Trafficlast.

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

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