Mettre à l'échelle Redis : Guide de configuration d'un cluster Redis

Apprenez à configurer et gérer un cluster Redis pour une haute disponibilité et une mise à l'échelle horizontale. Ce guide étape par étape couvre l'installation, la configuration de plusieurs nœuds Redis, la création du cluster à l'aide de redis-trib.rb, l'ajout de répliques pour la tolérance aux pannes et les commandes de gestion essentielles. Lecture indispensable pour mettre à l'échelle votre déploiement Redis.

Mise à l'échelle de Redis : Guide de configuration d'un cluster Redis

Un cluster Redis est utile lorsqu'une seule instance Redis ne suffit plus pour la taille de vos données, votre trafic ou vos objectifs de disponibilité. Il partitionne les clés sur plusieurs nœuds primaires et peut promouvoir des réplicas en cas de défaillance d'un primaire.

Ce guide présente le workflow actuel redis-cli --cluster, un exemple local à six nœuds et les commandes de gestion nécessaires après le démarrage du cluster.

Comprendre les concepts du cluster Redis

Le cluster Redis repose sur quelques idées pratiques :

  • Partitionnement : Le cluster Redis divise l'espace de clés en 16 384 slots de hachage. Chaque nœud primaire possède une plage de slots, et les clients compatibles avec le cluster acheminent les commandes vers le nœud propriétaire du slot de la clé.
  • Réplication : Chaque primaire peut avoir un ou plusieurs réplicas. Si un primaire tombe en panne et que le cluster peut toujours atteindre le quorum, un réplica peut être promu.
  • Bus de cluster : Les nœuds communiquent entre eux sur le port client et un port de bus de cluster, généralement le port client plus 10000. Pour le port 7000, cela signifie le port de bus 17000.
  • Support client : Votre application cliente doit prendre en charge les redirections du cluster Redis telles que MOVED et ASK. Un client non compatible avec le cluster se comportera mal une fois que les clés résideront sur différents nœuds.

Prérequis

Pour un cluster de type production, prévoyez au moins six nœuds Redis : trois primaires et un réplica pour chaque primaire. Vous pouvez exécuter l'exemple ci-dessous sur une seule machine pour vous entraîner, mais les nœuds de production doivent être répartis sur plusieurs hôtes ou zones de disponibilité.

Vous devez également avoir Redis installé, redis-cli disponible et un accès réseau entre tous les nœuds sur les ports clients Redis et les ports du bus de cluster. Utilisez une version de Redis actuellement prise en charge dans la mesure du possible.

Configuration d'un cluster Redis étape par étape

Cet exemple utilise six processus Redis locaux sur les ports 7000 à 7005.

1. Installer Redis

Sur Debian ou Ubuntu, l'installation du paquet ressemble à ceci :

sudo apt update
sudo apt install redis-server

Les versions des paquets varient selon la distribution. Si vous avez besoin d'une version plus récente de Redis, utilisez les paquets officiels de Redis ou le service Redis géré de votre plateforme.

2. Configurer les instances Redis pour le mode cluster

Créez un répertoire et un fichier de configuration par processus 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

Modifiez chaque redis.conf et définissez les valeurs spécifiques au port. Pour 7000/redis.conf, utilisez :

port 7000
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
appendonly yes
bind 127.0.0.1

Répétez le même modèle pour 7001 à 7005, en changeant à la fois port et cluster-config-file. Le fichier nodes-7000.conf est géré par Redis. Ne le modifiez pas manuellement.

Pour les serveurs distants, liez-vous à l'interface réseau privée au lieu de 127.0.0.1 et sécurisez l'accès avec des pare-feu, l'authentification et TLS si votre build ou service Redis le prend en charge.

3. Démarrer les instances Redis

Démarrez chaque instance avec sa propre configuration :

for port in 7000 7001 7002 7003 7004 7005; do
  redis-server "$port/redis.conf"
done

Si votre gestionnaire de paquets exécute déjà un service Redis par défaut sur le port 6379, gardez-le séparé de ce cluster de test ou arrêtez-le pendant vos expériences.

4. Créer le cluster avec redis-cli --cluster

Utilisez redis-cli --cluster create pour attribuer les slots et les 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 affichera la disposition proposée des slots et demandera une confirmation. Tapez yes si le placement des primaires et des réplicas vous semble correct.

5. Vérifier le cluster

Vérifiez le cluster à partir de n'importe quel nœud :

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 doit afficher cluster_state:ok. L'option -c indique à redis-cli de suivre les redirections du cluster, ce qui est utile lorsque vous testez des commandes sur des clés appartenant à un autre nœud.

Essayez une écriture et une lecture de base :

redis-cli -c -p 7000 SET user:1 "Ada"
redis-cli -c -p 7001 GET user:1

Même si la clé appartient à un slot desservi par un autre nœud, un client compatible avec le cluster peut suivre la redirection.

Ajout de réplicas à un cluster existant

Si vous avez déjà un cluster et souhaitez ajouter un nouveau réplica, démarrez une nouvelle instance Redis avec le mode cluster activé. Ensuite, trouvez l'ID du nœud primaire :

redis-cli -p 7000 CLUSTER NODES

Ajoutez le nouveau nœud en tant que réplica de ce primaire :

redis-cli --cluster add-node \
  127.0.0.1:7006 127.0.0.1:7000 \
  --cluster-slave \
  --cluster-master-id <master_node_id>

La première adresse est le nouveau nœud. La deuxième adresse est n'importe quel nœud accessible du cluster existant. Remplacez <master_node_id> par l'ID de CLUSTER NODES.

Gestion du cluster

Les tâches de gestion courantes incluent :

  • Vérifier l'état : redis-cli --cluster check 127.0.0.1:7000
  • Ajouter un primaire : redis-cli --cluster add-node <new_host:port> <existing_host:port>
  • Re-partitionner les slots : redis-cli --cluster reshard <existing_host:port>
  • Supprimer un nœud : déplacez d'abord les slots du nœud s'il s'agit d'un primaire, puis exécutez redis-cli --cluster del-node <existing_host:port> <node_id>
  • Test de basculement manuel : exécutez CLUSTER FAILOVER à partir d'un réplica, pas du primaire

Évitez de déplacer manuellement les slots avec des commandes de bas niveau, sauf si vous connaissez la séquence de migration complète. Les assistants redis-cli --cluster réduisent le risque de laisser les slots dans un état incohérent.

Bonnes pratiques pour le cluster Redis

  • Utilisez au moins six nœuds : Trois primaires et trois réplicas donnent au cluster la capacité de tolérer une panne primaire.
  • Répartissez les réplicas sur les domaines de défaillance : Ne placez pas un primaire et son réplica sur le même hôte ou la même zone de disponibilité lorsque vous pouvez l'éviter.
  • Sécurisez Redis : N'exposez pas Redis directement à des réseaux non fiables. Utilisez un réseau privé, des règles de pare-feu, l'authentification et TLS lorsque cela est disponible.
  • Planifiez la mémoire par primaire : Le cluster Redis partitionne les clés, mais chaque primaire a toujours besoin de suffisamment de mémoire pour ses données attribuées, les frais généraux et la croissance.
  • Utilisez des clients compatibles avec le cluster : Confirmez que votre bibliothèque cliente prend en charge le cluster Redis avant de basculer le trafic.
  • Surveillez le basculement et l'équilibre des slots : Suivez la mémoire, la latence, les connexions rejetées, le décalage de réplication et l'état du cluster.

Conclusion

Pour un cluster Redis pratique, commencez avec au moins trois primaires et un réplica par primaire, créez le cluster avec redis-cli --cluster create et vérifiez-le avec CLUSTER INFO et redis-cli --cluster check. Ensuite, votre travail quotidien consiste à surveiller la mémoire, l'équilibre des slots, le comportement de basculement et la compatibilité des clients.