Estou usando o 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?

3 minuto de leitura
0

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.


AWS OFICIAL
AWS OFICIALAtualizada há 3 anos