Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Distributed Cache Service/ Perguntas frequentes/ Dimensionamento e atualização de instância/ Como lidar com um erro quando uso Lettuce para conectar-se a uma instância de Redis Cluster após a modificação da especificação?
Atualizado em 2023-12-20 GMT+08:00

Como lidar com um erro quando uso Lettuce para conectar-se a uma instância de Redis Cluster após a modificação da especificação?

Sintoma

Se a quantidade de partições for alterada durante a modificação da especificação de uma instância do Redis Cluster, alguns slots serão migrados para novas partições. O erro a seguir ocorre quando você usa Lettuce para se conectar à instância.

Figura 1 Erro

Para obter detalhes, consulte Conexão com X não permitida. Este ponto de conexão não é conhecido na vista de cluster.

Análise

Processo de modificação de especificação de uma instância do Redis Cluster:

Após ser iniciado, o cliente obtém a topologia do nó de cluster usando o comando Cluster Nodes baseado em RESP2 e mantém a topologia em sua estrutura de dados na memória.

Para acesso a dados, o cliente usa o algoritmo CRC16 para calcular o slot de hash de uma chave e encaminha automaticamente as solicitações com base na topologia e nas informações de slot armazenadas na memória.

Se o número de partições mudar durante o dimensionamento, a topologia e o mapeamento de slot serão alterados. Nesse caso, o cliente precisa atualizar automaticamente a topologia. Caso contrário, a rota de solicitação pode falhar ou o local da rota pode estar incorreto. Como resultado, um erro é relatado durante a conexão do cliente.

Por exemplo, quando o número de partições em uma instância do Redis Cluster muda de três para seis, a topologia e o mapeamento de slots são alterados, conforme mostrado nas figuras a seguir.

Figura 2 Uma instância do Redis Cluster antes da expansão
Figura 3 Uma instância do Redis Cluster após a expansão

Soluções

Solução 1 (recomendada)

Habilitar a atualização automatizada da topologia.

ClusterTopologyRefreshOptions topologyRefreshOptions = ClusterTopologyRefreshOptions.builder()
             // Periodic refresh: every time milliseconds.
            .enablePeriodicRefresh(Duration.ofMillis(time))
	     // Triggers of adaptive refresh: MOVED redirection, ASK redirection, reconnection, unknown node (since 5.1), and slot not in any of the current shards (since 5.2).
            .enableAllAdaptiveRefreshTriggers()
            .build(); 

Para obter detalhes, consulte um exemplo de uso do Lettuce para se conectar a uma instância de Redis Cluster.

Se você usar o Lettuce para se conectar a uma instância do Redis Cluster e a atualização automatizada não estiver ativada, será necessário reiniciar o cliente após a modificação da especificação.

Solução 2

Desabilitar a validação da associação ao nó do cluster.

ClusterClientOptions clusterClientOptions = ClusterClientOptions.builder()  
        .validateClusterNodeMembership(false)  
        .build(); 

Se validateClusterNodeMembership for true, verifique se o endereço de conexão atual está na topologia do cluster obtida por meio de CLUSTER NODES, antes de se conectar ao cluster. Se não estiver na topologia, o erro ocorre.

Impacto da desativação da validação da associação ao nó do cluster:

  • Falta de detecção de violação de segurança.
  • Se a atualização automática da topologia estiver desativada, uma solicitação de redirecionamento MOVED poderá ser gerada depois que as especificações do Redis Cluster forem alteradas e a quantidade de partições aumentar. O redirecionamento aumenta a carga de rede do cluster e o tempo necessário para processar uma única solicitação. Se a quantidade de partições diminuir, as partições excluídas não poderão ser conectadas.