Déploiement d'un cluster Redis 5 pour une architecture Web haute performance et haute concurrence

Redis est une base de données NoSQL en mémoire de type clé-valeur, écrite en C sous licence BSD. Elle spuporte la mise en réseau, la persistance sur disque via des snapshots et journaux (AOF), et offre des API pour plusieurs langages. Sa capacité à stocker toutes les données en mémoire permet des opérations de lecture/écriture très rapides, ce qui est idéal pour gérer des pics de concurrence lors d'événements comme les ventes flash. En intégrant un cache Redis entre l'application et une base de données relationnelle comme MySQL, on réduit la latence des requêtes et on améliore la réactivité globale du système.

Avec la version 5.0, Redis a simplifié la création de clusters en remplaçant l'ancienne méthode basée sur Ruby par une approche utilisant l'outil redis-cli en C. Un cluster Redis utilise une architecture décentralisée où chaque nœud possède les données et l'état complet du cluster, assurant la haute disponibilité grâce à un modèle maître-esclave. Si un maître tombe en panne, un esclave est promu pour reprendre son rôle. Le mécanisme de vote garantit la tolérance aux pannes : la majorité des maîtres doivent détecter une défaillance pour qu'un nœud soit considéré comme indisponible. Pour une configuration minimale, un cluster nécessite au moins trois maîtres, chacun avec un esclave, soit six nœuds au total.

  1. Installation de Redis en mode autonome

Téléchargez et compilez la source de Redis 5.0.5 à partir du site officiel :

wget http://download.redis.io/releases/redis-5.0.5.tar.gz
tar xzf redis-5.0.5.tar.gz
cd redis-5.0.5
make

Modifiez le fichier de configuration pour exécuter Redis en arrière-plan. Ouvrez /opt/redis/redis.conf et changez daemonize no en daemonize yes. Démarrez ensuite le service :

/opt/redis/src/redis-server /opt/redis/redis.conf

Vérifiez que le processus est actif avec :

ps aux | grep redis
  1. Configuration du cluster Redis

Créez une structure de répertoires pour six nœuds avec des ports distincts :

mkdir -p /var/redis-cluster/{6000,6001,6002,6003,6004,6005}

Copiez le fichier de configuration de base dans chaque sous-répertoire :

for port in 6000 6001 6002 6003 6004 6005; do
  cp /opt/redis/redis.conf /var/redis-cluster/$port/
done

Modifiez individuellement chaque fichier de configuration. Exemple pour le nœud 6000 :

port 6000
cluster-enabled yes
cluster-config-file cluster-node-6000.conf
cluster-node-timeout 5000
appendonly yes
daemonize yes
protected-mode no
pidfile /var/run/redis-6000.pid

Répétez cette procédure pour les nœuds 6001 à 6005, en ajustant les valeurs de port, cluster-config-file et pidfile en conséquence.

Démarrez chaque instance Redis :

for port in 6000 6001 6002 6003 6004 6005; do
  /opt/redis/src/redis-server /var/redis-cluster/$port/redis.conf
done

Validez que tous les processus fonctionnent :

ps aux | grep redis
  1. Initialisation du cluster

Utilisez redis-cli pour créer le cluster avec un maître et un esclave par nœud :

/opt/redis/src/redis-cli --cluster create 127.0.0.1:6000 127.0.0.1:6001 127.0.0.1:6002 127.0.0.1:6003 127.0.0.1:6004 127.0.0.1:6005 --cluster-replicas 1

Confirmez la configuration en tapant yes lorsque demandé.

  1. Vérification et gestion du cluster

Pour inspecter l'état du cluster et la répartition des slots :

/opt/redis/src/redis-cli --cluster check 127.0.0.1:6000

Pour arrêter le cluster proprement, utilisez l'outil inclus dans Redis. Modifiez le script /opt/redis/utils/create-cluster/create-cluster pour définir les ports à 5999 et le nombre de nœuds à 6, ce qui générera les instances de 6000 à 6005. Ensuite, exécutez :

/opt/redis/utils/create-cluster/create-cluster stop

Pour relancer le cluster après un arrêt :

/opt/redis/utils/create-cluster/create-cluster start

Pour obtenir de l'aide sur les commandes de cluster :

/opt/redis/src/redis-cli --cluster help

Étiquettes: Redis Redis Cluster Cache High-Concurrency NoSQL

Publié le 12 juillet à 23h59