Escalado de Redis: Guía para configurar Redis Cluster
Aprenda a configurar y administrar un Redis Cluster para alta disponibilidad y escalado horizontal. Esta guía paso a paso cubre la instalación, la configuración de múltiples nodos de Redis, la creación del clúster usando redis-trib.rb, la adición de réplicas para tolerancia a fallos y comandos de gestión esenciales. Lectura esencial para escalar su implementación de Redis.
Escalando Redis: Guía para Configurar un Clúster de Redis
Redis Cluster ayuda cuando una sola instancia de Redis ya no es suficiente para el tamaño de tus datos, tráfico u objetivo de disponibilidad. Distribuye las claves entre múltiples nodos primarios y puede promover réplicas cuando un primario falla.
Esta guía muestra el flujo de trabajo actual de redis-cli --cluster, un ejemplo local de seis nodos y los comandos de gestión que necesitas después de que el clúster esté en funcionamiento.
Comprendiendo los Conceptos del Clúster de Redis
Redis Cluster se basa en algunas ideas prácticas:
- Fragmentación (Sharding): Redis Cluster divide el espacio de claves en 16,384 ranuras de hash. Cada nodo primario posee un rango de ranuras, y los clientes conscientes del clúster enrutan los comandos al nodo que posee la ranura de la clave.
- Replicación: Cada primario puede tener una o más réplicas. Si un primario falla y el clúster aún puede alcanzar el quórum, se puede promover una réplica.
- Bus del clúster: Los nodos se comunican entre sí a través del puerto del cliente y un puerto del bus del clúster, generalmente el puerto del cliente más 10000. Para el puerto
7000, eso significa el puerto del bus17000. - Soporte del cliente: Tu aplicación cliente debe soportar las redirecciones del Clúster de Redis, como
MOVEDyASK. Un cliente que no sea consciente del clúster se comportará mal una vez que las claves residan en diferentes nodos.
Requisitos Previos
Para un clúster de estilo de producción, planifica al menos seis nodos Redis: tres primarios y una réplica para cada primario. Puedes ejecutar el siguiente ejemplo en una sola máquina para practicar, pero los nodos de producción deben distribuirse entre hosts o zonas de disponibilidad.
También necesitas tener Redis instalado, redis-cli disponible y acceso de red entre todos los nodos tanto en los puertos del cliente Redis como en los puertos del bus del clúster. Utiliza una versión de Redis actualmente soportada cuando sea posible.
Configuración de un Clúster de Redis Paso a Paso
Este ejemplo utiliza seis procesos Redis locales en los puertos 7000 a 7005.
1. Instalar Redis
En Debian o Ubuntu, la instalación del paquete se ve así:
sudo apt update
sudo apt install redis-server
Las versiones de los paquetes varían según la distribución. Si necesitas una versión más reciente de Redis, utiliza los paquetes oficiales de Redis o el servicio de Redis gestionado de tu plataforma.
2. Configurar Instancias de Redis para el Modo Clúster
Crea un directorio y un archivo de configuración por proceso Redis:
mkdir cluster
cd cluster
for port in 7000 7001 7002 7003 7004 7005; do
mkdir "$port"
cp /etc/redis/redis.conf "$port/redis.conf"
done
Edita cada redis.conf y establece los valores específicos del puerto. Para 7000/redis.conf, usa:
port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
bind 127.0.0.1
Repite el mismo patrón para 7001 a 7005, cambiando tanto port como cluster-config-file. El archivo nodes-7000.conf es gestionado por Redis. No lo edites manualmente.
Para servidores remotos, enlaza a la interfaz de red privada en lugar de 127.0.0.1, y asegura el acceso con cortafuegos, autenticación y TLS donde sea compatible con tu compilación o servicio de Redis.
3. Iniciar las Instancias de Redis
Inicia cada instancia con su propia configuración:
for port in 7000 7001 7002 7003 7004 7005; do
redis-server "$port/redis.conf"
done
Si tu gestor de paquetes ya ejecuta un servicio Redis predeterminado en el puerto 6379, mantenlo separado de este clúster de prueba o detenlo mientras experimentas.
4. Crear el Clúster con redis-cli --cluster
Usa redis-cli --cluster create para asignar ranuras y réplicas:
redis-cli --cluster create \
127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 \
127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 \
--cluster-replicas 1
Redis mostrará la disposición de ranuras propuesta y pedirá confirmación. Escribe yes si la colocación de primarios y réplicas parece correcta.
5. Verificar el Clúster
Verifica el clúster desde cualquier nodo:
redis-cli -c -p 7000 CLUSTER INFO
redis-cli -c -p 7000 CLUSTER NODES
redis-cli --cluster check 127.0.0.1:7000
CLUSTER INFO debería mostrar cluster_state:ok. La bandera -c le indica a redis-cli que siga las redirecciones del clúster, lo cual es útil cuando pruebas comandos contra claves que pertenecen a otro nodo.
Prueba una escritura y lectura básicas:
redis-cli -c -p 7000 SET user:1 "Ada"
redis-cli -c -p 7001 GET user:1
Incluso si la clave pertenece a una ranura servida por otro nodo, un cliente consciente del clúster puede seguir la redirección.
Añadiendo Réplicas a un Clúster Existente
Si ya tienes un clúster y deseas agregar una nueva réplica, inicia una nueva instancia de Redis con el modo clúster habilitado. Luego, encuentra el ID del nodo primario:
redis-cli -p 7000 CLUSTER NODES
Agrega el nuevo nodo como réplica de ese primario:
redis-cli --cluster add-node \
127.0.0.1:7006 127.0.0.1:7000 \
--cluster-slave \
--cluster-master-id <master_node_id>
La primera dirección es el nuevo nodo. La segunda dirección es cualquier nodo accesible en el clúster existente. Reemplaza <master_node_id> con el ID de CLUSTER NODES.
Gestionando el Clúster
Las tareas comunes de gestión incluyen:
- Verificar salud:
redis-cli --cluster check 127.0.0.1:7000 - Agregar un primario:
redis-cli --cluster add-node <new_host:port> <existing_host:port> - Reasignar ranuras:
redis-cli --cluster reshard <existing_host:port> - Eliminar un nodo: primero mueve las ranuras fuera del nodo si es un primario, luego ejecuta
redis-cli --cluster del-node <existing_host:port> <node_id> - Prueba de conmutación por error manual: ejecuta
CLUSTER FAILOVERdesde una réplica, no desde el primario
Evita mover ranuras manualmente con comandos de bajo nivel a menos que conozcas la secuencia completa de migración. Los ayudantes de redis-cli --cluster reducen la posibilidad de dejar las ranuras en un estado inconsistente.
Mejores Prácticas para el Clúster de Redis
- Usa al menos seis nodos: Tres primarios y tres réplicas le dan al clúster espacio para tolerar una falla de un primario.
- Distribuye las réplicas entre dominios de falla: No coloques un primario y su réplica en el mismo host o zona de disponibilidad cuando puedas evitarlo.
- Asegura Redis: No expongas Redis directamente a redes no confiables. Usa redes privadas, reglas de cortafuegos, autenticación y TLS cuando esté disponible.
- Planifica la memoria por primario: Redis Cluster fragmenta las claves, pero cada primario aún necesita suficiente memoria para sus datos asignados, sobrecarga y crecimiento.
- Usa clientes conscientes del clúster: Confirma que tu biblioteca cliente soporte Redis Cluster antes de migrar el tráfico.
- Monitorea la conmutación por error y el equilibrio de ranuras: Rastrea la memoria, latencia, conexiones rechazadas, retraso de replicación y estado del clúster.
Conclusión
Para un Clúster de Redis práctico, comienza con al menos tres primarios y una réplica por primario, crea el clúster con redis-cli --cluster create y verifícalo con CLUSTER INFO más redis-cli --cluster check. Después de eso, tu trabajo diario es monitorear la memoria, el equilibrio de ranuras, el comportamiento de conmutación por error y la compatibilidad del cliente.