¿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.
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.
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.
Escalamiento y actualización de instancias Preguntas frecuentes
- ¿Puedo actualizar la versión para una instancia de DCS Redis, por ejemplo, de Redis 4.0 a Redis 5.0?
- ¿Se interrumpen los servicios si se realiza el mantenimiento durante la ventana de tiempo de mantenimiento?
- ¿Las instancias se detienen o se reinician durante la modificación de la especificación?
- ¿Qué cambios de tipo de instancia de DCS son compatibles?
- ¿Se interrumpen los servicios durante la modificación de la especificación?
- ¿Por qué no puedo modificar las especificaciones de una instancia de DCS?
- ¿Cómo puedo reducir la capacidad de una instancia de DCS?
- ¿Cómo agrego particiones a una instancia de DCS Redis de clúster sin cambiar la memoria?
- ¿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?
- ¿Puedo expandir una partición única de una instancia de clúster?
Comentarios
¿Le pareció útil esta página?
Deje algún comentariomore