Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Centro de ayuda/ Distributed Cache Service/ Preguntas frecuentes/ Escalamiento y actualización de instancias/ ¿Cómo puedo manejar un error cuando uso Lettuce para conectarme a una instancia de Clúster Redis después de la modificación de la especificación?
Actualización más reciente 2023-05-08 GMT+08:00

¿Cómo puedo manejar un error cuando uso Lettuce para conectarme a una instancia de Clúster Redis después de la modificación de la especificación?

Síntomas

Si la cantidad de partición cambia durante la modificación de la especificación de una instancia de Clúster Redis, algunas ranuras se migran a nuevas particiones. El siguiente error ocurre cuando usa Lettuce para conectarse a la instancia.

Figura 1 Error

Para obtener más información, consulte No se permite la conexión a X. Este punto de conexión no se conoce en la vista de clúster.

Análisis

Proceso de modificación de especificación de una instancia de Clúster Redis:

Después de iniciarse, el cliente obtiene la topología del nodo de clúster mediante el comando Cluster Nodes basado en RESP2, y mantiene la topología en su estructura de datos en memoria.

Para el acceso a datos, el cliente utiliza el algoritmo de CRC16 para calcular el intervalo hash de una clave, y automáticamente encamina las solicitudes basadas en la topología y la información de intervalo almacenada en la memoria.

Si el número de particiones cambia durante la escala, la topología y la asignación de ranuras cambian. En este caso, el cliente necesita actualizar automáticamente la topología. De lo contrario, la ruta de solicitud puede fallar o la ubicación de la ruta puede ser incorrecta. Como resultado, se notifica un error durante la conexión del cliente.

Por ejemplo, cuando el número de fragmentos en una instancia de Clúster Redis cambia de tres a seis, la topología y el mapeo de ranuras cambian como se muestra en las siguientes figuras.

Figura 2 Una instancia de Clúster Redis antes de escalar
Figura 3 Una instancia de Clúster Redis después de escalar

Soluciones

Solución 1 (Recomendada)

Habilite la actualización automatizada de la topología.

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 más detalles, vea un ejemplo de uso de Lettuce para conectarse a una instancia de Clúster Redis.

Si utiliza Lettuce para conectarse a una instancia de Clúster Redis y la actualización automatizada no está habilitada, debe reiniciar el cliente después de la modificación de la especificación.

Solución 2

Deshabilite la validación de la pertenencia al nodo del clúster.

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

Si validateClusterNodeMembership es true, compruebe si la dirección de conexión actual está en la topología de clúster obtenida a través de CLUSTER NODES, antes de conectarse al clúster. Si no está en la topología, se produce el error.

Impacto de la desactivación de la validación de la pertenencia al nodo del clúster:

  • Falta de detección de brechas de seguridad.
  • Si se desactiva la actualización de topología automatizada, se puede generar una solicitud de redireccionamiento MOVED después de que se cambien las especificaciones de Clúster Redis y se aumente la cantidad de partición. La redirección aumenta la carga de red del clúster y el tiempo necesario para procesar una sola solicitud. Si la cantidad de partición disminuye, las particiones eliminadas no se pueden conectar.