Salta al contenuto

Come posso risolvere i messaggi di errore dei client ElastiCache Redis?

9 minuti di lettura
0

Ricevo messaggi di errore quando utilizzo i client Redis per connettermi al mio cluster Amazon ElastiCache Redis.

Risoluzione

Errore "Connection reset by peer"

Quando il server Redis termina la connessione, ricevi il seguente messaggio di errore:

"java.io.IOException: Connection reset by peer
io.netty.channel.unix.Errors$NativeIoException: readAddress(..) failed: Connection reset by peer"

L'errore può provenire dal server o dal client.

Se ricevi l'errore dal server, intraprendi le seguenti azioni per risolvere il problema:

  • Verifica la presenza di problemi hardware o di rete sottostanti.
  • Esegui il comando CLIENT LIST per verificare la quota del buffer di output del client. Per ulteriori informazioni, consulta CLIENT LIST sul sito web di Redis. I parametri nel gruppo di parametri del cluster definiscono le quote del buffer di output del client in ElastiCache.
  • Controlla se il valore di timeout nel gruppo di parametri ElastiCache ha raggiunto la sua quota.

Se ricevi l'errore dal client, intraprendi le seguenti azioni per risolvere il problema:

  • Controlla se le impostazioni di timeout nell'applicazione sono troppo basse.
  • Consulta nella documentazione ufficiale o nelle pagine di supporto della libreria client Redis i bug noti relativi al ripristino della connessione.
  • Verifica di disporre dell'ultima versione del client Redis.
  • Se hai attivato TLS per il cluster, accertati di aver configurato la crittografia sul client.

Errore "Connection refused" o "Unable to connect to Redis"

Quando il server rifiuta la connessione, ricevi il seguente messaggio di errore:

"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 ###"

Per risolvere il problema, verifica quanto segue:

Nota: puoi utilizzare strumenti come tcpdump per analizzare i tentativi di connessione.

Errore "Connection timed out"

Quando la connessione scade, ricevi il seguente messaggio di errore:

"redis.exceptions.TimeoutError: Timeout connecting to server io.netty.channel.ConnectTimeoutException: connection timed out org.redisson.client.RedisTimeoutException: Unable to acquire connection!"

L'errore Connection timed out può essere persistente o intermittente.

Se l'errore è persistente, intraprendi le seguenti azioni per risolvere il problema:

  • Verifica la connettività e la configurazione di rete per confermare la connessione al cluster ElastiCache Redis.
  • Verifica di aver specificato gli endpoint Redis corretti.

Per risolvere errori di timeout persistenti, consulta Problemi di connessione persistenti.

Se l'errore di timeout è intermittente, intraprendi le seguenti azioni per risolvere il problema:

Errore "Read timed out"

Quando il comando non viene completato entro il valore di timeout configurato, ricevi il seguente messaggio di errore:

"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"

L'errore si verifica quando il thread Redis elabora comandi complessi o di lunga durata.

Per risolvere il problema, intraprendi le seguenti azioni:

  • Verifica i vincoli di memoria, CPU, rete o risorse di connessione.
  • Verifica che non vi sia alcuna limitazione (della larghezza di banda della rete) delle risorse sul lato client.
  • Controlla se la latenza era elevata al momento del problema.
  • Verifica la presenza di comandi di lunga durata che bloccano il motore Redis perché Redis è un motore a thread singolo che elabora una query alla volta. Per istruzioni, consulta SLOWLOG GET sul sito web di Redis.
  • Verifica la presenza di un numero eccessivo di comandi per unità di tempo. Per istruzioni, consulta INFO sul sito web di Redis.

Errore "Operation timed out"

Quando la connessione rimane inattiva più a lungo valore di timeout configurato, ricevi il seguente messaggio di errore:

"io.lettuce.core.RedisException: java.io.IOException: Operation timed out"

Potresti ricevere l'errore Operation timed out per i seguenti motivi:

  • Il cluster ElastiCache ha un carico elevato e non è in grado di elaborare i comandi in tempo.
  • Il traffico di rete supera la quota di larghezza di banda sul lato cluster o client.

Per risolvere il problema, intraprendi le seguenti azioni:

  • Verifica i vincoli di memoria, CPU, rete o risorse di connessione.
  • Verifica che non vi sia alcuna limitazione (della larghezza di banda della rete) delle risorse sul lato client.
  • Verifica la presenza di comandi di lunga durata che bloccano il motore Redis. Per istruzioni, consulta SLOWLOG GET sul sito web di Redis.
  • Controlla la configurazione del timeout nell'applicazione client e nel cluster e imposta parametri di timeout appropriati per evitare disconnessioni per inattività.

Errore "NOAUTH Authentication required"

Quando ti connetti a un server Redis che richiede l'autenticazione ma le credenziali non sono valide, ricevi il messaggio di errore NOAUTH Authentication required.

Per risolvere il problema, intraprendi le seguenti azioni:

  • Fornisci il nome utente e la password corretti per connetterti al cluster.
  • Verifica che la configurazione della libreria client e la stringa di connessione abbiano la sintassi corretta.

Errore "ERR max number of clients reached"

Quando un nodo del cluster raggiunge la quota massima di connessione, viene visualizzato il messaggio di errore ERR max number of clients reached.

Per risolvere il problema, intraprendi le seguenti azioni:

  • Controlla la metrica CurrConnections e verifica che rientri nella quota maxclients. Per ulteriori informazioni, consulta Maximum concurrent connected clients (Numero massimo di client concorrenti connessi) sul sito web di Redis.
  • Utilizza il pooling delle connessioni per riutilizzare le connessioni.
  • Imposta valori di timeout appropriati nella configurazione del client.
  • Configura i client in modo che si connettano direttamente alle repliche in lettura per le operazioni di lettura in modo da distribuire il carico tra i nodi del cluster.

Errore "LOADING Redis is loading the dataset in memory"

Quando ti connetti a un nodo che sta caricando il set di dati in memoria durante l'avvio o la sincronizzazione della replica, ricevi il seguente messaggio di errore:

"LOADING Redis is loading the dataset in memory (error) LOADING Redis is loading the dataset in memory"

È consigliabile applicare il backoff. Per informazioni, consulta la sezione Redis cluster client discovery and exponential backoff (Individuazione e backoff esponenziale dei client di un cluster Redis) in Best practice: Best practices: Redis clients and Amazon ElastiCache for Redis (Best practice; Client Redis e Amazon ElastiCache per Redis).

Errore "OOM command not allowed when used memory > 'maxmemory'"

Il parametro maxmemory imposta la quantità massima di memoria che un nodo Redis può utilizzare per l'archiviazione dei dati.

Quando l'utilizzo della memoria supera la quota maxmemory, Redis applica la policy impostata in maxmemory-policy nel gruppo di parametri. A seconda di quanto impostato in maxmemory-policy, Redis elimina le chiavi o restituisce l'errore OOM command not allowed.

Per risolvere il problema, intraprendi le seguenti azioni:

  • Configura maxmemory-policy in modo da eliminare le chiavi in base ai requisiti dell'applicazione.
  • Aggiorna il cluster a un tipo di nodo più grande quando l'utilizzo della memoria supera costantemente la quota.

Errore "CROSSSLOT Keys in request don't hash to the same slot"

Quando esegui operazioni con più chiavi su un cluster con la modalità cluster attivata e diversi slot hash, ricevi l'errore CROSSSLOT.

Per risolvere il problema, consulta How do I resolve the CROSSSLOT error I receive when I use multi-key operations on an ElastiCache (Redis OSS) self-designed cluster? (Come posso risolvere l'errore CROSSSLOT che ricevo quando utilizzo operazioni con più chiavi su un cluster autoprogettato ElastiCache (Redis OSS)?)

Errore "CLUSTERDOWN The cluster is down"

Quando un nodo smette di rispondere, il cluster diventa indisponibile e ricevi il messaggio di errore The cluster is down.

Per risolvere il problema, intraprendi le seguenti azioni:

Errore "READONLY You can't write against a read-only replica"

Di seguito sono riportati i motivi per cui ricevi un errore quando tenti di scrivere su un nodo Redis configurato come replica in lettura:

  • L'applicazione si connette direttamente a una replica in lettura.
  • La cache DNS nell'applicazione indirizza il traffico al vecchio nodo primario.

Per risolvere il problema, consulta Come posso risolvere l'errore READONLY che ricevo dopo un failover nel cluster autoprogettato ElastiCache per Redis?

Errore "MOVED [slot] [IP address] [port]"

Il messaggio di reindirizzamento MOVED contiene lo slot hash, l'indirizzo IP e la porta del nodo per la chiave richiesta:

"-MOVED 3999 127.0.0.1:6381"

Di seguito sono riportati i motivi per cui potresti ricevere l'errore MOVED:

  • Il client tenta di accedere a una chiave in uno slot hash che non si trova sul nodo connesso.
  • Hai attivato la modalità cluster per il cluster, ma il client non riconosce il cluster.
  • La replica in lettura non ha il flag readonly.
  • Il client ha informazioni sul cluster obsolete, ad esempio una modifica del numero di shard o nodi.

Per risolvere questi problemi, intraprendi le seguenti azioni:

AWS UFFICIALEAggiornata 8 mesi fa