Redis-Cluster utiliza una estructura descentralizada donde cada nodo almacena datos y el estado completo del clúster. Cada nodo se conecta con todos los demás nodos del sistema. Un clúster de Redis está compuesto por múltiples enstancias Redis, siendo la recomendación oficial de 6 instancias: 3 nodos maestros y 3 nodos esclavos. Cuando falla un nodo maestro, Redis Cluster puede elegir automáticamente el nodo esclavo correspondiente para convertirse en nuevo maestro, garantizando así la alta disponibilidad del servicio.
Antorno de despliegue:
| Dirección IP | Puerto | Rol | Versión Redis |
|---|---|---|---|
| 10.210.21.141 | 7000 | redis-master | 5.0.8 |
| 10.210.21.141 | 7001 | redis-slave | 5.0.8 |
| 10.210.21.142 | 7000 | redis-master | 5.0.8 |
| 10.210.21.142 | 7001 | redis-slave | 5.0.8 |
| 10.210.21.143 | 7000 | redis-master | 5.0.8 |
| 10.210.21.143 | 7001 | redis-slave | 5.0.8 |
1. Instalación de Redis
- Instalar entorno C/C++
Redis requiere entorno C/C++ para su compilación:
yum install -y gcc gcc-c++ make - Descargar paquete de instalación Redis
URL de descarga: http://download.redis.io/releases/
cd /data
wget http://download.redis.io/releases/redis-5.0.8.tar.gz - Descomprimir y compilar
tar -zxvf redis-5.0.8.tar.gz
cd redis-5.0.8
make - Crear directorios de trabajo para Redis (personalizables)
mkdir /data/redis-cluster/{data/{redis_7000,redis_7001},conf,log} -p - Copiar archivos de configuración de Redis
cd redis-5.0.8
cp redis.conf /data/redis-cluster/conf/redis_7000.conf
cp redis.conf /data/redis-cluster/conf/redis_7001.conf
2. Modificación de archivos de configuración de Redis
- Modificar archivo de configuración del redis-master
vi /data/redis-cluster/conf/redis_7000.conf
port 7000 # Puerto de escucha de redis (personalizable)
bind 0.0.0.0 # Permite conexiones desde cualquier dirección. Por defecto es 127.0.0.1, solo local.
daemonize yes # Permite que redis se ejecute en segundo plano
pidfile /var/run/redis_7000.pid # Directorio para almacenar el PID
logfile "/var/log/redis-sentinel.log" # Ruta de los logs de Sentinel
dir /data/redis-cluster/data/redis_7000 # Directorio de trabajo
cluster-enabled yes # Habilitar clúster
cluster-config-file /data/redis-cluster/conf/nodes_7000.conf
# Nombre del archivo de configuración del clúster. Cada nodo tiene su archivo, generado y actualizado por Redis
cluster-node-timeout 15000
# Umbral de tiempo de espera para la interconexión de nodos. En milisegundos, por defecto 15 segundos
appendonly yes
# Redis escribe cada operación en el archivo appendonly.aof,
# y al iniciar, primero lee este archivo para cargar datos en memoria, ignorando RDB.
requirepass miContrasena123 # Contraseña de redis
masterauth miContrasena123 # Contraseña para la sincronización maestro-esclavo
- Modificar archivo de configuración del redis-slave
vi /data/redis-cluster/conf/redis_7001.conf
port 7001
bind 0.0.0.0
daemonize yes
pidfile /var/run/redis-cluster/redis_7001.pid
logfile "/data/redis-cluster/log/redis_7001.log"
dir /data/redis-cluster/data/redis_7001
cluster-enabled yes
cluster-config-file /data/redis-cluster/conf/nodes_7001.conf
cluster-node-timeout 15000
appendonly yes
requirepass miContrasena123
masterauth miContrasena123
3. Distribución a otros servidores del clúster
Copiar Redis y directorios de trabajo a otros servidores:
scp -r redis-5.0.8 redis-cluster root@10.210.21.142:/data
scp -r redis-5.0.8 redis-cluster root@10.210.21.143:/dataCrear enlaces simbólicos para facilitar el inicio del servicio Redis:
ln -s /data/redis-5.0.8/src/redis-server /usr/bin/redis-server
ln -s /data/redis-5.0.8/src/redis-cli /usr/bin/redis-cli### 4. Inicio de Redis
Iniciar dos instencias de redis en cada servidor del clúster:
redis-server /data/redis-cluster/conf/redis_7000.conf
redis-server /data/redis-cluster/conf/redis_7001.confVerificar si el inicio fue exitoso:
ps -ef | grep redisVerificar versiones:
redis-cli --version
redis-server --version### 5. Creación del Cluster Redis
Nota: A partir de Redis 5.0, la creación de clústeres se realiza con redis-cli escrito en C, sin necesidad de Ruby.
Crear clúster especificando 1 réplica por nodo maestro. El orden de creación debe ser maestro-maestro-maestro-esclavo-esclavo-esclavo:
redis-cli -a miContrasena123 --cluster create 10.210.21.141:7000 10.210.21.142:7000 10.210.21.143:7000 10.210.21.141:7001 10.210.21.142:7001 10.210.21.143:7001 --cluster-replicas 1Confirmar la configuración del clúster. Si está correcto, escribir "yes" y presionar Enter.
Si aparece el mensaje anterior, la configuración del clúster fue exitosa.
6. Verificación del Cluster Redis-Cluster
- Conectar al clúster Redis:
redis-cli -a miContrasena123 -h 10.210.21.141 -p 7000 -c
*-a Contraseña Redis, -c modo clúster, especificar IP y puerto*
Nota: Podría ser redirigido a otro servidor - Verificar información del clúster:
cluster info# Ver información del clúster - Ver lista de nodos del clúster:
cluster nodes# Ver lista de nodos del clúster - Ver relación maestro-esclavo en el clúster:
redis-cli -a miContrasena123 -h 10.210.21.141 -p 7000 -c cluster slots | xargs -n8 | awk '{print $3":"$4"->"$6":"$7}' | sort -nk2 -t ':' | uniq
- Realizar operaciones de verificación de datos:
Insertar datos:
set miClave "Hola Redis"
Consultar datos:
get miClave
Conectar a otro nodo y verificar los datos:
redis-cli -a miContrasena123 -h 10.210.21.142 -p 7000 -c
get miClave - Verificar failover del clúster:
Detener uno de los redis-master, su nodo esclavo correspondiente será elegido como nuevo maestro. Cuando el maestro original se recupere, asumirá el rol de esclavo. Se puede verificar abriendo los logs para ver la información relevante.