Guía para la Configuración de la Replicación Primario-Réplica de Redis.

Esta guía experta ofrece un tutorial exhaustivo y paso a paso sobre cómo configurar la replicación primario-réplica de Redis para alta disponibilidad y escalabilidad de lectura. Aprenda cómo Redis gestiona la sincronización total y parcial, implemente la directiva crucial `replicaof` a través de archivos de configuración o dinámicamente, y monitoree eficazmente el estado de la sincronización utilizando el comando `INFO replication`. Detallamos las mejores prácticas para configuraciones de producción, incluidas las configuraciones de seguridad y consejos de optimización para grandes conjuntos de datos.

42 vistas

Guía para Configurar la Replicación Primario-Réplica de Redis

La replicación de Redis es un patrón fundamental para lograr alta disponibilidad, redundancia de datos y escalabilidad de lectura. Al configurar un primario (anteriormente llamado maestro) y una o más réplicas (anteriormente llamadas esclavos), se asegura que los datos escritos en el primario se copien automáticamente a todas las réplicas conectadas.

Esta guía proporciona un tutorial completo y paso a paso sobre cómo configurar la replicación primario-réplica de Redis. Cubriremos las directivas de configuración esenciales, los métodos de configuración dinámica y los pasos críticos de monitorización necesarios para construir una implementación de Redis robusta y fiable.


1. Comprender los Fundamentos de la Replicación de Redis

La replicación de Redis es asíncrona (lo que significa que el primario no espera que la réplica confirme las escrituras), lo que permite un alto rendimiento. Opera principalmente a través de dos fases: sincronización inicial y sincronización continua.

Sincronización Completa (SYNC)

Cuando una réplica se conecta a un primario por primera vez, o después de una interrupción de red que impide la resincronización parcial, ocurre una sincronización completa:

  1. La réplica envía un comando PSYNC al primario.
  2. El primario inicia un proceso de guardado en segundo plano para generar un archivo de instantánea RDB (.rdb).
  3. El primario almacena en búfer todos los nuevos comandos de escritura recibidos mientras se está creando el RDB.
  4. Una vez completado el archivo RDB, el primario lo envía a la réplica.
  5. La réplica carga el archivo RDB en memoria.
  6. Finalmente, el primario envía todos los comandos de escritura almacenados en búfer a la réplica para que se ponga al día.

Resincronización Parcial (PSYNC)

Redis 2.8+ soporta la resincronización parcial. Si el enlace entre el primario y la réplica se cae brevemente, la réplica puede solicitar solo los comandos faltantes desde que se interrumpió el enlace, utilizando el búfer de registro de replicación (un búfer circular configurable en el primario).

2. Requisitos Previos y Configuración

Antes de configurar la replicación, asegúrese de tener al menos dos instancias de Redis separadas ejecutándose (o configuraciones separadas ejecutándose en diferentes puertos en el mismo servidor para pruebas).

Para esta guía, asumimos la siguiente configuración:

Instancia Rol Dirección IP Puerto Archivo de Configuración
Primario Primario 192.168.1.100 6379 redis-primary.conf
Réplica 1 Réplica 192.168.1.101 6380 redis-replica-1.conf

Paso 2.1: Configurar la Instancia Primaria

Asegúrese de que su instancia primaria esté lista para aceptar conexiones de las réplicas y esté configurada para gestionar la persistencia (RDB o AOF) si es necesario para la propia estabilidad del primario.

Configuraciones Cruciales del Primario:

  1. Enlace: Asegúrese de que el primario esté enlazado a una dirección IP pública o a 0.0.0.0 si se ejecuta en varias máquinas. Si usa firewalls, asegúrese de que el puerto 6379 esté abierto para las IP de las réplicas.
  2. Persistencia: Aunque no es estrictamente necesario para la replicación en sí, se recomienda encarecidamente habilitar RDB/AOF para la persistencia de datos del primario.
# redis-primary.conf
port 6379
bind 0.0.0.0 # Se enlaza a todas las interfaces (necesario para réplicas externas)
# Habilitar persistencia RDB
save 900 1
save 300 10
save 60 10000

Paso 2.2: Configurar la Instancia Réplica

El núcleo de la configuración de una réplica reside en la directiva replicaof. Esto le indica a la instancia con qué primario debe sincronizar sus datos.

Configuraciones Cruciales de la Réplica:

  1. Puerto: Use un puerto diferente si se ejecuta en la misma máquina.
  2. Directiva de Replicación: Use replicaof o slaveof (el nombre antiguo).
# redis-replica-1.conf
port 6380

# *** Configuración de Replicación Esencial ***
replicaof 192.168.1.100 6379

# Asegúrese de que las réplicas sean de solo lectura (predeterminado desde Redis 5)
replica-read-only yes

# Se recomienda deshabilitar la persistencia en las réplicas si la HA es manejada por Sentinel/Cluster
# Si se necesita persistencia para reinicios rápidos, manténgala habilitada.
save ""

Nota: Si el primario está protegido con una contraseña (usando requirepass), la réplica debe configurarse con masterauth <password> para autenticarse correctamente.

3. Métodos de Implementación

Puede implementar la configuración de replicación editando el archivo de configuración (redis.conf) y reiniciando el servidor, o dinámicamente usando el comando CONFIG SET.

Método 3.1: Archivo de Configuración (Recomendado para Producción)

Después de actualizar redis-replica-1.conf como se muestra arriba, inicie ambas instancias:

# Iniciar Primario
redis-server redis-primary.conf

# Iniciar Réplica 1
redis-server redis-replica-1.conf

Al iniciar, la Réplica 1 intentará inmediatamente conectarse al primario en 192.168.1.100:6379 y comenzará el proceso de sincronización.

Método 3.2: Configuración Dinámica

Si una instancia de Redis ya está en ejecución y desea configurarla como réplica sin reiniciar, use CONFIG SET a través de redis-cli.

  1. Conéctese a la instancia que desea convertir en réplica (ejecutándose en el puerto 6380 en nuestro ejemplo):

    bash redis-cli -p 6380

  2. Ejecute el comando de replicación:

    bash 127.0.0.1:6380> replicaof 192.168.1.100 6379 OK

La instancia en el puerto 6380 eliminará cualquier dato anterior e iniciará una sincronización completa (SYNC) con el nuevo primario.

⚠️ Advertencia: Deshabilitar la Replicación

Para volver a convertir una réplica en una instancia primaria independiente, ejecute replicaof no one en esa instancia.

4. Monitorización del Estado de la Replicación

La monitorización del estado de la conexión es vital para garantizar la consistencia de los datos. Use el comando INFO replication a través de redis-cli tanto en el primario como en la réplica.

4.1 Comprobación del Estado del Primario

Conéctese al primario (6379) y verifique cuántas réplicas están conectadas y su estado:

redis-cli -p 6379 INFO replication

Fragmento de Salida Esperada (Primario):

# Replication
role:master
connected_slaves:1
slave0:ip=192.168.1.101,port=6380,state=online,offset=2048,lag=0
master_replid:a9b1c2...
master_replid2:000000...
master_repl_offset:2048
  • role:master confirma su rol.
  • connected_slaves:1 confirma que la réplica es visible.
  • state=online es el estado estable deseado.
  • lag=0 (o un número muy bajo) indica un rendimiento exitoso de transferencia de datos síncronos.

4.2 Comprobación del Estado de la Réplica

Conéctese a la réplica (6380) y verifique el estado del enlace con el primario:

redis-cli -p 6380 INFO replication

Fragmento de Salida Esperada (Réplica):

# Replication
role:slave
master_host:192.168.1.100
master_port:6379
master_link_status:up
master_sync_in_progress:0
slave_priority:100
slave_read_only:1
  • role:slave confirma su rol.
  • master_link_status:up confirma que la conexión está activa y saludable.
  • master_sync_in_progress:0 significa que la sincronización inicial está completa.

5. Mejores Prácticas y Optimización de la Replicación

5.1 Modo de Solo Lectura de la Replicación

Por defecto, las réplicas son de solo lectura (replica-read-only yes). Este es un mecanismo de seguridad crítico. Intentar escribir en una réplica resultará en un error, garantizando la consistencia de los datos en todo el clúster.

Si deshabilita el modo de solo lectura, cualquier escritura en la réplica será local y se sobrescribirá si el enlace de replicación se rompe y ocurre una sincronización completa.

5.2 Optimización del Tiempo de Sincronización

Si su conjunto de datos es muy grande, el proceso SYNC inicial puede ser lento. Considere estos factores:

  1. Ancho de Banda de Red: Asegure suficiente ancho de banda entre el primario y las réplicas para la transferencia del RDB.
  2. Generación de RDB: El primario necesita CPU y E/S de disco para generar el archivo RDB. Asegure que el servidor tenga recursos disponibles durante la sincronización.
  3. Deshabilitar Persistencia en Disco en las Réplicas (Opcional): Si el primario maneja toda la persistencia y la réplica es solo para escalado de lectura, establecer save "" en la réplica evita la sobrecarga de E/S de escribir archivos RDB, acelerando los reinicios.

5.3 Seguridad y Configuración de Red

Es crucial que el primario no exponga públicamente su puerto de replicación (6379 o cualquier otro) a internet. Configure reglas de firewall para permitir el tráfico de replicación solo desde las direcciones IP designadas de los servidores réplica.

5.4 Usar Réplicas para Escalado de Lectura

El principal beneficio de la replicación es distribuir la carga de lectura. Dirija las aplicaciones que realizan principalmente operaciones de lectura a las instancias de réplica, reservando el primario para las operaciones de escritura, mejorando el rendimiento general del sistema.

Conclusión

Configurar la replicación primario-réplica de Redis es esencial para construir aplicaciones resilientes y de alto rendimiento. Al configurar correctamente la directiva replicaof y monitorizar regularmente el estado del enlace usando INFO replication, usted crea una base para la alta disponibilidad y el escalado de lectura efectivo.

Aunque esta guía se centra en la configuración básica, los entornos de producción a menudo integran capas adicionales de automatización, como Redis Sentinel para la promoción automática del primario y la detección de fallos, o Redis Cluster para el particionamiento automático y la distribución de datos entre múltiples nodos.