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:
- 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 está creando el RDB.
- Una vez completado el archivo RDB, el primario lo envía a la réplica.
- La réplica carga el archivo RDB en 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+ 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:
- Enlace: Asegúrese de que el primario esté enlazado a una dirección IP pública o a
0.0.0.0si 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. - 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:
- Puerto: Use un puerto diferente si se ejecuta en la misma máquina.
- Directiva de Replicación: Use
replicaofoslaveof(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 conmasterauth <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.
-
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 -
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 oneen 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:masterconfirma su rol.connected_slaves:1confirma que la réplica es visible.state=onlinees 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: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.
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:
- Ancho de Banda de Red: Asegure 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. Asegure que el servidor tenga recursos disponibles durante la sincronización.
- 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.