Búsqueda de sitios web

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


Redis Cluster es una característica integrada de Redis que admite fragmentación automática, replicación y alta disponibilidad que se implementó anteriormente mediante Sentinels. Está diseñado para dos propósitos principales: uno es dividir automáticamente su conjunto de datos entre múltiples instancias y, en segundo lugar, 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 las instancias. nodos en el cluster.

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).

Según la documentación del clúster Redis, el "clúster mínimo" que funciona como se esperaba debe contener al menos 3 nodos maestros. Pero la configuración más adecuada para 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 NATted así como aquellos donde las direcciones IP o los puertos TCP están reasignados para instancia 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 clúster no funcionará con algunas configuraciones realizadas en las dos primeras guías de nuestra Serie Redis, particularmente no funciona cuando se utiliza la réplica del parámetro.

Requisitos previos:

  1. Servidores con instalación CentOS 8

Configuración del entorno de prueba

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. Un cliente API o CLI de aplicación solo puede escribir en los nodos maestros, 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 iniciar 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 usando 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 en la que escuchará el servidor Redis y establece su valor en la IP de LAN de la instancia. Elimine el 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 el servidor Redis escuchará 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 cluster-enabled, 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 (por ejemplo, nodes-6379.conf). El archivo se crea en el directorio de trabajo (el valor predeterminado es /var/lib/redis definido usando el parámetro dir) y el usuario no puede editarlo.

cluster-config-file nodes-6379.conf

La siguiente opción de clúster útil es cluster-node-timeout, que se utiliza para establecer la cantidad máxima de tiempo en milisegundos que una instancia puede estar no disponible para que se considere en 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, es decir, el Append Only File (AOF): registra (en el archivo appendonly.aof creado bajo el directorio de trabajo) cada operación de escritura recibida exitosamente 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 un ID. Puede comprobar esto en el archivo de registro ubicado en /var/log/redis/redis.log.

cat /var/log/redis/redis.log

9. A continuación, abra el puerto 6397 y 16379 en todas las instancias. El puerto posterior se utiliza para el bus del clúster (un canal de comunicación 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: crear el clúster de Redis

10. Para crear el clúster, utilice 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 al 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 enumerar 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 ping recibido, época de configuración, estado del enlace, ranuras (para maestros).

Paso 4: Probar la conmutación por error del clúster de Redis

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

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

Además, toma 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 en el 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 fallido y su esclavo 10.42.0.21:6379 ha sido ascendido al estado 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 sea un esclavo.

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

Paso 5: Probar la replicación de datos en todo 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 y luego intentaremos leerlo desde todos los nodos del clúster de la siguiente manera. Utilice el modificador -c para habilitar la compatibilidad con clústeres en la utilidad redis-cli y acceder a los datos en modo 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 el Clúster de Redis 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 de tres partes. El formulario de comentarios a continuación se puede utilizar para publicar preguntas o comentarios.