Como soluciono o erro “READONLY You can't write against a read only replica” [Não é possível gravar em uma réplica somente para leitura] após o failover do cluster do Redis (modo cluster desabilitado)?

Data da última atualização: 17/6/2022

Por que estou recebendo o erro “READONLY You can't write against a read only replica” [Não é possível gravar em uma réplica somente para leitura] no cluster do Amazon ElastiCache para Redis (modo cluster desabilitado) após o failover?

Breve descrição

Se o nó primário falhar nos nós de réplica no cluster do Amazon ElastiCache, a réplica assumirá a função de nó primário para atender às solicitações recebidas. Porém, nos seguintes cenários, você receberá o erro READONLY:

  • Você está usando um endpoint de nó em vez do endpoint primário do cluster em sua aplicação.

    -ou-

  • O cache DNS do nó da aplicação encaminha o tráfego para o nó primário antigo.

Resolução

1.    Verifique se o cluster está desabilitado para o modo cluster. Para isso:
Abra o console do ElastiCache e selecione clusters do Redis. Verifique se o modo cluster está desativado no cluster.
Observação: se o modo cluster estiver ativado, consulte I'm using ElastiCache or Redis. Why are my Redis client read requests always read from or redirected to the primary node of a shard? (Estou usando o ElastiCache ou Redis. Por que as solicitações de leitura do cliente do Redis são sempre efetuadas no nó primário de um fragmento ou redirecionadas para esse nó principal?)

2.    Verifique se você está enviando o comando write ao endpoint primário e não ao endpoint do nó. Para validar se o comando write está indo para o nó primário, siga um destes procedimentos:
Opção 1
Conecte-se ao cluster do Redis usando o redis-cli e execute o comando get key para obter a chave atualizada. Em seguida, verifique a saída do comando para conferir se o valor da chave foi atualizado após o último comando.
Por exemplo, o comando a seguir define o valor key1 como hello:

set key1 "hello" 
OK

Para verificar se a chave foi definida corretamente, execute o comando get:

get key1
"hello"

Opção 2

Conecte-se ao cluster do Redis usando o redis-cli e execute o comando MONITOR. Isso lista todos os comandos que chegam ao cluster. Lembre-se de que executar um único cliente MONITOR poderá reduzir o throughput em mais de 50%.

3.    Para evitar problemas de cache DNS, ative a lógica de nova tentativa em sua aplicação seguindo as diretrizes para a biblioteca de cliente do Redis que sua aplicação usa.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?