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

Configura la replicación primario-réplica de Redis con replicaof, autenticación, monitoreo y comprobaciones de seguridad en producción.

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), te aseguras de que los datos escritos en el primario se copien automáticamente a todas las réplicas conectadas.

Esta guía muestra cómo configurar la replicación primario-réplica de Redis, verificar que la sincronización funcione y evitar los errores comunes que exponen Redis o dejan las réplicas silenciosamente desactualizadas.


Comprendiendo los Fundamentos de la Replicación de Redis

La replicación de Redis es asíncrona (lo que significa que el primario no espera a 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 crea el RDB.
  4. Una vez que el archivo RDB está completo, el primario lo envía a la réplica.
  5. La réplica carga el archivo RDB en la 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+ admite la resincronización parcial. Si el enlace entre el primario y la réplica se interrumpe brevemente, la réplica puede solicitar solo los comandos faltantes desde que se rompió el enlace, utilizando el búfer de backlog de replicación (un búfer circular configurable en el primario).

Requisitos Previos y Configuración

Antes de configurar la replicación, asegúrate de tener al menos dos instancias de Redis separadas en ejecución (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úrate de que tu 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 estabilidad del primario.

Configuraciones Cruciales del Primario:

  1. Enlace: Asegúrate de que el primario esté vinculado a una dirección IP pública o 0.0.0.0 si se ejecuta en múltiples máquinas. Si se usan cortafuegos, asegúrate de que el puerto 6379 esté abierto para las IPs 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 vincula 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: Usa un puerto diferente si se ejecuta en la misma máquina.
  2. Directiva de Replicación: Usa replicaof o slaveof (el nombre heredado).
# redis-replica-1.conf
port 6380

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

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

# Recomendar deshabilitar la persistencia en réplicas si la alta disponibilidad es manejada por Sentinel/Cluster
# Si se necesita persistencia para reinicios rápidos, mantenla habilitada.
save ""

Nota: Si el primario requiere una contraseña, configura la réplica con masterauth <contraseña>. En Redis 6 y configuraciones ACL posteriores, también configura masteruser cuando el usuario de replicación no es el usuario predeterminado.

Métodos de Implementación

Puedes implementar la replicación editando el archivo de configuración y reiniciando el servidor, o dinámicamente ejecutando el comando REPLICAOF desde redis-cli.

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

Después de actualizar redis-replica-1.conf como se muestra arriba, inicia 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 deseas convertirla en una réplica sin reiniciar, ejecuta REPLICAOF a través de redis-cli.

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

    redis-cli -p 6380
    
  2. Ejecuta el comando de replicación:

    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 convertir una réplica de nuevo en una instancia primaria independiente, ejecuta replicaof no one en esa instancia.

4. Monitoreo del Estado de la Replicación

Monitorear el estado de la conexión es vital para asegurar la consistencia de los datos. Usa el comando INFO replication a través de redis-cli tanto en el primario como en la réplica.

4.1 Verificar el Estado del Primario

Conéctate al primario (6379) y verifica 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 valor bajo significa que la réplica está respondiendo puntualmente. La replicación de Redis sigue siendo asíncrona, por lo que esto no es una garantía de cero pérdida de datos.

4.2 Verificar el Estado de la Réplica

Conéctate a la réplica (6380) y verifica 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.

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

5.1 Modo de Solo Lectura de la Réplica

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, asegurando la consistencia de los datos en todo el clúster.

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

5.2 Optimizar el Tiempo de Sincronización

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

  1. Ancho de Banda de Red: Asegura 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. Asegúrate de que el servidor tenga recursos disponibles durante la sincronización.
  3. Deshabilitar la Persistencia en Disco en 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 u otro) a internet. Configura reglas de cortafuegos 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 beneficio principal de la replicación es distribuir la carga de lectura. Dirige las aplicaciones que realizan principalmente operaciones de lectura a las instancias réplica, reservando el primario para operaciones de escritura, mejorando el rendimiento general del sistema.

Qué Hacer a Continuació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 monitorear regularmente el estado del enlace usando INFO replication, creas una base para la alta disponibilidad y el escalado efectivo de lectura.

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 la partición y distribución automática de datos en múltiples nodos.