Clúster de Redis es un Redis integrado función que admite la fragmentación automática, la replicación y la alta disponibilidad que se implementó previamente con Sentinels . Está diseñado para dos propósitos principales:uno es dividir automáticamente su conjunto de datos entre varias 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 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 consiste en 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 Redis documentación del clúster, el “clúster mínimo ” que funciona como se esperaba requiere 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 NATted entornos, así como aquellos en los que las direcciones IP o los puertos TCP se reasignan, por ejemplo, en Docker . Además, no todas las bibliotecas de clientes lo admiten.
Este artículo muestra cómo configurar un clúster de Redis (con modo 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 usa la réplica del parámetro.
Requisitos previos:
- Servidores con instalación de 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
Diagrama lógico del clúster de Redis
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 aplicación API o CLI el cliente solo puede escribir en los nodos maestros, pero puede leer desde cualquier nodo del clúster.
Paso 1:Instalación de Redis en todos los nodos
# dnf module install redis
# systemctl start redis # systemctl enable redis # systemctl status redis
Paso 2:Configuración de instancias de Redis en todos los nodos
Utilice el /etc/redis.conf archivo de configuración para configurar Redis servidor. Como práctica recomendada, cree una copia de seguridad del archivo original antes de editarlo con 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
bind 10.42.0.247
Luego configure el modo protegido a no
para permitir conexiones desde otras instancias en el clúster.
protected-mode no
El parámetro de puerto define el puerto en el que el servidor de Redis escuchará las conexiones; el valor predeterminado es 6379 . Este es el puerto de datos para comunicarse con los clientes.
port 6379
Establecer la interfaz y el puerto de escucha de Redis
yes
, activa el modo clúster.
cluster-enabled yes
A continuación, el archivo de configuración del clúster El parámetro establece el nombre del archivo de configuración del clúster de un nodo de 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 dir parámetro) 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 , 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 es equivalente a 15 segundos.
cluster-node-timeout 15000
Establecer el tiempo de espera del nodo del clúster
Para habilitarlo, configure appendonly parámetro a yes
.
appendonly yes
Establecer opciones de persistencia
# systemctl restart redis
# cat /var/log/redis/redis.log
Comprobar el archivo de registro del nodo del clúster
# 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
--cluster create
habilita 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 siguientes tres serán considerados 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 representará 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
Crear clúster de Redis
-h
bandera) 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.
Marque todos los nodos de clúster en cualquier nodo
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 de enlace, ranuras (para maestros).
Paso 4:Probar la conmutación por error del clúster de Redis
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master
Mostrar maestros de clúster de Redis
Además, toma nota de los esclavos de Redis.
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep slave
Listar todos los esclavos de clúster de Redis
# 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 a estado maestro.
Comprobar el estado de conmutación por error del clúster
# systemctl start redis # redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master
Comprobar todo el estado maestro del clúster de Redis
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
Marque todos los esclavos de clúster de Redis
Paso 5:probar la replicación de datos en el clúster de Redis
-c
cambie para habilitar la compatibilidad con clústeres en la utilidad redis-cli y acceda 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
Verificar la replicación de datos del clúster de Redis
El resultado final es el clúster de Redis es la forma preferida de obtener fragmentación automática, replicación y alta disponibilidad. Hay muchos otros parámetros de configuración bien documentados en el resto de /etc/redis.conf archivo, puede encontrar más información en la documentación oficial:tutorial de clúster de Redis y especificación de clúster de Redis.
Esto nos lleva al final de la serie de tutoriales de Redis de tres partes. El siguiente formulario de comentarios se puede utilizar para publicar preguntas o comentarios.
Compartir es cuidar…Compartir en FacebookCompartir en TwitterCompartir en LinkedinCompartir en Reddit