Dieses Prinzip in der Zuverlässigkeitssäule 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 Lernschwerpunkt der Zuverlässigkeit relevant.
Übersicht über die Prinzipien
Damit Ihr System nach Fehlern wiederhergestellt werden kann, müssen Sie regelmäßig Tests durchführen, die regionale Failover, Release-Rollbacks und die Wiederherstellung von Daten aus Sicherungen 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 gesamten Region. Mit diesen Tests können Sie auch prüfen, ob sich Ihr System während einer Störung wie vorgesehen verhält.
Im unwahrscheinlichen Fall, dass eine gesamte Region ausfällt, müssen Sie den gesamten Traffic auf eine andere Region umleiten. Während des normalen Betriebs Ihrer Arbeitslast müssen Daten, die geändert werden, von der primären Region mit der Failover-Region synchronisiert werden. Sie müssen prüfen, ob die replizierten Daten immer sehr aktuell sind, damit Nutzer keinen Datenverlust oder Sitzungsabbruch erleiden. Das Load-Balancing-System muss außerdem jederzeit in der Lage sein, Traffic ohne Dienstunterbrechungen in die Failover-Region zu verschieben. Um die Ausfallzeit nach einem regionalen Ausfall zu minimieren, müssen Betriebstechniker auch in der Lage sein, den Nutzertraffic manuell und effizient in möglichst kurzer Zeit von einer Region wegzuleiten. Dieser Vorgang wird manchmal als Entleeren einer Region bezeichnet. Das bedeutet, dass Sie den eingehenden Traffic in die Region beenden 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 Abschnitten.
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 Planung der Notfallwiederherstellung.
- Bewerten Sie die Ausfallsicherheit und Fehlertoleranz des Systems in verschiedenen Fehlerszenarien.
- Testen Sie die Effektivität automatisierter Failover-Mechanismen.
Legen Sie fest, welche Komponenten, Dienste oder Regionen in den Testumfang einbezogen werden sollen. 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-Interconnect-Verbindungen.
Umgebung für Tests vorbereiten
Wählen Sie eine geeignete Umgebung aus, vorzugsweise eine Staging- oder Sandbox-Umgebung, die Ihre Produktionsumgebung repliziert. Wenn Sie den Test in der Produktion durchführen, sollten Sie Sicherheitsmaßnahmen wie automatisches Monitoring und manuelle Rollback-Verfahren bereithalten.
Erstellen Sie einen Sicherungsplan. Erstellen Sie Snapshots oder Back-ups kritischer Datenbanken und Dienste, um Datenverlust während des Tests zu vermeiden. Sorgen Sie dafür, dass Ihr Team auf manuelle Eingriffe vorbereitet ist, falls die automatisierten Failover-Mechanismen fehlschlagen.
Damit der Test nicht unterbrochen wird, müssen Ihre IAM-Rollen (Identity and Access Management), 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 Betrieb, DevOps und Anwendungsinhaber, über den Testzeitplan, den Umfang und die potenziellen Auswirkungen. Stellen Sie den Stakeholdern einen geschätzten Zeitplan und die erwarteten Verhaltensweisen während des Tests zur Verfügung.
Fehlerszenarien simulieren
Planen und führen Sie Fehler mit Tools wie Chaos Monkey aus. Sie können benutzerdefinierte Skripts verwenden, um Ausfälle 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 mithilfe von Firewallregeln oder API-Einschränkungen basierend auf Ihrem Testumfang zu simulieren. Eskalieren Sie die Fehlerszenarien schrittweise, um das Systemverhalten unter verschiedenen Bedingungen zu beobachten.
Führen Sie Lasttests zusammen mit Ausfallszenarien durch, um die reale Nutzung während Ausfällen zu simulieren. Testen Sie die Auswirkungen von kaskadierenden Fehlern, z. B. wie sich Frontend-Systeme verhalten, wenn Backend-Dienste nicht verfügbar sind.
Testen Sie Szenarien mit Fehlkonfigurationen, um Konfigurationsänderungen zu validieren und die Widerstandsfähigkeit des Systems gegenüber menschlichen Fehlern 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 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 bei Latenz, Fehlerraten und Durchsatz während und nach der Ausfallsimulation und überwachen Sie die Auswirkungen auf die Gesamtleistung. Identifizieren Sie Beeinträchtigungen oder Inkonsistenzen in der Nutzererfahrung.
Sorgen Sie dafür, dass Logs 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 überprü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 Abweichungen.
Sorgen Sie dafür, dass Datenintegrität und -verfügbarkeit mit dem RPO übereinstimmen. Wenn Sie die Datenbankkonsistenz testen möchten, vergleichen Sie Snapshots oder Sicherungen der Datenbank vor und nach einem Ausfall.
Bewerten Sie die Wiederherstellung der Dienste und bestätigen Sie, dass alle Dienste mit minimalen Unterbrechungen für die Nutzer in einen funktionsfähigen Zustand zurückversetzt 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 unerwartetes Verhalten hervor, die während des Tests beobachtet wurden. Kategorisieren Sie Probleme nach Schweregrad und Auswirkungen, um die Behebung zu priorisieren.
Schlagen Sie Verbesserungen für die Systemarchitektur, Failover-Mechanismen oder Monitoring-Einrichtungen vor. Aktualisieren Sie basierend auf den Testergebnissen alle relevanten Failover-Richtlinien und Playbooks. Stakeholdern einen Postmortem-Bericht präsentieren Der Bericht sollte die Ergebnisse, die gewonnenen Erkenntnisse und die nächsten Schritte zusammenfassen. Weitere Informationen finden Sie unter Gründliche Post-Mortem-Analysen durchführen.
Iterieren und verbessern
Planen Sie regelmäßige Tests (z. B. vierteljährlich), um die Zuverlässigkeit und Ausfallsicherheit zu prüfen.
Führen Sie Tests in verschiedenen Szenarien durch, einschließlich Infrastrukturänderungen, Softwareupdates und erhöhter Traffic-Lasten.
Automatisieren Sie Failover-Tests mithilfe von CI/CD-Pipelines, um Zuverlässigkeitstests in Ihren Entwicklungszyklus einzubinden.
Nutzen Sie während der Post-Mortem-Analyse das Feedback von Stakeholdern und Endnutzern, um den Testprozess und die Systemstabilität zu verbessern.