Tests zur Wiederherstellung nach Fehlern durchführen

Last reviewed 2024-12-30 UTC

Dieses Prinzip in der Säule „Zuverlässigkeit“ des Google Cloud -Architektur-Frameworks enthält Empfehlungen zum Entwerfen und Ausführen von Wiederherstellungstests im Falle von Ausfällen.

Dieses Prinzip ist für den Lern- Fokusbereich „Zuverlässigkeit“ relevant.

Grundsatzübersicht

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 Sicherungen umfassen.

So können Sie die Reaktion auf Ereignisse üben, die ein hohes Risiko für die Zuverlässigkeit darstellen, z. B. der 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 prüfen, ob die replizierten Daten immer auf dem neuesten Stand sind, damit Nutzer keine Datenverluste oder Sitzungsunterbrechungen erleiden. Das Load Balancing-System muss außerdem in der Lage sein, den Traffic jederzeit ohne Dienstunterbrechungen auf die Failover-Region umzuleiten. Um die Ausfallzeit nach einem regionalen Ausfall zu minimieren, müssen die Betriebsingenieure auch in der Lage sein, den Nutzerverkehr manuell und effizient innerhalb kürzester Zeit von einer Region wegzuleiten. Dieser Vorgang wird manchmal als Entleeren einer Region bezeichnet. Das bedeutet, dass der einkommende Traffic in die Region gestoppt und der gesamte Traffic an anderer Stelle weitergeleitet wird.

Empfehlungen

Berücksichtigen Sie beim Entwerfen und Ausführen von Tests zur Fehlerwiederherstellung die Empfehlungen in den folgenden Abschnitten.

Testziele und -umfang definieren

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

  • Prüfen 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 unter verschiedenen Fehlerszenarien.
  • Testen Sie die Effektivität automatisierter Failover-Mechanismen.

Legen Sie fest, welche Komponenten, Dienste oder Regionen in den Test einbezogen werden sollen. Der Umfang kann bestimmte Anwendungsebenen wie das Frontend, das Backend und die Datenbank umfassen oder bestimmte Google Cloud -Ressourcen wie Cloud SQL-Instanzen oder GKE-Cluster. Der Umfang muss auch alle externen Abhängigkeiten angeben, 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 Ihre Produktionsumgebung nachahmt. Wenn Sie den Test in der Produktion durchführen, sollten Sie Sicherheitsmaßnahmen wie automatisiertes Monitoring und manuelle Rollback-Verfahren bereithalten.

Erstellen Sie einen Sicherungsplan. Erstellen Sie Snapshots oder Sicherungen kritischer Datenbanken und Dienste, um Datenverluste während des Tests zu vermeiden. Ihr Team muss in der Lage sein, manuelle Eingriffe vorzunehmen, falls die automatischen Failover-Mechanismen versagen.

Achten Sie darauf, dass Ihre IAM-Rollen, ‑Richtlinien und ‑Failover-Konfigurationen richtig eingerichtet sind, um Testunterbrechungen zu vermeiden. Prüfen Sie, ob die erforderlichen Berechtigungen für die Testtools und ‑scripts vorhanden sind.

Informieren Sie die Stakeholder, einschließlich der Betriebsabteilung, DevOps-Mitarbeiter und Anwendungseigentümer, über den Testzeitplan, den Umfang und die potenziellen Auswirkungen. Stellen Sie den Stakeholdern einen geschätzten Zeitplan und das erwartete Verhalten während des Tests zur Verfügung.

Fehlerszenarien simulieren

Planen und führen Sie Ausfälle mithilfe von Tools wie Chaos Monkey aus. Mit benutzerdefinierten Scripts können Sie Ausfälle kritischer Dienste simulieren, z. B. das Herunterfahren eines primären Knotens in einem mehrzonenfähigen GKE-Cluster oder einer deaktivierten Cloud SQL-Instanz. Sie können auch Scripts verwenden, um einen regionsweiten Netzwerkausfall zu simulieren. Dazu verwenden Sie Firewallregeln oder API-Einschränkungen, die auf den Umfang des Tests abgestimmt sind. Steigern Sie die Fehlerszenarien nach und nach, um das Systemverhalten unter verschiedenen Bedingungen zu beobachten.

Führen Sie Lasttests zusammen mit Fehlerszenarien durch, um die tatsächliche Nutzung bei Ausfällen zu simulieren. Testen Sie die Auswirkungen von Kaskadenfehlern, z. B. das Verhalten von Frontend-Systemen, wenn Backend-Dienste nicht verfügbar sind.

Testen Sie Szenarien mit Fehlkonfigurationen, um Konfigurationsänderungen zu validieren und die Resilienz des Systems gegenüber menschlichen Fehlern zu bewerten. Beispiel: Sie führen Tests mit falschen DNS-Failover-Einstellungen oder falschen IAM-Berechtigungen aus.

Systemverhalten beobachten

Überwachen, 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. Identifizieren Sie Leistungseinbußen oder Inkonsistenzen bei der Nutzererfahrung.

Sorgen Sie dafür, 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 Notfallreaktionssysteme prüfen.

Wiederherstellung anhand von RTO und RPO prüfen

Messen Sie, wie lange es dauert, bis das System nach einem Ausfall wieder normal funktioniert. Vergleichen Sie diese Daten dann mit dem definierten RTO und dokumentieren Sie etwaige Lücken.

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.

Prüfen Sie die Dienstwiederherstellung und bestätigen Sie, dass alle Dienste wieder funktionsfähig sind und die Nutzer nur minimal beeinträchtigt werden.

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 unerwartetes Verhalten hervor, das während des Tests beobachtet wurde. Kategorisieren Sie Probleme nach Schweregrad und Auswirkungen, um die Fehlerbehebung zu priorisieren.

Verbesserungen an der Systemarchitektur, den Failover-Mechanismen oder den Monitoring-Konfigurationen vorschlagen. 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 Umfassende Postmortem-Analysen durchführen.

Iterieren und verbessern

Planen Sie regelmäßige Tests (z. B. vierteljährlich), um die anhaltende Zuverlässigkeit und Ausfallsicherheit zu prüfen.

Führen Sie Tests unter verschiedenen Szenarien durch, einschließlich Infrastrukturänderungen, Softwareupdates und erhöhter Traffic-Lademengen.

Mit CI/CD-Pipelines können Sie Failover-Tests automatisieren und Zuverlässigkeitstests in Ihren Entwicklungszyklus einbinden.

Nutzen Sie während der Postmortem-Analyse das Feedback von Stakeholdern und Endnutzern, um den Testprozess und die Systemresilienz zu verbessern.