Cómo configurar un clúster de Redis en CentOS 8 - Parte 3


Redis Cluster es una función incorporada de Redis que admite fragmentación automática, replicación y alta disponibilidad que se implementó anteriormente con Sentinels. Está diseñado para dos propósitos principales: uno es dividir automáticamente su conjunto de datos entre varias instancias y, segundo, proporcionar cierto grado de disponibilidad durante las particiones, para continuar las operaciones cuando algunas instancias (especialmente las maestras) fallan o no pueden comunicarse con la mayoría de nodos en el clúster.

Sin embargo, el clúster deja de funcionar en caso de fallas mayores (por ejemplo, cuando la mayoría de las instancias maestras no están disponibles). Además, si un maestro y un esclavo fallan al mismo tiempo, el clúster no puede continuar con las operaciones normales (aunque la solución es agregar más nodos o crear una asimetría en el clúster para cambiar automáticamente el diseño del clúster).

De acuerdo con la documentación del clúster de Redis, el "clúster mínimo" que funciona como se espera debe contener al menos 3 nodos maestros. Pero la configuración más adecuada para una alta disponibilidad debería tener al menos 6 nodos con tres maestros y tres esclavos, cada maestro con un esclavo.

Importante: Redis Cluster también tiene algunas limitaciones que son la falta de soporte para entornos NAT y aquellos donde las direcciones IP o los puertos TCP se reasignan, por ejemplo, en Docker. Además, no todas las bibliotecas cliente lo admiten.

Este artículo muestra cómo configurar un clúster de Redis (con el modo de clúster deshabilitado) en CentOS 8. Incluye cómo instalar Redis, configurar los nodos del clúster, crear un clúster y probar la conmutación por error del clúster.

Nota: Para esta guía, usaremos instancias de Redis nuevas/vacías para ejecutar el modo de clúster. El modo de clúster no funcionará con algunas configuraciones realizadas en las dos primeras guías de nuestra serie Redis, en particular, no funciona cuando se utiliza la réplica del parámetro.

  1. Servers with CentOS 8 Installation
Redis Master1: 10.42.0.247
Redis Master2: 10.42.0.197
Redis Master3: 10.42.0.132

Redis Slave1: 10.42.0.200
Redis Slave2: 10.42.0.21
Redis Slave3: 10.42.0.34

Nuestra configuración tiene 3 nodos maestros de lectura/escritura y 3 nodos de réplica de solo lectura, cada maestro tiene una réplica, por lo que tres fragmentos contienen todos los datos del clúster en cada nodo. Una API de aplicación o un cliente CLI solo puede escribir en los nodos principales, pero leer desde cualquier nodo del clúster.

Paso 1: instalar Redis en todos los nodos

1. Inicie sesión en todas las instancias a través de SSH, luego ejecute el siguiente comando para instalar el módulo Redis usando el administrador de paquetes DNF como se muestra.

# dnf module install redis

2. A continuación, inicie el servicio Redis, habilítelo para que se inicie automáticamente al arrancar el sistema y verifique su estado para verificar que se esté ejecutando (verifique el servicio en las 6 instancias):

# systemctl start redis
# systemctl enable redis
# systemctl status redis

Paso 2: configurar instancias de Redis en todos los nodos

3. Esta sección describe cómo configurar los nodos del clúster de Redis. Recuerde realizar las configuraciones aquí en todos los nodos.

Utilice el archivo de configuración /etc/redis.conf para configurar el servidor Redis. Como práctica recomendada, cree una copia de seguridad del archivo original antes de editarlo utilizando un editor de texto de línea de comandos de su elección.

# cp /etc/redis.conf /etc/redis.conf.orig
# vi /etc/redis.conf

4. A continuación, busque los siguientes parámetros de configuración y edite sus valores como se muestra. El parámetro bind establece la interfaz del servidor Redis que escuchará, establece su valor en la IP de LAN de la instancia. Elimine 127.0.0.1 porque nos dimos cuenta de que dejarlo allí ralentiza el proceso de creación del clúster, particularmente la etapa de unirse al clúster.

bind  10.42.0.247

Luego, configure el modo protegido en no para permitir conexiones desde las otras instancias del clúster.

protected-mode no

El parámetro de puerto define el puerto en el que escuchará el servidor Redis para las conexiones, el valor predeterminado es 6379. Este es el puerto de datos para comunicarse con los clientes.

port 6379

5. El siguiente conjunto de parámetros habilitará el modo de clúster y establecerá algunas de sus funciones útiles. El parámetro de clúster habilitado, cuando se establece en yes , activa el modo de clúster.

cluster-enabled yes

A continuación, el parámetro cluster-config-file establece el nombre del archivo de configuración del clúster de un nodo del clúster (p. Ej., Nodes-6379.conf). El archivo se crea en el directorio de trabajo (por defecto es/var/lib/redis definido usando el parámetro dir) y no es editable por el usuario.

cluster-config-file nodes-6379.conf

La siguiente opción de clúster útil es cluster-node-timeout, que se usa para establecer la cantidad máxima de tiempo en milisegundos que una instancia puede no estar disponible para que se considere en un estado de falla. Un valor de 15000 equivale a 15 segundos.

cluster-node-timeout 15000

6. También necesitamos habilitar la persistencia de Redis en el disco. Podemos usar uno de los modos de persistencia, que es el archivo de solo adjuntar (AOF): registra (en el archivo appendonly.aof creado en el directorio de trabajo) cada operación de escritura recibida con éxito por el servidor. Los datos se reproducirán durante el inicio del servidor para reconstruir el conjunto de datos original.

Para habilitarlo, establezca el parámetro appendonly en yes .

appendonly yes

7. Después de realizar todos los cambios, reinicie el servicio Redis en todos los nodos para aplicar los cambios recientes.

# systemctl restart redis

8. En este punto, cada nodo del clúster debería tener una ID. Puede verificar esto en el archivo de registro ubicado en /var/log/redis/redis.log.

# cat /var/log/redis/redis.log

9. A continuación, abra los puertos 6397 y 16379 en todas las instancias. El último puerto se utiliza para el bus del clúster (un canal de comunicación de nodo a nodo que utiliza un protocolo binario). Este es un requisito básico para las conexiones TCP del clúster de Redis.

# firewall-cmd --zone=public --permanent --add-port=6379/tcp 
# firewall-cmd --zone=public --permanent --add-port=16379/tcp 
# firewall-cmd --reload

Paso 3: creación del clúster de Redis

10. Para crear el clúster, use el cliente de línea de comandos redis-cli de la siguiente manera. --cluster create permite la creación de clústeres y --cluster-replicas 1 significa crear una réplica por maestro.

Para nuestra configuración que tiene 6 nodos, tendremos 3 maestros y 3 esclavos.

Tenga en cuenta que los primeros 6 nodos se considerarán maestros (M) y los tres siguientes se considerarán esclavos (S) . El primer esclavo, es decir, 10.42.0.200:6379 replica el primer maestro, es decir, 10.42.0.247:6379, el segundo esclavo replica el segundo maestro, en ese orden.

El siguiente comando está formateado de manera que el resultado represente nuestra configuración lógica anterior.

# redis-cli --cluster create 10.42.0.247:6379 10.42.0.197:6379 10.42.0.132:6379 10.42.0.200:6379 10.42.0.21:6379 10.42.0.34:6379 --cluster-replicas 1

11. Una vez que la creación del clúster sea exitosa, ejecute el siguiente comando en cualquier host (especifique su dirección IP usando el indicador -h ) para listar todos los nodos del clúster.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes

Debería poder ver todos los nodos del clúster, con los esclavos indicando sus maestros, como se muestra en la siguiente captura de pantalla.

Los diferentes campos están en este orden: ID de nodo, dirección IP: puerto, banderas, último ping enviado, último pong recibido, época de configuración, estado de enlace, ranuras (para maestros).

Paso 4: Prueba de la conmutación por error de Redis Cluster

12. En esta sección, demostraremos cómo probar la conmutación por error de un clúster. Primero, tomemos nota de los maestros.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep master

Además, tome nota de los esclavos de Redis.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave

13. A continuación, detengamos el servicio Redis en uno de los nodos maestros, por ejemplo, 10.42.0.197 y verifiquemos todos los nodos maestros del clúster.

# systemctl stop redis
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

En la siguiente captura de pantalla, puede ver que el nodo 10.42.0.197:6367 está en estado de falla y su esclavo 10.42.0.21:6379 ha sido promovido al estado de maestro.

14. Ahora, iniciemos el servicio Redis una vez más en el nodo fallido y verifiquemos todos los maestros del clúster.

# systemctl start redis
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep master

Además, verifique los esclavos del clúster para confirmar que el maestro fallido ahora es un esclavo.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave

Paso 5: probar la replicación de datos en el clúster de Redis

15. Esta última sección explica cómo verificar la replicación de datos del clúster. Crearemos una clave y un valor en uno de los maestros, luego intentaremos leerlo de todos los nodos del clúster de la siguiente manera. Utilice el conmutador -c para habilitar el soporte de clúster en la utilidad redis-cli y acceder a los datos en modo de clúster.

# redis-cli -c -h 10.42.0.247 -p 6379 set name 'TecMint.com'
# redis-cli -c -h 10.42.0.247 -p 6379 get name
# redis-cli -c -h 10.42.0.21 -p 6379 get name
# redis-cli -c -h 10.42.0.132 -p 6379 get name
# redis-cli -c -h 10.42.0.200 -p 6379 get name
# redis-cli -c -h 10.42.0.197 -p 6379 get name
# redis-cli -c -h 10.42.0.34 -p 6379 get name

La conclusión es que Redis Cluster es la forma preferida de obtener fragmentación, replicación y alta disponibilidad automáticas. Hay muchos otros parámetros de configuración bien documentados en el resto del archivo /etc/redis.conf, puede encontrar más información en la documentación oficial: Tutorial del clúster de Redis y especificación del clúster de Redis.

Esto nos lleva al final de la serie de tutoriales de Redis en tres partes. El formulario de comentarios a continuación se puede utilizar para publicar preguntas o comentarios.