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:
- La réplica envía un comando
PSYNCal primario. - El primario inicia un proceso de guardado en segundo plano para generar un archivo de instantánea RDB (
.rdb). - El primario almacena en búfer todos los nuevos comandos de escritura recibidos mientras se crea el RDB.
- Una vez que el archivo RDB está completo, el primario lo envía a la réplica.
- La réplica carga el archivo RDB en la memoria.
- 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:
- Enlace: Asegúrate de que el primario esté vinculado a una dirección IP pública o
0.0.0.0si 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. - 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:
- Puerto: Usa un puerto diferente si se ejecuta en la misma máquina.
- Directiva de Replicación: Usa
replicaofoslaveof(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 configuramasterusercuando 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.
Conéctate a la instancia que deseas convertir en una réplica (ejecutándose en el puerto 6380 en nuestro ejemplo):
redis-cli -p 6380Ejecuta 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 oneen 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:masterconfirma su rol.connected_slaves:1confirma que la réplica es visible.state=onlinees el estado estable deseado.lag=0o 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:slaveconfirma su rol.master_link_status:upconfirma que la conexión está activa y saludable.master_sync_in_progress:0significa 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:
- Ancho de Banda de Red: Asegura suficiente ancho de banda entre el primario y las réplicas para la transferencia del RDB.
- 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.
- 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.