Búsqueda de sitios web

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 replicaofse 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ínea sentinel auth-pass. De lo contrario, el servicio no podrá reiniciarse.
  • El sentinel down-after-millisegundosse utiliza para establecer el tiempo necesario para que el maestro se considere fallido si no se recibe respuesta.
  • parallel-syncsestablece 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

Artículos relacionados: