Fundamentos de Redis Cluster
Redis Cluster resuelve limitaciones de replicación maestro-esclavo y Sentinel, abordando:
- Escrituras concurrentes intensivas
- Almacenamiento de datos masivos
Características principales:
- Múltiples nodos maestros que distribuyen datos
- Réplicas esclavas para cada maestro
- Detección de estado mediante ping entre nodos
- Enrutamiento automático de solicitudes clientes
Configuración Inicial
Implementación con 3 maestros (7101-7103) y 3 esclavos (8101-8103):
# Crear directorios
mkdir /ruta/redis/{7101,7102,7103,8101,8102,8103}
# Configuración base (redis.conf):
port 7101
cluster-enabled yes
cluster-config-file /ruta/redis/7101/nodos.conf
cluster-node-timeout 5000
dir /ruta/redis/7101
bind direccion_ip
daemonize yes
replica-announce-ip direccion_ip
protected-mode no
Despliegue
# Copiar configuración
find /ruta/redis -maxdepth 1 -type d -exec cp redis.conf {} \;
# Iniciar instancias
redis-server /ruta/redis/7101/redis.conf
redis-server /ruta/redis/7102/redis.conf
...
Creación del Clúster
redis-cli --cluster create \\
--cluster-replicas 1 \\
direccion_ip:7101 direccion_ip:7102 direccion_ip:7103 \\
direccion_ip:8101 direccion_ip:8102 direccion_ip:8103
Verificación:
redis-cli -p 7101 cluster nodes
Particionamiento con Hash Slots
Mecanismo de distribución (16384 slots):
redis-cli -c -p 7101
> SET ejemplo_valor prueba
# Calcula slot y redirige a nodo correspondiente
Agrupamiento de datos:
SET {grupo1}clave1 valor1 # Mismo slot para {grupo1}*
SET {grupo1}clave2 valor2
Operaciones de Escalado
Incorporar Nuevo Nodo
# Agregar maestro
redis-cli --cluster add-node direccion_ip:7104 direccion_ip:7101
# Rebalancear slots
redis-cli --cluster reshard direccion_ip:7101
# Especificar slots a migrar y nodo destino
Eliminar Nodo
# Migrar slots primero
redis-cli --cluster reshard direccion_ip:7104
# Eliminar nodo
redis-cli --cluster del-node direccion_ip:7104 <node_id>
Mecanismos de Failover
Promoción automática de esclavos ante fallos. Failover manual:
# En esclavo
CLUSTER FAILOVER
Opciones avanzadas:
CLUSTER FAILOVER FORCE # Ignora sincronización
CLUSTER FAILOVER TAKEOVER # Omite consenso
Integración con Spring
spring.redis.cluster.nodes=\
direccion_ip:7101,\
direccion_ip:7102,\
direccion_ip:7103,\
direccion_ip:8101,\
direccion_ip:8102,\
direccion_ip:8103