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.

88 vistas

Escalando Redis: Guía para configurar Redis Cluster

Redis, un potente almacén de estructuras de datos en memoria, se utiliza ampliamente como base de datos, caché y intermediario de mensajes. Si bien una única instancia de Redis puede manejar una carga significativa, muchas aplicaciones eventualmente requieren mayor disponibilidad y la capacidad de escalar horizontalmente para acomodar volúmenes de datos y tráfico crecientes. Redis Cluster proporciona una solución nativa para lograr ambos objetivos.

Esta guía lo llevará a través del proceso de configuración, ajuste y administración de un Redis Cluster. Cubriremos los conceptos fundamentales, proporcionaremos instrucciones paso a paso para la instalación y configuración, y discutiremos tareas de administración esenciales para garantizar que su clúster siga siendo robusto y de alto rendimiento.

Comprendiendo los Conceptos de Redis Cluster

Antes de sumergirse en la configuración, es crucial comprender los conceptos centrales que sustentan Redis Cluster:

  • Sharding (Particionamiento): Redis Cluster particiona su conjunto de datos a través de múltiples nodos de Redis. Cada nodo es responsable de un subconjunto de las ranuras hash (16384 en total). Cuando un cliente necesita acceder a una clave, la biblioteca del cliente calcula a qué ranura hash pertenece la clave y dirige la solicitud al nodo apropiado.
  • Replicación: Para alta disponibilidad, cada nodo principal en el clúster puede tener uno o más nodos réplica. Si un nodo principal falla, una de sus réplicas puede ser promovida para ocupar su lugar, minimizando el tiempo de inactividad.
  • Protocolo Gossip: Los nodos de Redis Cluster se comunican entre sí utilizando un protocolo gossip. Esto permite a los nodos descubrirse mutuamente, intercambiar información sobre su estado y detectar fallos.
  • Consenso: Cuando un nodo principal falla, el clúster necesita alcanzar un consenso entre los nodos principales restantes para elegir un nuevo principal de entre sus réplicas. Este proceso garantiza que el clúster permanezca operativo.

Prerrequisitos

Para configurar un Redis Cluster, necesitará:

  • Múltiples servidores o máquinas virtuales (se recomiendan al menos 6 nodos para una configuración lista para producción: 3 principales y 3 réplicas).
  • Redis instalado en cada servidor. Asegúrese de estar utilizando Redis versión 3.0 o posterior.
  • Conectividad de red entre todos los nodos. Los nodos deben poder comunicarse entre sí en su puerto de cliente y su puerto de bus de clúster (puerto de cliente + 10000).
  • redis-cli, la interfaz de línea de comandos de Redis, que incluye el script redis-trib.rb para la creación de clústeres.

Configuración de un Redis Cluster: Paso a Paso

Esta sección proporciona una guía práctica paso a paso para crear un Redis Cluster básico. Para simplificar, asumiremos que está configurando un clúster en una sola máquina utilizando diferentes puertos para cada nodo. En un entorno de producción, normalmente distribuiría estos nodos en diferentes máquinas físicas o virtuales.

1. Instalar Redis

Si Redis no está instalado todavía, siga la guía oficial de instalación de Redis para su sistema operativo. Por ejemplo, en Debian/Ubuntu:

sudo apt update
sudo apt install redis-server

2. Configurar Instancias de Redis para Modo Clúster

Para cada nodo de su clúster, necesita un archivo de configuración de Redis separado. Cree directorios para cada nodo y copie el archivo redis.conf predeterminado.

Supongamos que estamos configurando un clúster principal de 3 nodos sin réplicas para esta configuración inicial. Utilizaremos los puertos 7000, 7001 y 7002.

# Crear directorios para cada nodo
mkdir cluster
cd cluster
mkdir 7000 7001 7002

# Copiar redis.conf a cada directorio
cp /etc/redis/redis.conf ./7000/
cp /etc/redis/redis.conf ./7001/
cp /etc/redis/redis.conf ./7002/

Ahora, edite el archivo de configuración para cada nodo. Para 7000/redis.conf, 7001/redis.conf y 7002/redis.conf, realice los siguientes cambios:

  • port 700X (donde X es 0, 1 o 2)
  • cluster-enabled yes
  • cluster-config-file nodes-700X.conf (Este archivo lo administra Redis y no debe editarse manualmente. Almacena el estado del clúster).
  • cluster-node-timeout 5000 (Tiempo de espera recomendado en milisegundos para que un nodo se considere fallido).
  • appendonly yes (Recomendado para durabilidad de datos, especialmente en producción)

Ejemplo para 7000/redis.conf:

port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
# Asegúrese de que bind esté configurado en 0.0.0.0 o la IP correcta si se ejecuta en una máquina remota
bind 0.0.0.0

Repita estos cambios para 7001/redis.conf (puerto 7001) y 7002/redis.conf (puerto 7002).

3. Iniciar Instancias de Redis

Inicie cada instancia de Redis utilizando su archivo de configuración específico:

redis-server ./7000/redis.conf
redis-server ./7001/redis.conf
redis-server ./7002/redis.conf

Si tiene Redis ejecutándose como un servicio, es posible que deba detener la instancia predeterminada (sudo systemctl stop redis-server) e iniciarlas manualmente como se muestra arriba, o configurar múltiples archivos de servicio.

4. Crear el Clúster usando redis-trib.rb

El script redis-trib.rb es una gema de Ruby que ayuda a automatizar la creación de un Redis Cluster. Está incluido con las distribuciones de Redis.

Navegue al directorio donde se encuentra redis-trib.rb (a menudo en /usr/share/redis/ o es posible que deba encontrarlo dentro de su instalación de Redis). Es posible que necesite instalar Ruby si no está presente (sudo apt install ruby-full).

Ejecute el script para crear un clúster con 3 nodos maestros:

# Asegúrese de estar en el directorio del clúster o proporcione rutas completas
# ruby /path/to/redis/src/redis-trib.rb create --replicas 0 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002

# O si redis-trib.rb está en su PATH
redis-trib.rb create --replicas 0 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002

Este comando:
* create: Indica a redis-trib.rb que cree un nuevo clúster.
* --replicas 0: Especifica que queremos 0 réplicas por maestro. Para una configuración de producción, usaría --replicas 1 (o más).
* 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002: Enumera los nodos que participarán en el clúster.

El script le pedirá confirmación. Escriba yes para continuar. Luego asignará las ranuras hash a cada nodo maestro y configurará el clúster.

5. Verificar el Clúster

Después de que redis-trib.rb termine, puede conectarse a cualquier nodo y verificar el estado del clúster:

redis-cli -c -p 7000
CLUSTER INFO
CLUSTER NODES

El comando CLUSTER INFO debería mostrar cluster_state:ok. El comando CLUSTER NODES enumerará todos los nodos del clúster, sus roles y sus ranuras asignadas.

Consejo: Utilice la opción -c con redis-cli (redis-cli -c) para habilitar el modo clúster. Esto permite a redis-cli redirigir automáticamente los comandos al nodo correcto cuando se necesita una migración o redirección de ranura hash.

Añadir Réplicas a un Clúster Existente

Para alta disponibilidad, debe añadir réplicas. Añadamos una réplica para el nodo en el puerto 7000 (maestro) en el puerto 7003.

  1. Configurar el nuevo nodo: Cree un nuevo directorio (por ejemplo, cluster/7003), copie redis.conf y actualícelo para el puerto 7003, habilitando el modo clúster y estableciendo el cluster-config-file.
    ini port 7003 cluster-enabled yes cluster-config-file nodes-7003.conf cluster-node-timeout 5000 appendonly yes bind 0.0.0.0
  2. Iniciar el nuevo nodo: redis-server ./7003/redis.conf
  3. Añadir la réplica usando redis-trib.rb: Conéctese a su clúster existente usando redis-cli -c -p 7000 y use el comando CLUSTER REPLICATE o vuelva a usar redis-trib.rb. Usar redis-trib.rb es generalmente más simple para la configuración inicial.

    ```bash

    Ejemplo usando redis-trib.rb para añadir una réplica para el nodo 7000

    Necesita el ID del nodo del maestro que desea replicar.

    Primero, obtenga el ID del nodo: redis-cli -p 7000 CLUSTER NODES

    Supongamos que el ID del nodo maestro es 'your_master_node_id'

    redis-trib.rb --cluster-add-node 127.0.0.1:7003 --cluster-slave --cluster-master-id 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002
    `` *Nota*: El comandoredis-trib.rbpara añadir nodos puede ser un poco complejo. Un enfoque más simple para añadir réplicas es iniciar primero la nueva instancia réplica, luego conectarse al nodo maestro a través deredis-cliy ejecutar el comandoCLUSTER REPLICATE `.

    Alternativamente, puede usar redis-trib.rb para reconfigurar un clúster existente con réplicas:

    ```bash

    Ejemplo para añadir réplicas a un clúster de 3 maestros existente

    redis-trib.rb replace-node-master --replicas 1 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
    ```
    Este comando es más complejo y asume que ha configurado nodos adicionales (7003, 7004, 7005) como réplicas.

6. Administración del Clúster

  • Añadir/Eliminar Nodos: Puede añadir nuevos nodos maestros y réplicas para escalar el clúster. Se pueden usar redis-trib.rb o comandos manuales. Eliminar nodos implica migrar primero las ranuras del nodo.
  • Failover: Redis Cluster maneja automáticamente el failover. Si un nodo maestro se vuelve inalcanzable, sus réplicas intentarán ser promovidas. Puede simular fallos usando CLUSTER FAILOVER (en una réplica) o deteniendo un nodo.
  • Mover Ranuras: Puede mover manualmente ranuras hash entre nodos maestros usando los comandos CLUSTER SETSLOT <slot> IMPORTING/NODE y MIGRATE. Esto es útil para reequilibrar el clúster o prepararse para eliminar un nodo.

Mejores Prácticas para Redis Cluster

  • Use al menos 6 nodos: Un clúster listo para producción debe tener al menos 3 maestros y 3 réplicas (una réplica por maestro) para tolerar fallos.
  • Distribuya los nodos entre zonas de disponibilidad: Para despliegues en la nube, coloque los nodos en diferentes zonas de disponibilidad para protegerse contra fallos a nivel de zona.
  • Supervise su clúster: Utilice las herramientas de monitorización de Redis y sistemas de monitorización externos para seguir el rendimiento, el uso de memoria y el estado de los nodos.
  • Configure protected-mode no: Si ejecuta Redis Cluster en una red, asegúrese de que protected-mode no esté configurado en su redis.conf y use un firewall para restringir el acceso.
  • Use appendonly yes: Para la durabilidad de los datos, asegúrese de que la persistencia del archivo de solo anexión esté habilitada.
  • Soporte de la biblioteca cliente: Asegúrese de que su biblioteca cliente de Redis admita Redis Cluster y maneje la redirección correctamente.

Conclusión

La configuración de un Redis Cluster es un paso crítico para las aplicaciones que requieren alta disponibilidad y escalabilidad horizontal. Al comprender los conceptos centrales de sharding, replicación y comunicación del clúster, puede desplegar y administrar con éxito un Redis Cluster robusto. Recuerde planificar la topología de su clúster, monitorear su estado y seguir las mejores prácticas para garantizar un rendimiento y una fiabilidad óptimos.