Comment configurer un cluster Redis dans CentOS 8 – Partie 3

Redis Cluster est une fonctionnalité intégrée de Redis qui prend en charge le sharding automatique, la réplication et la haute disponibilité qui étaient précédemment implémentés à l’aide de Sentinels. Il est conçu pour deux objectifs majeurs : d’une part, diviser automatiquement votre ensemble de données entre plusieurs instances et, d’autre part, fournir un certain degré de disponibilité pendant les partitions, pour continuer les opérations lorsque certaines instances (en particulier les maîtres) échouent ou ne peuvent pas communiquer avec la majorité des nœuds du cluster.

Cependant, le cluster cesse de fonctionner en cas de défaillances plus importantes (par exemple, lorsque la majorité des instances maîtres ne sont pas disponibles). De plus, si un maître et un esclave échouent en même temps, le cluster ne peut pas continuer les opérations normales (bien que la solution de contournement soit d’ajouter plus de nœuds ou de créer une asymétrie dans le cluster, pour modifier automatiquement la configuration du cluster).

Selon la documentation du cluster Redis, le « cluster minimal » qui fonctionne comme prévu doit contenir au moins 3 nœuds maîtres. Mais la configuration la plus adaptée pour une haute disponibilité devrait comporter au moins 6 nœuds avec trois maîtres et trois esclaves, chaque maître ayant un esclave.

Important : Redis Cluster présente également certaines limitations, telles que le manque de prise en charge des environnements NATted ainsi que ceux où les adresses IP ou les ports TCP sont remappés, par exemple sous Docker. De plus, toutes les bibliothèques clientes ne le prennent pas en charge.

Cet article montre comment configurer un cluster Redis (avec Mode Cluster Désactivé) dans CentOS 8. Il inclut l’installation de Redis, la configuration des nœuds du cluster, la création d’un cluster et le test de la bascule de défaillance du cluster.

Note : Pour ce guide, nous utiliserons des instances Redis fraîches/vierges pour exécuter le mode cluster. Le mode cluster ne fonctionnera pas avec certaines configurations effectuées dans les deux premiers guides de notre Série Redis, en particulier il ne fonctionne pas lorsque le paramètre replica est utilisé.

Prérequis :

  1. Serveurs avec une installation de CentOS 8

Configuration de l’environnement de test

Redis Master1: 10.42.0.247
Redis Master2: 10.42.0.197
Redis Master3: 10.42.0.132

Redis Slave1: 10.42.0.200
Redis Slave2: 10.42.0.21
Redis Slave3: 10.42.0.34
Redis Cluster Logical Diagram

Notre configuration comprend 3 nœuds maîtres en lecture/écriture et 3 nœuds réplicas en lecture seule, chaque maître ayant une réplica, donc trois fragments contiennent toutes les données du cluster dans chaque nœud. Une application API ou un client CLI peut écrire uniquement sur les nœuds maîtres mais lire à partir de n’importe quel nœud du cluster.

Étape 1 : Installation de Redis sur tous les nœuds

1. Connectez-vous à toutes les instances via SSH, puis exécutez la commande suivante pour installer le module Redis en utilisant le gestionnaire de paquets DNF comme indiqué.

# dnf module install redis

2. Ensuite, démarrez le service Redis, activez-le pour qu’il démarre automatiquement au démarrage du système et vérifiez son statut pour vérifier qu’il fonctionne (vérifiez le service sur toutes les 6 instances) :

# systemctl start redis
# systemctl enable redis
# systemctl status redis

Étape 2 : Configuration des instances Redis sur tous les nœuds

3. Cette section décrit comment configurer les nœuds du cluster Redis. N’oubliez pas d’effectuer les configurations ici sur tous les nœuds.

Utilisez le fichier de configuration /etc/redis.conf pour configurer le serveur Redis. Comme pratique recommandée, créez une sauvegarde du fichier d’origine avant de le modifier en utilisant un éditeur de texte en ligne de commande de votre choix.

# cp /etc/redis.conf /etc/redis.conf.orig
# vi /etc/redis.conf

4. Ensuite, trouvez les paramètres de configuration suivants et modifiez leurs valeurs comme indiqué. Le paramètre bind définit l’interface sur laquelle le serveur Redis écoutera, définissez sa valeur sur l’IP LAN de l’instance. Supprimez le 127.0.0.1 car nous avons réalisé que le laisser là ralentit le processus de création de cluster, en particulier à l’étape de rejoindre le cluster.

bind  10.42.0.247

Ensuite, définissez le mode protégé sur non pour permettre les connexions des autres instances du cluster.

protected-mode no

Le paramètre de port définit le port sur lequel le serveur Redis écoutera les connexions, la valeur par défaut est 6379. C’est le port de données pour communiquer avec les clients.

port 6379
Set Redis Listen Interface and Port

5. Le prochain ensemble de paramètres activera le mode cluster et définira certaines de ses fonctionnalités utiles. Le paramètre cluster-activé, lorsqu’il est réglé sur oui, active le mode cluster.

cluster-enabled yes

Ensuite, le paramètre fichier de configuration du cluster définit le nom du fichier de configuration du cluster d’un nœud du cluster (par exemple nodes-6379.conf). Le fichier est créé dans le répertoire de travail (par défaut /var/lib/redis défini à l’aide du paramètre dir) et n’est pas modifiable par l’utilisateur.

cluster-config-file nodes-6379.conf

La prochaine option de cluster utile est délai d’expiration du nœud du cluster, elle est utilisée pour définir le temps maximum en millisecondes pendant lequel une instance peut être indisponible avant d’être considérée en état de défaillance. Une valeur de 15000 est équivalente à 15 secondes.

cluster-node-timeout 15000
Set Cluster Node Timeout

6. Nous devons également activer la persistance de Redis sur disque. Nous pouvons utiliser l’un des modes de persistance, c’est-à-dire le Fichier Append Only (AOF) : il consigne (dans le fichier appendonly.aof créé sous le répertoire de travail) chaque opération d’écriture reçue avec succès par le serveur. Les données seront jouées lors du démarrage du serveur pour reconstruire le jeu de données original.

Pour l’activer, réglez le paramètre appendonly sur oui.

appendonly yes
Set Persistence Options

7. Après avoir apporté toutes les modifications, redémarrez le service Redis sur tous les nœuds pour appliquer les modifications récentes.

# systemctl restart redis

8. À ce stade, chaque nœud du cluster devrait maintenant avoir un ID. Vous pouvez vérifier cela dans le fichier journal situé à /var/log/redis/redis.log.

# cat /var/log/redis/redis.log
Check Cluster Node Log File

9. Ensuite, ouvrez les ports 6397 et 16379 sur toutes les instances. Le dernier port est utilisé pour le bus de cluster (un canal de communication de nœud à nœud utilisant un protocole binaire). C’est une exigence de base pour les connexions TCP du cluster Redis.

# firewall-cmd --zone=public --permanent --add-port=6379/tcp 
# firewall-cmd --zone=public --permanent --add-port=16379/tcp 
# firewall-cmd --reload

Étape 3 : Création du cluster Redis

10. Pour créer le cluster, utilisez le client en ligne de commande redis-cli comme suit. La commande --cluster create permet la création du cluster et --cluster-replicas 1 signifie créer une réplique par maître.

Pour notre configuration qui comporte 6 nœuds, nous aurons 3 maîtres et 3 esclaves.

Remarquez que les 6 premiers nœuds seront considérés comme des maîtres (M) et les trois suivants seront considérés comme des esclaves (S). Le premier esclave c’est-à-dire 10.42.0.200:6379 réplique le premier maître c’est-à-dire 10.42.0.247:6379, le deuxième esclave réplique le deuxième maître, dans cet ordre.

La commande suivante est formatée de manière à ce que le résultat représente notre configuration logique ci-dessus.

# redis-cli --cluster create 10.42.0.247:6379 10.42.0.197:6379 10.42.0.132:6379 10.42.0.200:6379 10.42.0.21:6379 10.42.0.34:6379 --cluster-replicas 1
Create Redis Cluster

11. Une fois la création du cluster réussie, exécutez la commande suivante sur n’importe quel hôte (en spécifiant son adresse IP à l’aide du drapeau -h) pour répertorier tous les nœuds du cluster.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes

Vous devriez pouvoir voir tous les nœuds du cluster, les esclaves indiquant leurs maîtres, comme le montre la capture d’écran suivante.

Check All Cluster Nodes on Any Node

Les différents champs sont dans cet ordre : identifiant du nœud, adresse IP:port, indicateurs, dernier ping envoyé, dernier pong reçu, époque de configuration, état du lien, emplacements (pour les maîtres).

Étape 4 : Test de basculement de cluster Redis

12. Dans cette section, nous allons démontrer comment tester un basculement de cluster. Tout d’abord, prenons note des maîtres.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep master
List Redis Cluster Masters

Prenez également note des esclaves Redis.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave
List All Redis Cluster Slaves

13. Ensuite, arrêtons le service Redis sur l’un des nœuds maîtres par exemple 10.42.0.197 et vérifions tous les nœuds maîtres du cluster.

# systemctl stop redis
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes | grep master

D’après la capture d’écran suivante, vous pouvez voir que le nœud 10.42.0.197:6367 est en état d’échec et que son esclave 10.42.0.21:6379 a été promu au statut de maître.

Check Cluster Failover Status

14. Maintenant, relançons le service Redis sur le nœud défaillant et vérifions tous les maîtres du cluster.

# systemctl start redis
# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep master
Check All Redis Cluster Master Status

Vérifiez également les esclaves du cluster pour confirmer que le maître défaillant est maintenant un esclave.

# redis-cli -h 10.42.0.247 -p 6379 cluster nodes  | grep slave
Check All Redis Cluster Slaves

Étape 5 : Test de la réplication des données à travers le cluster Redis

15. Cette dernière section explique comment vérifier la réplication des données du cluster. Nous allons créer une clé et une valeur sur l’un des maîtres, puis essayer de la lire depuis tous les nœuds du cluster comme suit. Utilisez l’interrupteur -c pour activer le support du cluster sous l’utilitaire redis-cli et accéder aux données en mode cluster.

# redis-cli -c -h 10.42.0.247 -p 6379 set name 'TecMint.com'
# redis-cli -c -h 10.42.0.247 -p 6379 get name
# redis-cli -c -h 10.42.0.21 -p 6379 get name
# redis-cli -c -h 10.42.0.132 -p 6379 get name
# redis-cli -c -h 10.42.0.200 -p 6379 get name
# redis-cli -c -h 10.42.0.197 -p 6379 get name
# redis-cli -c -h 10.42.0.34 -p 6379 get name
Verify Redis Cluster Data Replication

En fin de compte, le Redis Cluster est la méthode préférée pour obtenir le sharding automatique, la réplication et une haute disponibilité. Il existe de nombreux autres paramètres de configuration bien documentés dans le reste du fichier /etc/redis.conf, vous pouvez trouver plus d’informations dans la documentation officielle : tutoriel du cluster Redis et spécification du cluster Redis.

Cela nous amène à la fin de la série de tutoriels Redis en trois parties. Le formulaire de retour ci-dessous peut être utilisé pour poster des questions ou des commentaires.

Source:
https://www.tecmint.com/setup-redis-cluster-in-centos-8/