Cómo configurar la replicación de Redis (con el modo de clúster deshabilitado) en CentOS 8 - Parte 1


Redis (Remote Dictionary Server) es un servidor de estructura de datos/base de datos de valor clave en memoria muy popular y ampliamente utilizado, rápido, distribuido y eficiente.

Ofrece un amplio conjunto de características que lo hacen efectivo para una amplia gama de casos de uso: como base de datos, capa de almacenamiento en caché, agente de mensajes o cola; aplicable en aplicaciones web, aplicaciones de chat y mensajería, juegos, análisis de datos en tiempo real y mucho más.

Admite estructuras de datos flexibles, replicación asincrónica maestro-esclavo para escalar el rendimiento de lectura y protegerse contra la pérdida de datos, fragmentación del lado del cliente para escalar el rendimiento de escritura, dos formas de persistencia para escribir datos en la memoria en el disco en un formato compacto, agrupación y fraccionamiento. También cuenta con conmutaciones por error automáticas para la implementación de alta disponibilidad a través de Redis Sentinel, secuencias de comandos Lua, transacciones y muchos más.

Al ser una base de datos NO SQL o no relacional, Redis ofrece algunos beneficios de rendimiento sobre los sistemas de bases de datos tradicionales (como MySQL/MariaDB, PostgreSQL, etc.), porque todos sus datos residen o se almacenan en la memoria, lo que los hace fácilmente accesibles a una aplicación. mientras que las bases de datos tradicionales tienen que escribir o leer todos los datos en el disco o en una fuente externa.

Redis se ha convertido en una opción cada vez más frecuente para el almacenamiento en caché, lo que permite la reutilización de los datos almacenados en caché (almacenados dentro del espacio de memoria principal de una aplicación) en lugar de consultar siempre una base de datos en busca de datos de uso frecuente. Por lo tanto, es un compañero fantástico de RDMS (sistemas de administración de bases de datos relacionales) para, en última instancia, mejorar el rendimiento de las aplicaciones.

En esta serie de tutoriales de Redis de tres partes, cubriremos cómo configurar y usar algunas de las características clave de Redis, que son la replicación, alta disponibilidad usando Redis Sentinel y Redis Cluster, los artículos son:

Esta guía muestra cómo configurar la replicación de Redis (con el modo de clúster deshabilitado) en CentOS 8 Linux, incluido cómo instalar Redis, configurar el maestro y las réplicas y probar la replicación.

Importante: un clúster de Redis (es decir, un clúster de replicación) con el modo de clúster deshabilitado tiene un solo grupo de nodos (por ejemplo, un maestro y una o dos réplicas) donde un clúster de Redis con el modo de clúster habilitado puede constar de dos o más grupos de nodos (por ejemplo, tres maestros cada uno con esclavos o dos).

  1. Servidores con instalación de CentOS 8

Redis Master Server: 10.42.0.247
Redis Replica1/Slave1: 10.42.0.21
Redis Replica2/Slave2: 10.42.0.34

Con la configuración anterior (que tiene un solo nodo principal/maestro de lectura/escritura y 2 nodos de réplica de solo lectura), tenemos un solo grupo de nodos que contiene todos los datos del clúster en cada nodo. Una vez que un esclavo se conecta a un maestro, recibe una copia inicial de la base de datos completa y cualquier dato que existía previamente en el esclavo será descartado.

Además, un cliente puede escribir solo en el maestro pero leer desde cualquier nodo del clúster. Y a medida que se realizan escrituras en el maestro, se propagan a todos los esclavos conectados para actualizar los conjuntos de datos de los esclavos en tiempo real.

Paso 1: Instalar Redis en CentOS 8

1. Para empezar, inicie sesión en todos los nodos de CentOS 8 a través de SSH, luego instale el paquete Redis en todos los nodos (maestro y réplicas) usando el administrador de paquetes DNF como se muestra.

# dnf install @redis

2. Una vez completada la instalación del paquete Redis, inicie el servicio Redis, habilítelo para que se inicie automáticamente en cada inicio del sistema y verifique si está funcionando como se indica a continuación.

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

3. También puede confirmar que el servidor Redis está en funcionamiento comprobando los puertos de escucha con el comando ss, como se indica a continuación.

# ss -ltpn | grep redis-server

Paso 2: configurar el servidor maestro de Redis

4. Redis se configura usando el archivo de configuración /etc/redis.conf, un archivo de configuración de ejemplo auto-documentado. Primero, cree una copia de seguridad del archivo original, luego ábralo para editarlo con el editor de línea de comandos que elija.

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

5. De forma predeterminada, una instancia de Redis está configurada para escuchar y aceptar conexiones en la interfaz de bucle invertido, utilizando la directiva bind. Para comunicarse con las réplicas, el maestro debe estar configurado para escuchar en la dirección de loopback IPv4 y su dirección IP de LAN, es decir, 10.42.0.247.

bind 127.0.0.1 10.42.0.247

6. A continuación, establezca el parámetro de modo protegido en no para permitir la comunicación con las réplicas como se muestra.

protected-mode no

Además, Redis escucha en el puerto 6379, que se configura mediante la directiva port . Este es el puerto de datos para comunicarse con las API de la aplicación o los clientes CLI.

port 6379

7. Para proteger opcionalmente las comunicaciones maestro-réplica, podemos proteger al maestro usando la directiva requirepass, de modo que los clientes/réplicas tengan que emitir una contraseña de autenticación antes de ejecutar cualquier comando o iniciar un proceso de sincronización de replicación; de lo contrario, el maestro rechazará la solicitud de cliente/réplica (recuerde establecer una contraseña segura).

Usaremos la siguiente opción con fines de demostración, para mostrar cómo funciona.

requirepass  [email protected]

8. Además, los registros de Redis se almacenan en el archivo /var/log/redis/redis.log, esto se establece usando la directiva logfile y el nivel de verbosidad del servidor predeterminado es el aviso, definido usando el parámetro loglevel.

loglevel  notice
logfile  /var/log/redis/redis.log

9. Dado que systemd es el administrador de sistemas y servicios predeterminado en CentOS 8, puede configurar Redis para interactuar con el árbol de supervisión de systemd estableciendo el parámetro supervisado en systemd.

supervised systemd

10. Después de realizar todas las configuraciones necesarias, guarde el archivo y ciérrelo. Luego reinicie el servicio Redis para aplicar los nuevos cambios.

# systemctl daemon-reload
# systemctl restart redis

11. Para acceder al servidor Redis, necesitamos usar redis-cli (una interfaz de línea de comandos para el servidor redis). De forma predeterminada, se conecta al servidor en el host local (en 127.0.0.1 puerto 6379). Tenga en cuenta que debido a que el servidor está protegido contra los clientes mediante una contraseña, la ejecución de un comando antes de la autenticación debería fallar.

Utilice el comando auth para proporcionar la contraseña de autenticación como se muestra en la siguiente captura de pantalla.

# redis-cli
127.0.0.1:6379> client list
127.0.0.1:6379> AUTH [email protected]
127.0.0.1:6379> client list

12. Para conectarse a una réplica (después de configurarlas como se describe en la siguiente sección), use las opciones -h y -p para especificar la dirección IP/nombre de host de la réplica y puerto respectivamente (no es que el puerto 6379 deba estar abierto en el firewall de la réplica).

# redis-cli -h 10.42.0.21 -p 6379

13. A continuación, abra el puerto de datos del servidor Redis en el firewall para permitir conexiones entrantes al maestro y, posteriormente, vuelva a cargar las reglas del firewall utilizando el comando firewall-cmd como se muestra.

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

Paso 3: Configuración de servidores esclavos/réplica de Redis

14. Para configurar rápidamente una instancia de Redis como una réplica sobre la marcha, use la utilidad redis-cli y llame al comando REPLICAOF como se muestra.

# redis-cli replicaof 10.42.0.247 6379
OR
# redis-cli
127.0.0.1:6379> REPLICAOF 10.42.0.247 6379

15. Para que una conexión de replicación sea permanente, debe realizar los siguientes cambios en el archivo de configuración. Comience haciendo una copia de seguridad del archivo original, luego ábralo para editarlo.

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

16. Para permitir que los clientes se conecten a la réplica para leer datos, agregue la dirección IP de la réplica a la directiva de vinculación.

# replica1
bind 127.0.0.1 10.42.0.21

# replica2
bind 127.0.0.1 10.42.0.34

17. Para configurar una instancia de Redis como réplica, use el parámetro replicaof y establezca la dirección IP del nodo principal (o nombre de host) y el puerto como valores.

replicaof 10.42.0.247 6379

18. A continuación, dado que nuestra instancia maestra está protegida mediante una contraseña, debemos establecer la contraseña en la configuración de la réplica para permitir que se autentique en la maestra, utilizando el parámetro masterauth.

masterauth [email protected]

19. Además, cuando una réplica pierde su conexión con el maestro, o cuando la réplica está en marcha, la réplica se configura para responder a las solicitudes de los clientes, posiblemente con datos “desactualizados”. Pero si es la primera sincronización, entonces el conjunto de datos puede estar vacío. Este comportamiento está controlado por el parámetro replica-serve-stale-data.

Y, dado que Redis 2.6 por defecto, las réplicas son de solo lectura, esto está controlado por el parámetro de réplica de solo lectura. Puede realizar otros ajustes de configuración de réplicas para adaptarse a las necesidades de su aplicación.

20. Una vez que haya realizado todos los cambios necesarios, reinicie el servicio Redis en todas las réplicas.

# systemctl restart redis

21. Además, abra el puerto 6379 en el firewall para permitir conexiones desde el maestro y los clientes a las réplicas, y vuelva a cargar las reglas del firewall.

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

Paso 4: comprobar el estado de replicación de la réplica maestra

22. Una vez que se completa la configuración de replicación maestro-réplica, podemos verificar si la configuración funciona bien de la siguiente manera.

En el maestro, ejecute los siguientes comandos.

# redis-cli
127.0.0.1:6379> AUTH [email protected]
127.0.0.1:6379> info replication

23. Además, verifique el estado de replicación en las réplicas/esclavos de la siguiente manera.

# redis-cli
127.0.0.1:6379> info replication

23. Ahora probemos la replicación configurando un valor-clave en la instancia maestra y verifiquemos si los datos están sincronizados con las réplicas.

En el maestro, haz esto:

# redis-cli
127.0.0.1:6379> AUTH [email protected]
127.0.0.1:6379> set domain 'www.tecmint.com'

24. Luego, verifique si los datos se han sincronizado con las réplicas como se muestra.

# redis-cli
127.0.0.1:6379> get domain

25. Redis tiene una función que permite que una instancia maestra limite el riesgo de perder algunas escrituras en caso de que no haya suficientes réplicas disponibles, a un número específico de segundos.

Esto significa que un maestro puede dejar de aceptar escrituras si hay menos de N réplicas conectadas, con un retraso menor o igual a M segundos, según lo controlan las opciones min-replicas-to-write y min-replicas-max-lag respectivamente.

Para configurarlos, descomente y configure los valores de acuerdo con sus requisitos de configuración en /etc/redis.conf, como se muestra en la siguiente captura de pantalla. Esta configuración significa que, desde el último ping a las réplicas, después de 10 segundos, si hay menos de 2 réplicas en línea, el maestro dejará de aceptar escrituras.

min-replicas-to-write 2
min-replicas-max-lag 10

Puede encontrar más opciones en el resto del archivo de configuración /etc/redis.conf y, para obtener más detalles, lea acerca de la replicación en la documentación de Redis.

En el próximo artículo, cubriremos cómo configurar Redis para alta disponibilidad con Sentinel en CentOS 8. Hasta entonces, permanezca bloqueado y recuerde compartir sus pensamientos y preguntas usando nuestro formulario de comentarios a continuación, que está ahí para que usted se comunique con nosotros.