Wie behebe ich Fehlermeldungen bei ElastiCache-Redis-Clients?
Ich erhalte Fehlermeldungen, wenn ich Redis-Clients verwende, um eine Verbindung zu meinem Amazon-ElastiCache-Redis-Cluster herzustellen.
Lösung
Fehlermeldung „Connection reset by peer“
Wenn der Redis-Server die Verbindung beendet, wird die folgende Fehlermeldung angezeigt:
„java.io.IOException: Connection reset by peer
io.netty.channel.unix.Errors$NativeIoException: readAddress(..) failed: Connection reset by peer“
Dieser Fehler kann seinen Ursprung beim Server oder beim Client haben.
Wenn die Fehlermeldung vom Server stammt, ergreife die folgenden Maßnahmen, um das Problem zu beheben:
- Prüfe, ob zugrunde liegende Hardware- oder Netzwerkprobleme vorliegen.
- Führe den Befehl CLIENT LIST aus, um das Client-Ausgabepufferkontingent zu überprüfen. Weitere Informationen findest du unter CLIENT LIST auf der Redis-Website. Die Parameter in der Parametergruppe deines Clusters definieren die Client-Ausgabepufferkontingente in ElastiCache.
- Stelle fest, ob der Timeout-Wert in deiner ElastiCache-Parametergruppe sein Kontingent ausgeschöpft hat.
Wenn der Fehler vom Client herrührt, ergreife die folgenden Maßnahmen, um das Problem zu beheben:
- Prüfe, ob die Timeout-Einstellungen in deiner Anwendung zu niedrig sind.
- Suche in der offiziellen Dokumentation oder auf den Supportseiten deiner Redis-Clientbibliothek nach bekannten Fehlern, die mit Verbindungsrücksetzungen in Zusammenhang stehen.
- Stelle sicher, dass dein Redis-Client auf die neueste Version aktualisiert wurde.
- Wenn du TLS für den Cluster aktiviert hast, vergewissere dich, dass du die Verschlüsselung auf dem Client konfiguriert hast.
Fehlermeldung „Connection refused“ oder „Unable to connect to Redis“
Wenn der Server die Verbindung ablehnt, wird folgende Fehlermeldung angezeigt:
„JedisConnectionException: java.net.ConnectException: Connection refused
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException:
Connection refused
ECONNREFUSED
org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis org.redisson.client.RedisConnectionException: Unable to connect to Redis server ###“
Um dieses Problem zu beheben, überprüfe Folgendes:
- Der Redis-Endpunkt ist erreichbar. Verwende Tools wie telnet oder redis-cli, um dies festzustellen.
- Die Sicherheitsgruppenregeln gestatten den Datenverkehr auf Port 6379.
- Die Verbindung wird nicht durch Firewalls blockiert.
- Es gibt keine Einschränkungen bezüglich Speicher-, CPU-, Netzwerk- oder Verbindungsressourcen.
Hinweis: Du kannst Tools wie tcpdump verwenden, um Verbindungsversuche zu analysieren.
Fehler „Zeitüberschreitung bei der Verbindung"
Wenn bei der Herstellung der Verbindung ein Timeout auftritt, wird folgende Fehlermeldung angezeigt:
„redis.exceptions.TimeoutError: Timeout connecting to server io.netty.channel.ConnectTimeoutException: connection timed out org.redisson.client.RedisTimeoutException: Unable to acquire connection!“
Der Fehler Connection timed out kann dauerhaft oder nur sporadisch auftreten.
Wenn der Timeout-Fehler weiterhin auftritt, ergreife die folgenden Maßnahmen, um das Problem zu beheben:
- Überprüfe die Netzwerkkonnektivität und -konfiguration, um die Verbindung zum ElastiCache-Redis-Cluster zu bestätigen.
- Vergewissere dich, dass du die richtigen Redis-Endpunkte angegeben hast.
Informationen zur Behebung von dauerhaften Timeout-Fehlern findest du unter Dauerhafte Verbindungsprobleme.
Wenn die Timeout-Fehler nur sporadisch auftreten, gehe wie folgt vor, um das Problem zu beheben:
- Verwende die ElastiCache-Konsole, um nach Knoten-Wiederherstellungs- oder Failover-Ereignissen zu suchen.
- Prüfe, ob Einschränkungen für Speicher-, CPU-, Netzwerk- oder Verbindungsressourcen vorliegen.
- Stelle fest, ob die Latenz hoch war, als das Problem auftrat.
- Überprüfe die Timeout-Konfiguration in deiner Client-Anwendung.
Fehlermeldung „Read timed out“
Wenn der Befehl nicht innerhalb des von dir konfigurierten Timeout-Werts ausgeführt wird, erscheint folgende Fehlermeldung:
„StackExchange.Redis.RedisTimeoutException: Timeout performing GET (5000ms) io.lettuce.core.RedisCommandTimeoutException: Command timed out org.springframework.data.redis.RedisConnectionFailureException: java.net.SocketTimeoutException: Read timed out redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out“
Diese Fehlermeldung wird angezeigt, wenn der Redis-Thread komplexe Befehle oder Befehle mit langer Ausführungszeit verarbeitet.
Gehe wie folgt vor, um dieses Problem zu beheben:
- Prüfe, ob Einschränkungen für Speicher-, CPU-, Netzwerk- oder Verbindungsressourcen vorliegen.
- Vergewissere dich, dass die Ressourcen auf der Clientseite nicht gedrosselt werden.
- Stelle fest, ob die Latenz hoch war, als das Problem auftrat.
- Stelle fest, ob Befehle mit langer Ausführungszeit ausgeführt werden, die die Redis-Engine blockieren, da Redis eine Single-Thread-Engine ist, die nur eine Abfrage gleichzeitig verarbeiten kann. Eine Anleitung findest du unter SLOWLOG GET auf der Redis-Website.
- Überprüfe, ob zu viele Befehle pro Zeiteinheit ausgeführt werden. Eine Anleitung findest du unter INFO auf der Redis-Website.
Fehlermeldung „Operation timed out“
Bleibt die Verbindung länger als der von dir festgelegte Timeout-Wert im Leerlauf, wird die folgende Fehlermeldung angezeigt:
„io.lettuce.core.RedisException: java.io.IOException: Operation timed out“
Es gibt mehrere Gründe, warum die Fehlermeldung Operation timed out angezeigt wird:
- Der ElastiCache-Cluster ist stark ausgelastet und kann Befehle nicht rechtzeitig verarbeiten.
- Der Netzwerkverkehr überschreitet das Bandbreitenkontingent auf der Cluster- oder Clientseite.
Gehe wie folgt vor, um dieses Problem zu beheben:
- Prüfe, ob Einschränkungen für Speicher-, CPU-, Netzwerk- oder Verbindungsressourcen vorliegen.
- Vergewissere dich, dass die Ressourcen auf der Clientseite nicht gedrosselt werden.
- Halte Ausschau nach Befehlen mit langer Ausführungszeit, die die Redis-Engine blockieren. Eine Anleitung findest du unter SLOWLOG GET auf der Redis-Website.
- Überprüfe die Timeout-Konfiguration in deiner Client-Anwendung und in deinem Cluster und stelle die entsprechenden Timeout-Parameter ein, um Verbindungsabbrüche bei Leerlauf zu verhindern.
Fehlermeldung „NOAUTH Authentication required“
Wenn du eine Verbindung zu einem Redis-Server herstellen, der eine Authentifizierung erfordert, aber keine gültigen Anmeldeinformationen bereitstellt, wird die Fehlermeldung NOAUTH Authentication required ausgegeben.
Gehe wie folgt vor, um dieses Problem zu beheben:
- Gib den richtigen Benutzernamen und das richtige Passwort ein, um eine Verbindung zum Cluster herzustellen.
- Stelle sicher, dass die Konfiguration der Clientbibliothek und die Verbindungszeichenfolge die richtige Syntax aufweisen.
Fehlermeldung „ERR max number of clients reached“
Wenn ein Clusterknoten sein maximales Verbindungskontingent erreicht, wird die Fehlermeldung ERR max number of clients reached angezeigt.
Gehe wie folgt vor, um dieses Problem zu beheben:
- Überprüfe die CurrConnections-Metrik und vergewissere dich, dass sie innerhalb des maxclients-Kontingents liegt. Weitere Informationen findest du auf der Redis-Website unter Maximale Anzahl gleichzeitig verbundener Clients.
- Verwende Verbindungspooling, um Verbindungen wiederzuverwenden.
- Stelle in deiner Client-Konfiguration die entsprechenden Timeout-Werte ein.
- Konfiguriere die Clients so, dass sie sich direkt mit Lesereplikaten für Lesevorgänge verbinden, um die Last auf die Clusterknoten zu verteilen.
Fehlermeldung „LOADING Redis is loading the dataset in memory“
Wenn du eine Verbindung zu einem Knoten herstellst, der während des Startups oder der Synchronisierung des Replikats seinen Datensatz in den Speicher lädt, wird folgende Fehlermeldung angezeigt:
„LOADING Redis is loading the dataset in memory (error) LOADING Redis is loading the dataset in memory“
Es hat sich bewährt, Backoff zu implementieren. Weitere Informationen findest du im Abschnitt Redis-Cluster-Client-Erkennung und exponentielles Backoff unter Bewährte Methoden: Redis clients and Amazon ElastiCache for Redis.
Fehlermeldung „OOM command not allowed when used memory > 'maxmemory'“
Der Parameter maxmemory legt die maximale Speichermenge fest, die ein Redis-Knoten als Datenspeicher verwenden kann.
Wenn die Speicherauslastung das maxmemory-Kontingent überschreitet, wendet Redis die maxmemory-policy an, die du in der Parametergruppe festgelegt hast. Ausgehend von der maxmemory-policy entzieht Redis Schlüssel oder gibt die Fehlermeldung OOM command not allowed aus.
Gehe wie folgt vor, um dieses Problem zu beheben:
- Konfiguriere die maxmemory-policy so, dass Schlüssel entsprechend deinen Anwendungsanforderungen entzogen werden.
- Führe ein Upgrade des Clusters auf einen größeren Knotentyp durch, wenn die Speicherauslastung das Kontingent nachhaltig überschreitet.
Fehlermeldung „CROSSSLOT Keys in request don't hash to the same slot“
Wenn du Multi-Schlüssel-Operationen auf einem Cluster ausführst, bei dem der Clustermodus aktiviert ist und verschiedene Hash-Slots vorhanden sind, wird der CROSSSLOT-Fehler angezeigt.
Informationen zur Behebung dieses Problems findest du unter Wie behebe ich den CROSSSLOT-Fehler, den ich erhalte, wenn ich Multi-Schlüssel-Operationen auf einem selbst gestalteten ElastiCache(Redis OSS)-Cluster verwende?
Fehlermeldung „CLUSTERDOWN The Cluster is down“
Wenn ein Knoten nicht mehr reagiert, ist der Cluster nicht mehr verfügbar und du erhältst die Fehlermeldung The cluster is down.
Gehe wie folgt vor, um dieses Problem zu beheben:
- Verwende die ElastiCache-Konsole, um nach Knoten-Wiederherstellungs- oder Failover-Ereignissen zu suchen.
- Prüfe, ob Einschränkungen für Speicher-, CPU-, Netzwerk- oder Verbindungsressourcen vorliegen.
- Prüfe, ob das Problem von Befehlen mit langsamer Ausführung herrührt. Eine Anleitung findest du unter SLOWLOG GET auf der Redis-Website.
Fehlermeldung „READONLY You can't write against a read-only replica“
Die folgenden Gründe erläutern, warum beim Schreibversuch auf einen Redis-Knoten, den du als Lesereplikat konfiguriert hast, eine Fehlermeldung ausgegeben wird:
- Deine Anwendung stellt eine direkte Verbindung zu einem Lesereplikat her.
- Das DNS-Caching in der Anwendung leitet den Datenverkehr an den alten Primärknoten weiter.
Weitere Informationen zur Behebung des Fehlers findest du unter Wie behebe ich den Fehler READONLY, den ich nach einem Failover in meinem selbst gestalteten ElastiCache-for-Redis-Cluster erhalte?
Fehlermeldung „MOVED [slot] [IP address] [port]“
Die Umleitungsnachricht MOVED enthält den Hash-Slot, die IP-Adresse und den Port des Knotens für den angeforderten Schlüssel:
„-MOVED 3999 127.0.0.1:6381“
Aus den folgenden Gründen wird möglicherweise der Fehler MOVED angezeigt:
- Der Client versucht, auf einen Schlüssel in einem Hash-Slot zuzugreifen, der sich nicht auf dem verbundenen Knoten befindet.
- Du hast den Clustermodus für den Cluster aktiviert, aber der Client ist nicht clusterfähig.
- Dein Lesereplikat ist nicht als schreibgeschützt markiert.
- Dein Client hat veraltete Cluster-Informationen, z. B. eine geänderte Anzahl der Shards oder Knoten.
Gehe wie folgt vor, um diese Probleme zu beheben:
- Wenn du den Clustermodus aktiviert hast, stelle sicher, dass der Client clusterfähig ist.
- Führe den Befehl readonly aus, um sicherzustellen, dass der Replikatknoten Anfragen liest. Weitere Informationen findest du unter Wie löse ich Redis-Client-Leseanforderungen auf, die in ElastiCache für Redis an den Primärknoten eines Shards statt an einen Replikatknoten umgeleitet werden?
- Konfiguriere den Client so, dass er die Cluster-Topologie häufig abfragt.
Hinweis: Um die Details der Shards des Clusters anzuzeigen, führe den Befehl CLUSTER SHARDS aus. Clusterknotendetails erhältst du mit dem Befehl CLUSTER NODES. Weitere Informationen findest du unter CLUSTER-SHARDS und CLUSTERKNOTEN auf der Redis-Website.
- Themen
- Database
- Sprache
- Deutsch

Relevanter Inhalt
AWS OFFICIALAktualisiert vor 4 Jahren