Estou usando o Amazon ElastiCache para Redis. Por que minhas solicitações de leitura do cliente Redis são sempre lidas ou redirecionadas para o nó primário de um fragmento?
Resolução
Qualquer nó em um cluster Redis pode receber consultas de clientes Redis. Quando um cliente envia uma consulta de leitura/gravação para um nó de réplica, o nó analisa a solicitação para confirmar se é uma operação de chave única ou de várias chaves que pertence ao mesmo slot de hash do fragmento. O comportamento padrão dos nós de réplica em clusters habilitados para o modo de cluster é redirecionar todas as solicitações de leitura/gravação do cliente para um nó primário autorizado do fragmento que pertence ao slot de hash da chave. O nó de réplica atende à solicitação de leitura somente se esse fragmento pertencer ao slot de hash e se um comando readonly for iniciado pelo cliente. Isso significa que o nó de réplica processa a solicitação somente se readonly for emitido pelo cliente antes da solicitação. Caso contrário, a solicitação será redirecionada para o nó primário do fragmento ao qual o slot de hash pertence.
Exemplo
1. Faça login no seu cluster para definir uma chave.
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>
2. Conecte-se a um nó de réplica.
No exemplo a seguir, o comando readonly não é enviado, e a solicitação é redirecionada para um nó primário.
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>
Observação: o erro MOVED mostrado no exemplo anterior ocorre quando o cliente de cluster Redis não reconhece o cluster e não consegue lidar com solicitações de redirecionamento para o nó primário. Para obter mais informações sobre o erro MOVED, consulte Especificação do cluster Redis - Redirecionamento e refragmentação no site Redis.io.
No exemplo a seguir, o comando readonly é enviado primeiro e, depois, o nó de réplica processa a solicitação, em vez de redirecioná-la para um nó primário.
172.31.30.175:6379> readonly
OK
172.31.30.175:6379> get key8
"This is testing for readonly"
172.31.30.175:6379>
O comando readonly precisa ser emitido quando o cliente se conecta a um nó pela primeira vez. O comando está ativo somente até que o cliente leia as chaves do mesmo nó. Se o cliente se conectar a outro nó de réplica no mesmo fragmento ou em um fragmento diferente, talvez seja necessário emitir um novo comando readonly.