Implementar HA Redis Cluster con Sentinel en Rocky Linux 8|AlmaLinux 8
Redis es un almacén de datos en memoria gratuito y de código abierto utilizado por muchos desarrolladores de todo el mundo como base de datos, caché, intermediario de mensajes y motor de transmisión. Gana enorme popularidad gracias a su amplio soporte, alta disponibilidad, rendimiento y flexibilidad. Redis admite varias estructuras de datos, como listas, hashes, conjuntos, tipos ordenados, cadenas, secuencias, etc. Las capacidades proporcionadas por Redis se explican bien a continuación:
- Extensibilidad: Tiene un módulo API que se puede utilizar para crear extensiones en lenguajes C, C++ y Rust.
- Persistencia: Mantiene ese conjunto de datos en la memoria para permitir un acceso rápido. También puede conservar los datos escribiéndolos en un disco de almacenamiento permanente para sobrevivir a los reinicios.
- Alta disponibilidad: Ofrece replicación con conmutación por error automática para modos independientes y agrupados.
- Programabilidad: Admite secuencias de comandos del lado del servidor con Lua y procedimientos almacenados del lado del servidor con Redis Functions.
Replicación de Redis es el proceso de crear copias exactas de la instancia maestra de Redis. La replicación es asincrónica de forma predeterminada. El maestro continúa manejando consultas mientras las réplicas realizan la sincronización inicial o una resincronización parcial. La replicación se realiza principalmente para mejorar el rendimiento de lectura y evitar la pérdida de datos en casos de falla del nodo.
La replicación de Redis se puede gestionar manualmente utilizando SLAVEOF
o REPLICAOF
. Para facilitar esto, se utiliza Redis Sentinel. Este es un proceso que se utiliza para automatizar y monitorear la conmutación por error y la conmutación por error de la replicación de Redis. Sentinel requiere varias instancias y luego trabaja como un grupo de tomadores de decisiones para determinar qué nodo está activo y cuál no antes de activar una conmutación por error.
La siguiente ilustración le ayudará a comprender cómo funciona Sentinel.
Además de la alta disponibilidad, Redis Sentinel ofrece otras características que incluyen:
- Monitoreo: comprueba constantemente si tanto la instancia maestra como la réplica se están ejecutando según sea necesario.
- Conmutación por error automática: en caso de que el maestro no funcione según lo requerido, Sentinel activa una conmutación por error y la réplica se promueve a maestro. Luego, las otras réplicas adjuntas se configuran para usar este nuevo maestro.
- Proveedor de configuración: proporciona una fuente autorizada para el descubrimiento de servicios de los clientes. Los clientes se conectan a Sentinels para obtener la dirección del maestro de Redis actual.
- Notificación: se puede utilizar para notificar al administrador del sistema cuando algo anda mal con cualquiera de las instancias de Redis monitoreadas.
Esta guía ofrece una demostración detallada de cómo implementar HA Redis Cluster con Sentinel en Rocky Linux 8 | AlmaLinux 8.
Requisitos de configuración.
Se recomienda tener al menos 3 instancias Sentinel para una implementación sólida. Esta guía funcionará con 3 servidores como se muestra a continuación:
HOSTNAME | TASK | IP ADDRESS |
Redis_master | Master | 192.168.205.2 |
Redis_replica1 | slave1 | 192.168.205.3 |
Redis_replica2 | slave2 | 192.168.205.33 |
Paso 1: instale Redis en Rocky Linux 8 | AlmaLinux 8
Redis está disponible en la versión predeterminada Rocky Linux 8 | AlmaLinux 8 repositorios y se puede instalar en los 3 nodos con el comando:
sudo dnf install vim @redis -y
Una vez instalado, inicie y habilite el servicio en los 3 nodos como se muestra:
sudo systemctl start redis
sudo systemctl enable redis
Verifique el estado del servidor:
$ systemctl status redis
● redis.service - Redis persistent key-value database
Loaded: loaded (/usr/lib/systemd/system/redis.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis.service.d
└─limit.conf
Active: active (running) since Thu 2022-06-23 05:06:50 EDT; 14s ago
Main PID: 2784 (redis-server)
Tasks: 4 (limit: 23682)
Memory: 6.6M
CGroup: /system.slice/redis.service
└─2784 /usr/bin/redis-server 127.0.0.1:6379
Paso 2: configurar la replicación de Redis
Normalmente, Redis se puede configurar utilizando el archivo /etc/redis.conf. Configuraremos las instancias maestra y esclava como se muestra.
A. Configurar el servidor maestro Redis
Cree un archivo de respaldo y abra el archivo de configuración para editarlo:
sudo cp /etc/redis.conf /etc/redis.conf.bak
sudo vim /etc/redis.conf
Comience configurando la dirección de enlace:
bind 127.0.0.1 192.168.205.2
A continuación, configure el modo protegido
en no para permitir la comunicación con los esclavos.
protected-mode no
Puede proteger la instancia maestra utilizando la directiva requirepass
:
requirepass StrongPassword
Configure el servicio para interactuar con systemd.
supervised systemd
Guarde el archivo de configuración y reinicie el servicio.
sudo systemctl daemon-reload
sudo systemctl restart redis
Permitir el servicio a través del firewall:
sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp
sudo firewall-cmd --reload
B. Configurar réplicas de Redis
Luego configuraremos nuestras dos réplicas de la siguiente manera:
sudo cp /etc/redis.conf /etc/redis.conf.bak
sudo vim /etc/redis.conf
Para las réplicas, realice los cambios siguientes; recuerde reemplazar los valores cuando sea necesario.
bind 127.0.0.1 192.168.205.3
protected-mode no
supervised systemd
replicaof 192.168.205.2 6379
masterauth StrongPassword
Reemplace la dirección IP de enlace con la dirección IP adecuada de la réplica. La directiva replicaof
se utiliza para proporcionar replicación del servidor maestro.
Guarde el archivo y reinicie los servicios:
sudo systemctl daemon-reload
sudo systemctl restart redis
Permitir el servicio a través del firewall:
sudo firewall-cmd --zone=public --permanent --add-port=6379/tcp
sudo firewall-cmd --reload
C. Verificar la replicación
Una vez realizadas las configuraciones anteriores, verifique la replicación:
- En el nodo maestro:
$ redis-cli
127.0.0.1:6379> AUTH StrongPassword
127.0.0.1:6379> info replication
Salida de muestra:
- Sobre las réplicas:
redis-cli info replication
Salida de muestra.
Según el resultado anterior, todos podemos estar de acuerdo en que hemos configurado la replicación de Redis en Rocky Linux 8 | AlmaLinux 8
Paso 3: configurar Redis HA usando Sentinel
El Redis Sentinel se instaló al instalar el servidor Redis. Inicie y habilite el servicio en los 3 nodos como se muestra:
sudo systemctl start redis-sentinel
sudo systemctl enable redis-sentinel
Consulta el estado del servicio:
$ systemctl status redis-sentinel
● redis-sentinel.service - Redis Sentinel
Loaded: loaded (/usr/lib/systemd/system/redis-sentinel.service; enabled; vendor preset: disabled)
Drop-In: /etc/systemd/system/redis-sentinel.service.d
└─limit.conf
Active: active (running) since Thu 2022-06-23 05:27:28 EDT; 25s ago
Main PID: 3127 (redis-sentinel)
Tasks: 4 (limit: 23682)
Memory: 6.6M
CGroup: /system.slice/redis-sentinel.service
└─3127 /usr/bin/redis-sentinel *:26379 [sentinel]
Para configurar el servicio Redis Sentinel editaremos el siguiente archivo en los 3 nodos:
sudo cp /etc/redis-sentinel.conf /etc/redis-sentinel.conf.bak
sudo vim /etc/redis-sentinel.conf
Primero, asegúrese de que el servicio escuche en el puerto deseado; el puerto predeterminado es 26379
port 26379
Para que Sentinel monitoree nuestro servidor maestro, debemos configurarlo en los 3 nodos como se muestra:
#On Master Server(Sentinel1)/Replica1(Sentinel2)/Replica2(Sentinel3)
.......
sentinel monitor mymaster 192.168.205.2 6379 2
sentinel auth-pass mymaster StrongPassword
sentinel down-after-milliseconds mymaster 10000
sentinel parallel-syncs mymaster 1
En el archivo:
mymaster
se puede reemplazar con el nombre y la contraseña que desee.- Reemplace 192.168.205.2 con la dirección IP maestra
- Recuerde colocar la línea
sentinel monitor
antes de la líneasentinel auth-pass
. De lo contrario, el servicio no podrá reiniciarse. - El
sentinel down-after-millisegundos
se utiliza para establecer el tiempo necesario para que el maestro se considere fallido si no se recibe respuesta. parallel-syncs
establece el número de réplicas que se promoverán al nuevo maestro después de una conmutación por error.
Guarde los archivos y reinicie los servicios:
sudo systemctl restart redis-sentinel
Permitir el servicio a través del firewall en todos los nodos:
sudo firewall-cmd --zone=public --permanent --add-port=26379/tcp
sudo firewall-cmd --reload
Paso 4: verificar el estado de configuración de Redis Sentinel
Ahora podemos verificar el estado de la configuración de Redis Sentinel:
- En el nodo maestro:
redis-cli -p 26379 info sentinel
Salida de ejecución:
Puede ver información detallada con el comando:
redis-cli -p 26379 sentinel master mymaster
Salida de ejecución:
Para verificar el estado de los esclavos, use el comando:
redis-cli -p 26379 sentinel slaves mymaster
Paso 5: Prueba de conmutación por error de Redis Sentinel
Probaremos la función de conmutación por error automática proporcionada por Sentinel. Para ello, detenga el servicio Redis en el servidor maestro.
sudo systemctl stop redis
Después de los 10 segundos (la configuración de inactividad después de milisegundos) verifique el archivo de registro de Sentinel:
sudo cat /var/log/redis/sentinel.log
Salida de muestra:
En el resultado, podemos ver que nuestra réplica 192.168.205.3 ha sido promovida al nuevo maestro.
Obtenga información detallada de la CLI de Redis
redis-cli -h 192.168.205.3 -p 26379 sentinel masters
Salida de muestra:
¡Ya fue suficiente aprendizaje!
Esto marca el final de esta guía sobre cómo implementar HA Redis Cluster con Sentinel en Rocky Linux 8 | AlmaLinux 8. Espero que esto haya sido de importancia para ti.
Ver más guías en nuestra página:
- Los mejores libros para aprender Redis y el almacenamiento en caché de Memcached
- Cómo implementar Redis StatefulSet Cluster en Kubernetes
- Cómo instalar Redis en el servidor RHEL 7
- Cómo instalar Redis en Fedora