Dieses Prinzip im Zuverlässigkeitsbereich des Google Cloud Well-Architected Framework enthält Empfehlungen, die Ihnen helfen, Tests für die Wiederherstellung im Falle von Fehlern zu entwerfen und auszuführen.
Dieses Prinzip ist für den Lernbereich Zuverlässigkeit relevant.
Übersicht über die Grundsätze
Damit Ihr System nach Ausfällen wiederhergestellt werden kann, müssen Sie regelmäßig Tests durchführen, die regionale Failover, Release-Rollbacks und die Wiederherstellung von Daten aus Back-ups umfassen.
Mit diesen Tests können Sie Reaktionen auf Ereignisse üben, die ein großes Risiko für die Zuverlässigkeit darstellen, z. B. den Ausfall einer ganzen Region. Mit diesen Tests können Sie auch prüfen, ob sich Ihr System bei einer Störung wie vorgesehen verhält.
Im unwahrscheinlichen Fall, dass eine ganze Region ausfällt, müssen Sie den gesamten Traffic auf eine andere Region umleiten. Wenn Daten während des normalen Betriebs Ihrer Arbeitslast geändert werden, müssen sie von der primären Region in die Failover-Region synchronisiert werden. Sie müssen dafür sorgen, dass die replizierten Daten immer sehr aktuell sind, damit Nutzer keinen Datenverlust oder Sitzungsabbruch erleiden. Das Load-Balancing-System muss außerdem in der Lage sein, den Traffic jederzeit ohne Dienstunterbrechungen in die Failover-Region zu verlagern. Um Ausfallzeiten nach einem regionalen Ausfall zu minimieren, müssen Betriebsingenieure auch in der Lage sein, den Nutzer-Traffic manuell und effizient von einer Region wegzuleiten, und zwar in möglichst kurzer Zeit. Dieser Vorgang wird manchmal als Entleeren einer Region bezeichnet. Das bedeutet, dass Sie den eingehenden Traffic in die Region stoppen und den gesamten Traffic an einen anderen Ort verschieben.
Empfehlungen
Beachten Sie beim Entwerfen und Ausführen von Tests zur Fehlerbehebung die Empfehlungen in den folgenden Unterabschnitten.
Testziele und -umfang definieren
Definieren Sie klar, was Sie mit dem Test 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 Systemresilienz und Fehlertoleranz in verschiedenen Fehlerszenarien.
- Effektivität automatisierter Failover-Mechanismen testen
Legen Sie fest, welche Komponenten, Dienste oder Regionen im Testumfang enthalten sind. Der Bereich kann bestimmte Anwendungsebenen wie das Frontend, das Backend und die Datenbank oder bestimmte Google Cloud Ressourcen wie Cloud SQL-Instanzen oder GKE-Cluster umfassen. Im Umfang müssen auch 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 vorbereiten.
Erstellen Sie einen Sicherungsplan. Erstellen Sie Snapshots oder Sicherungen wichtiger Datenbanken und Dienste, um Datenverlust während des Tests zu verhindern. Sorgen Sie dafür, dass Ihr Team bereit ist, manuell einzugreifen, falls die automatisierten Failover-Mechanismen fehlschlagen.
Damit es nicht zu Unterbrechungen bei Tests kommt, müssen Ihre IAM-Rollen, Richtlinien und Failover-Konfigurationen richtig eingerichtet sein. Prüfen Sie, ob die erforderlichen Berechtigungen für die Testtools und ‑skripts vorhanden sind.
Stakeholder, einschließlich Betriebs-, DevOps- und Anwendungsverantwortliche, über den Testplan, den Umfang und die potenziellen Auswirkungen informieren. Informieren Sie die Stakeholder über den geschätzten Zeitplan und das erwartete Verhalten während des Tests.
Fehlerszenarien simulieren
Planen und führen Sie Ausfälle mit Tools wie Chaos Monkey aus. Sie können benutzerdefinierte Skripts verwenden, um Fehler kritischer Dienste zu 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. Dazu verwenden Sie Firewallregeln oder API-Einschränkungen, die auf dem Umfang Ihres Tests basieren. Eskalieren Sie die Fehlerszenarien schrittweise, um das Systemverhalten unter verschiedenen Bedingungen zu beobachten.
Führen Sie Lasttests zusammen mit Fehlerszenarien ein, um die reale Nutzung bei Ausfällen zu simulieren. Testen Sie die Auswirkungen von kaskadierenden Fehlern, z. B. wie sich Frontendsysteme verhalten, wenn Backend-Dienste nicht verfügbar sind.
Um Konfigurationsänderungen zu validieren und die Widerstandsfähigkeit des Systems gegen menschliche Fehler zu bewerten, sollten Sie Testszenarien mit Fehlkonfigurationen durchführen. Führen Sie beispielsweise Tests mit falschen DNS-Failover-Einstellungen oder falschen IAM-Berechtigungen aus.
Systemverhalten überwachen
Beobachten 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 während und nach der Fehlersimulation Änderungen bei Latenz, Fehlerraten und Durchsatz und überwachen Sie die Auswirkungen auf die Gesamtleistung. Stellen Sie fest, ob es zu einer Verschlechterung oder Inkonsistenzen bei der Nutzerfreundlichkeit kommt.
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 Systeme für Benachrichtigungen und die Reaktion auf Vorfälle überprü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.
Sorgen Sie dafür, 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 bestätigen Sie, dass alle Dienste in einen funktionsfähigen Zustand zurückversetzt wurden und die Nutzer nur minimal beeinträchtigt wurden.
Ergebnisse dokumentieren und analysieren
Dokumentieren Sie jeden Testschritt, jedes Ausfallszenario 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 unerwartetes Verhalten hervor, die während des Tests beobachtet wurden. Um die Priorisierung von Korrekturen zu erleichtern, sollten Sie Probleme nach Schweregrad und Auswirkungen kategorisieren.
Verbesserungen an der Systemarchitektur, den Failover-Mechanismen oder den Monitoring-Einrichtungen vorschlagen. Aktualisieren Sie anhand der Testergebnisse alle relevanten Failover-Richtlinien und Playbooks. Stakeholdern einen Postmortem-Bericht präsentieren 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
Um die anhaltende Zuverlässigkeit und Stabilität zu validieren, sollten Sie regelmäßige Tests (z. B. vierteljährlich) einplanen.
Führen Sie Tests in verschiedenen Szenarien durch, z. B. bei Infrastrukturänderungen, Softwareupdates und erhöhten Traffic-Lasten.
Automatisieren Sie Failover-Tests mit CI/CD-Pipelines, um Zuverlässigkeitstests in Ihren Entwicklungszyklus zu integrieren.
Nutzen Sie während der Post-Mortem-Analyse das Feedback von Stakeholdern und Endnutzern, um den Testprozess und die Systemstabilität zu verbessern.