Desidero risolvere le richieste di lettura del client Redis che vengono reindirizzate al nodo principale di una partizione anziché a un nodo di replica in Amazon ElastiCache per Redis.
Breve descrizione
Qualsiasi nodo di un cluster ElastiCache per Redis può ricevere richieste dai client Redis. Quando un client invia una query di lettura e scrittura a un nodo di replica, il nodo verifica se la richiesta è un'operazione a chiave singola o multipla. L'operazione a chiave singola o multipla deve appartenere allo stesso slot hash della partizione. Per impostazione predefinita, i nodi di replica con la modalità cluster attivata reindirizzano tutte le richieste di lettura e scrittura al nodo principale. Le richieste di lettura e scrittura vengono reindirizzate a un nodo principale autorevole della partizione che appartiene allo slot hash della chiave. Se la partizione appartiene allo slot hash e viene avviato prima un comando readonly, il nodo di replica completa solo la richiesta di lettura. Il nodo di replica elabora la richiesta di lettura solo se readonly viene generato prima dal client. Se la richiesta readonly non viene inviata per prima, il nodo di replica reindirizza la richiesta a un nodo principale.
Soluzione
Per assicurarti che le richieste di lettura del client Redis vengano lette dal nodo di replica, completa i seguenti passaggi:
-
Accedi al cluster, quindi imposta una chiave. Esempio:
172.31.21.72:6379> set key8 "This is testing for readonly"
-> Redirected to slot [13004] located at 172.31.21.72:6379
OK
172.31.21.72:6379>
-
Connettiti a un nodo di replica. Assicurati di generare un comando readonly. Esempio: Nota: l'esempio seguente mostra un comando readonly che non viene inviato per primo e la richiesta viene reindirizzata a un nodo principale.
172.31.30.175:6379> info replication
# Replication
role:slave
master_host:172.31.21.72
master_port:6379
master_link_status:up
172.31.30.175:637> CLUSTER KEYSLOT key8
(integer) 13004
172.31.30.175:637> get key8
(error) MOVED 13004 172.31.21.72:6379
172.31.30.175:637> get key8
-> Redirected to slot [13004] located at 172.31.21.72:6379
"This is testing for readonly"
172.31.21.72:6379>
Nota: l'errore MOVED mostrato nell'esempio precedente si verifica quando il client del cluster Redis non è in grado di gestire le richieste di reindirizzamento al nodo principale. Per ulteriori informazioni sull'errore MOVED, consulta MOVED redirection sul sito Web di Redis.
Esempio:
Nota: l'esempio seguente mostra un comando readonly che viene inviato per primo. Ciò consente al nodo di replica di elaborare la richiesta senza reindirizzarla a un nodo principale.
172.31.30.175:6379> readonly
OK
172.31.30.175:6379> get key8
"This is testing for readonly"
172.31.30.175:6379>
Nota: assicurati di generare il comando readonly quando il client si connette a un nodo per la prima volta. Il comando è attivo solo finché il client non legge le chiavi dallo stesso nodo. Se il client si connette a un altro nodo di replica nello stessa o in un’altra partizione, assicurati che venga generato un comando readonly.