Wie kann ich Ausfallzeiten beim Skalieren meines ElastiCache für Redis minimieren?

Letzte Aktualisierung: 19.07.2022

Ich möchte meine Ausfallzeiten während der Skalierung meines Amazon ElastiCache für Redis minimieren. Wie kann ich vorgehen?

Lösung

Beachten Sie Folgendes, um Ausfallzeiten zu minimieren:

  • Um die Auswirkungen der Synchronisieren zu minimieren, sollten Sie eine Skalierung bei hohen Workloads vermeiden. Wenn der Cluster unter hoher Workload steht und die Skalierung viel Zeit in Anspruch nimmt, reduzieren Sie die eingehenden Anfragen an Redis, um Synchronisierungsfehler zu vermeiden. Während des Skalierungsprozesses kann eine Synchronisierung (Hintergrundspeicherung, vergabelt oder unvergabelt) ausgelöst werden. Die Synchronisierung ist ein rechenintensiver Vorgang und benötigt zusätzlichen Speicher. Überprüfen Sie die Metrik SaveInProgress in Amazon CloudWatch, um festzustellen, wann die Synchronisierung stattgefunden hat. Beachten Sie, dass diese Metrik jede Minute Daten erfasst. Deshalb wird eine Synchronisierung, die in weniger als einer Minute abgeschlossen wurde, von der Metrik möglicherweise nicht erfasst. Weitere Informationen zum Überwachen von Workloads finden Sie unter Bewährte Methoden zur Überwachung bei Amazon ElastiCache für Redis mithilfe von Amazon CloudWatch.
  • Je nach Art der Skalierung kann ein neuer Knoten hinzukommen, ein Knoten aus einem Cluster entfernt werden oder die IP eines Knotens sich während der Skalierung ändern. Amazon ElastiCache für Redis bietet verschiedene Arten von Verbindungsendpunkten für die Verbindung mit dem Cluster. Die Wahl des Typs des Verbindungsendpunkts hängt von den Anfragen der Anwendung ab. Es empfiehlt sich, die Skalierung in einer Nicht-Produktionsumgebung zu testen, um unerwartete Probleme zu erkennen, die durch eine clientseitige Fehlkonfiguration beim Verbinden des Redis-Clusters verursacht werden.
  • Wenn der Client eine Verbindung zu einem neuen Replikat herstellt, das gerade synchronisiert wird, erscheint die Fehlermeldung LOADING: Redis is loading the dataset in memory (LADEN: Redis lädt den Datensatz in den Speicher). Konfigurieren Sie den Redis-Client oder den Anwendungscode so, dass die Abfrage auf einem anderen Replikat wiederholt wird, oder senden Sie eine Abfrage an den Primärknoten. Die zum Laden des Datensatzes benötigte Zeit hängt vom Datenvolumen und von der Leistung des Knotens ab. Testen Sie in Ihrer Testumgebung, ob dies ein Problem ist.
  • Sie können den Cluster so konfigurieren, dass die Skalierung nicht manuell, sondern automatisch vorgenommen wird. Die automatische Skalierung verhindert Leistungsprobleme, die durch einen plötzlichen Anstieg der eingehenden Workload verursacht werden. Weitere Informationen finden Sie unter Auto Scaling ElastiCache für Redis-Cluster.

Überblick über die Ausfallzeiten

Es gibt vier Skalierungsaktionen:

  • Abskalieren.
  • Aufskalieren.
  • Ändern der Knotentypen.
  • Ändern der Anzahl der Knotengruppen. Dies wird nur für Redis-Cluster (Cluster-Modus deaktiviert) unterstützt.

Weitere Informationen finden Sie unter Skalieren von ElastiCache für Redis-Clustern.

In der Regel beträgt die Ausfallzeit bei der Skalierung, abhängig von der Skalierungsaktion und der Clusterkonfiguration, maximal einige Sekunden. Im Folgenden finden Sie Erklärungen zu Ausfallzeiten für jeden Clustertyp und jede Skalierungsaktion:

Redis-Cluster (Cluster-Modus deaktiviert)

Abskalieren: Beim Abskalieren wird ein Replikatknoten aus Clustern entfernt. Sie können dies tun, um die Kosten zu senken. Beachten Sie, dass das Abskalieren auch die Lebensdauer der Daten verringert. Wenn Ihre Anwendungen nur einen primären Endpunkt für die Verbindung mit dem Cluster verwenden, führt das Entfernen der Replikatknoten nicht zu Ausfallzeiten. Dies liegt daran, dass der primäre Endpunkt auf den Primärknoten ausgerichtet ist.

Wenn Ihre Anwendungen jedoch Reader-Endpunkte oder einzelne Endpunkte für die Verbindung mit diesem Replikatknoten verwenden, wird die ursprüngliche Verbindung zu dem entfernten Replikatknoten unterbrochen, und die Anwendung muss eine neue TCP-Verbindung zu anderen Replikatknoten herstellen. Die Anwendung muss außerdem erneut eine DNS-Suche durchführen, um eine Verbindung mit dem entfernten Replikatknoten zu vermeiden. Die DNS-Verbreitung von Reader-Endpunkten kann zu Ausfallzeiten von einigen Sekunden führen, wenn der Client Reader-Endpunkte verwendet.

Aufskalieren: Beim Aufskalieren wird ein Replikatknoten in einem vorhandenen Cluster hinzugefügt. Der Primärknoten wird mit den neuen Knoten synchronisiert. Um Ausfallzeiten während der Synchronisierung zu vermeiden, sollten Sie eine Aufskalierung in einer Zeit mit minimaler Workload erwägen.

Ändern der Knotentypen: Beim Ändern von Knotentypen werden neue Knoten des angegebenen Typs erstellt. Der alte Primärknoten wird mit dem neuen Primärknoten synchronisiert und der neue Primärknoten wird mit neuen Replikatknoten synchronisiert. Stellen Sie während dieses Skalierungsprozesses sicher, dass:

  • Die Workload nicht so hoch ist, dass die Synchronisierung fehlschlägt.
  • Die IP der neuen Knoten ist möglicherweise nicht dieselbe wie die der alten Knoten. Ihre Anwendung muss eventuell erneut eine DNS-Suche auf dem primären Endpunkt oder Reader-Endpunkt durchführen und neue Verbindungen mit dem neuen Knoten herstellen. Die DNS-Verbreitung dauert einige Sekunden. Es kann daher zu einer gewissen Unterbrechung Ihres Dienstes kommen, bis der Client den neuen Knoten erreicht hat.
    In Redis-Versionen 5.0.5 oder höher wurde die Unterbrechung minimiert. Der Redis-Client versucht die Anfrage erneut bei einem neuen Knoten, wenn die Anfrage aufgrund der Beendigung des alten Knotens fehlgeschlagen ist. Es empfiehlt sich, ein Upgrade auf die neue Redis-Version durchzuführen, um von Optimierungen des ElastiCache-Services zu profitieren.

Redis-Cluster (Cluster-Modus aktiviert)

Abskalieren: Abskalieren bedeutet, einen Shard aus einem Cluster zu entfernen. Bevor der Shard entfernt wird, werden die Daten in diesem Shard auf andere Knoten migriert. Dieser Vorgang wird „Resharding“ genannt. Das Resharding verursacht zusätzliche Workload auf dem Cluster, und der Client muss den Redis-Cluster unterstützen. Informationen zur Minimierung von Ausfallzeiten bei der Abskalierung finden Sie unter Bewährte Methoden: Cluster-Größe online ändern.

Erwägen Sie eine schrittweise Skalierung, um Leistungsprobleme aufgrund einer übermäßigen Abskalierung zu minimieren. Wenn Sie zum Beispiel eine Abskalierung von 12 Shards auf 6 Shards anstreben, skalieren Sie zuerst von 12 Shards auf 9 Shards ab. Überprüfen Sie nach der ersten Abskalierung die Leistung des Clusters während der Spitzenzeiten und führen Sie dann eine weitere Abskalierung durch.

Aufskalieren: Beim Aufskalieren wird einem Cluster ein Shard hinzugefügt. Die Daten in anderen Shards werden auf den neuen Shard migriert. Dieser Vorgang wird „Resharding“ genannt. Das Resharding verursacht zusätzliche Workload auf dem Cluster, und der Client muss den Redis-Cluster unterstützen. Informationen zur Minimierung von Ausfallzeiten bei der Aufskalierung finden Sie unter Bewährte Methoden: Cluster-Größe online ändern.

Ändern der Knotentypen: Beim „Ändern der Knotentypen“ wird für jeden Shard der alte Primärknoten mit dem neuen Primärknoten synchronisiert. Anschließend werden die neuen Primärknoten mit den neuen Replikatknoten synchronisiert. Stellen Sie während dieses Skalierungsprozesses sicher, dass:

  • Die Workload nicht so hoch ist, dass die Synchronisierung fehlschlägt.
  • Die IP der neuen Knoten ist möglicherweise nicht dieselbe wie die der alten Knoten. Zum Ermitteln der IP-Adresse verwendet Ihre Anwendung möglicherweise den Befehl cluster nodes oder cluster slots, um aktualisierte Topologieinformationen aus dem Cluster abzurufen. Die meisten Redis-Clients, die Redis-Cluster unterstützen, können die Topologie des Clusters aktualisieren. Möglicherweise müssen Sie jedoch den Redis-Client dafür konfigurieren. Informationen zur Konfiguration Ihres Redis-Clients finden Sie in der Dokumentation für Ihren spezifischen Clienttyp.

Ändern der Anzahl der Knotengruppen: Wenn Sie die Anzahl der Knotengruppen ändern, wird die Anzahl der Replikatknoten in jedem Shard geändert. Wenn die Anzahl der Replikatknoten zunimmt, kommen neue Replikatknoten zum Cluster hinzu, und der Primärknoten wird mit dem neuen Knoten synchronisiert. Überprüfen Sie daher die Leistung der Primärknoten, bevor Sie zusätzliche Replikatknoten hinzufügen. Wenn die Anzahl der Replikatknoten abnimmt und der Client von einem entfernten Replikatknoten lesen muss, muss er die Abfrage an einen der neuen Replikatknoten senden. Der Client muss auch die Topologie des Clusters aktualisieren, um zu verhindern, dass weitere Anfragen an den entfernten Knoten gesendet werden.