Construction du cluster Redis5.0 (deux serveurs)

1. Introduction

Objectif : le cluster Redis construit
la version de Redis : redis5.0.8
Deux machines : Machine Linux HUAWEI CLOUD à configuration basse
Utilisez deux machines virtuelles pour simuler 6 nœuds, une machine a 3 nœuds et créer un environnement à 3 maîtres et 3 esclaves.
Les deux machines virtuelles sont Huawei Cloud EulerOS 2.0, un EulerOS (IP : 192.168.2.180) et un EulerOS (IP : 192.168.3.23).

2. Configurer la connexion intranet des deux machines

Interconnexion intranet de deux machines Huawei Cloud
https://blog.csdn.net/craftsman2020/article/details/128127525

3. installation redis

Installation Linux et déploiement de Redis
https://blog.csdn.net/craftsman2020/article/details/122851974

4. Différences entre les versions de cluster redis avant 5.0 et après 5.0

4.1 Création de clusters dans des versions antérieures à redis 5.0

Avant redis5.0, redis-trib.rb était utilisé comme commande pour créer un cluster, qui était implémenté sur la base du langage ruby ​​et dépendait de l' environnement ruby .

  • Créer une commande de cluster
redis-trib.rb create --replicas 1 127.0.0.1:6379 127.0.0.1:6378 127.0.0.1:6377 127.0.0.1:6376 127.0.0.1:6375 127.0.0.1:6374

4.2 Créer un cluster après redis5.0

Après redis5.0, redis-cli est utilisé comme commande pour créer un cluster, qui est implémenté sur la base du langage C. Étant donné que redis lui-même est implémenté sur la base de C, la construction du cluster après 5.0 ne dépend pas d'autres environnements. version avant 5.0, il est plus facile d'en construire plusieurs.

  • Créer une commande de cluster
redis-cli --cluster create  127.0.0.1:6379 127.0.0.1:6378 127.0.0.1:6377 127.0.0.1:6376 127.0.0.1:6375 127.0.0.1:6374 --cluster-replicas 1
  • Dans les versions postérieures à la 5.0, il n'est plus possible d'utiliser les instructions des versions précédentes pour créer des clusters
问题描述:WARNING: redis-trib.rb is not longer available!
You should use redis-cli instead

redis

4.3 Les versions antérieures à redis5.0 doivent s'appuyer sur l'environnement ruby

若使用docker搭建集群,此处较为简单
apt install ruby -y
若非docker搭建的需要升级ruby版本,redis需要ruby版本在2.3以上,yum安装的为2.0版本
#安装依赖
yum install -y ruby ruby-devel rubygems rpm-build
#安装rvm升级ruby
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
curl -L get.rvm.io | bash -s stable
#安装ruby2.3以上版本
rvm install 2.3.4  
#安装redis
gem install redis

5. Création d'un cluster Redis5.0

Le cluster Redis a besoin d'au moins trois nœuds maîtres . Ici, nous construisons trois nœuds maîtres et construisons un nœud esclave pour chaque maître. Il y a un total de six nœuds Redis, trois maîtres et trois esclaves . Les étapes pour créer un cluster sont les suivantes :

5.1 Créer un répertoire redis-cluster

Créez un répertoire redis-cluster dans le répertoire d'installation de redis (/usr/local/redis/) sous les deux serveurs respectivement

cd  /usr/local/redis/
mkdir  redis-cluster

Créer les répertoires 8001, 8002, 8003 // 8004, 8005, 8006 sous redis-cluster

# A机器创建目录
cd /usr/local/redis/redis-cluster
mkdir 8001 8002 8003 
# 同理,切到B机器创建目录
mkdir 8004 8005 8006

5.2 Copiez le redis.conf précédent dans le répertoire 8001

cp /usr/local/redis/redis.conf  /usr/local/redis/redis-cluster/8001/

5.3 modifier redis.conf

1)daemonize yes
2)port 8001(分别对每个机器的端口号进行设置)
3)dir /usr/local/redis/redis-cluster/8001/(指定数据文件存放位置,必须要指定不同的目录位置,不然会丢失数据)
4)cluster-enabled yes(启动集群模式)
5)cluster-config-file nodes-8001.conf(集群节点信息文件,这里800x最好和port对应上)
6)cluster-node-timeout 5000
7) bind 127.0.0.1(去掉bind绑定访问ip信息, 注释掉,或改为0.0.0.0也可)
8) protected-mode no (关闭保护模式)
9)appendonly yes
如果要设置密码需要增加如下配置:
10)requirepass xxx (设置redis访问密码)
11)masterauth xxx (设置集群节点间访问密码,跟上面一致)

5.4 Instructions de configuration communes pour redis.conf

Description des éléments de configuration

  • daemonize yes : ouvre le processus démon de Redis et le service redis s'exécute en arrière-plan

  • port 8001 : numéro de port redis, chaque fichier de configuration définit son propre numéro de port ; ce document est configuré comme 8001, 8002 ... 8006 ;

  • dir /usr/local/redis-cluster/8001/ : définissez l'emplacement de stockage du fichier de données, vous devez spécifier un emplacement de répertoire différent, sinon les données seront perdues ;

  • cluster-enalbed yes : démarrer le mode cluster ; la valeur par défaut est commentée, décommentez ;

  • cluster-config-file nodes-8001.conf : fichier d'informations sur les nœuds de cluster.
    La valeur par défaut est nodes-6379.conf, remplacez simplement 6379 par le numéro de port de ce nœud.
    REMARQUE : malgré le nom de cette option, il ne s'agit pas d'un fichier de configuration créé par l'utilisateur ni modifiable par l'utilisateur, mais plutôt d'un fichier qui préserve automatiquement la configuration du cluster (essentiellement l'état) chaque fois qu'un nœud Redis Cluster change, afin qu'il puisse être mis à jour le Il est relu au démarrage. Ce fichier répertorie les autres nœuds du cluster, leur état, les variables persistantes, etc. Ce fichier est généralement écrasé et vidé sur le disque en raison de la réception de certains messages.

  • cluster-node-timeout 5000 : Unité : millisecondes ; La durée maximale pendant laquelle un nœud de cluster Redis peut être indisponible sans qu'il soit considéré comme un échec. Si le nœud maître est injoignable plus longtemps que le temps spécifié, il sera basculé par ses esclaves. Et chaque nœud qui ne peut pas atteindre la majorité des nœuds maîtres dans le délai spécifié cessera d'accepter les requêtes.

  • lier 127.0.0.1 192.168.11.15 :
    127.0.0.1 signifie que l'hôte actuel peut accéder au nœud local via 127.0.0.1 et localhost ;
    192.168.11.15 est l'adresse IP actuelle de l'hôte, à laquelle d'autres nœuds de serveur peuvent accéder, sinon le cluster ne peut pas être créé ;
    si bind vaut 0.0 .0.0 ou commentez bind, indiquant que toutes les machines sont accessibles via l'IP hôte actuelle ;

  • mode protégé non : nouvelle configuration en mode protégé après la version redis3.2, la valeur par défaut est oui, c'est-à-dire ouvert ; non : accès direct au réseau externe ; oui : besoin de configurer l'adresse IP de liaison ou de définir le mot de passe d'accès ;

  • appendonly yes : Activer la persistance AOF (Redis ne peut perdre qu'une seconde de données lorsque la panne de courant du serveur se produit ou que le système d'exploitation fonctionne toujours normalement mais que le processus Redis raccroche inexplicablement) ;

Remarque : Si vous souhaitez définir un mot de passe, vous devez ajouter les deux éléments de configuration suivants

  • requirepass XXX : définir le mot de passe d'accès Redis ;
  • masterauth XXX : définissez le mot de passe d'accès entre les nœuds du cluster, ce qui est cohérent avec requirepass.

5.5 Copiez redis.conf sur chaque nœud et modifiez le port

Copiez les fichiers de configuration 8001 modifiés vers 8002-8006 respectivement, et modifiez le port et le nom de fichier correspondants

cp /usr/local/redis/redis-cluster/8001/redis.conf /usr/local/redis/redis-cluster/8002/
cp  /usr/local/redis/redis-cluster/8001/redis.conf /usr/local/redis/redis-cluster/8003/
scp /usr/local/redis/redis-cluster/8001/redis.conf [email protected]:/usr/local/redis/redis-cluster/8004/
scp  /usr/local/redis/redis-cluster/8001/redis.conf [email protected]:/usr/local/redis/redis-cluster/8005/
scp  /usr/local/redis/redis-cluster/8001/redis.conf [email protected]:/usr/local/redis/redis-cluster/8006/

Les cinq fichiers nouvellement copiés ne modifient que les éléments de configuration : port, dir, cluster-config-file

5.6 Démarrer 6 instances redis respectivement

redis-server /usr/local/redis/redis-cluster/8001/redis.conf
redis-server /usr/local/redis/redis-cluster/8002/redis.conf
redis-server /usr/local/redis/redis-cluster/8003/redis.conf
redis-server /usr/local/redis/redis-cluster/8004/redis.conf
redis-server /usr/local/redis/redis-cluster/8005/redis.conf
redis-server /usr/local/redis/redis-cluster/8006/redis.conf

5.7 Créer une grappe

redis-cli -a 123456--cluster create --cluster-replicas 1 192.168.2.180:8001 192.168.2.180:8002 192.168.2.180:8003 192.168.3.23:8004 192.168.3.23:8005 192.168.3.23:8006

5.8 Vérification du cluster

Connectez-vous à n'importe quel nœud de la machine A

redis-cli -a 123456 -c -h 192.168.2.180 -p 8001  -a 123456

grappe redisAccédez à n'importe quel nœud de la machine B pour obtenir la valeur

redis-cli -a xxx -c -h 192.168.3.23 -p 8005 -a 123456

grappe redis

5.9 Afficher les informations sur le cluster

informations sur le cluster

  • cluster_known_nodes:6 # six nœuds
  • cluster_size:3 # La taille du cluster est de 3, et le maître-esclave compte pour un

5.10 Afficher les nœuds du cluster

nœud de cluster

5.11 Arrêt du cluster

  • Pour fermer un par un, utilisez la commande :
redis-cli -a 123456 -c -h 192.168.2.180 -p 8001 shutdown
redis-cli -a 123456 -c -h 192.168.2.180 -p 8002 shutdown
redis-cli -a 123456 -c -h 192.168.2.180 -p 8003 shutdown
redis-cli -a 123456 -c -h 192.168.3.23 -p 8004 shutdown
redis-cli -a 123456 -c -h 192.168.3.23 -p 8005 shutdown
redis-cli -a 123456 -c -h 192.168.3.23 -p 8006 shutdown
  • fermer avec le script
#!/bin/bash
#所有服务器节点的hostname
allnodes=('cnode-1' 'cnode-2' 'cnode-3')
#端口号开始
PORT=7001
#结束端口号
ENDPORT=7003
#密码,如果redis没配置密码可省略
PASSWROD=123456
while [ $((PORT < ENDPORT)) != "0" ]; do
    for ip in ${
    
    allnodes[@]};
    do
        #判断某个端口是否已被占用,如果是,则执行关闭命令
        count=`ssh $ip lsof -i:$PORT | wc -l`
        if [ $count -gt 0 ];
        then
            echo "Stopping Redis $ip:$PORT"
            ssh $ip redis-cli -p $PORT -a $PASSWROD shutdown 2>/dev/null
        else
            echo "no redis $ip:$PORT"
        fi
    done
    PORT=$((PORT+1))
done
exit 0

6. Questions connexes

6.1 Problèmes rencontrés lors de la construction d'un cluster Redis : Attendre que le cluster rejoigne…

grappeLa plupart des raisons de cette situation sont que le port du bus du cluster n'est pas ouvert !

Bus de cluster
Chaque nœud d'un cluster Redis doit ouvrir deux connexions TCP. Une connexion est utilisée pour fournir des services au Client normalement, comme 6379, et il y a un port supplémentaire (en ajoutant 10000 à ce numéro de port) comme port de données, par exemple : le port de redis est 6379, puis un autre port qui doit être ouvert est : 6379 + 10000, c'est-à-dire que 16379 doit être activé. Le port 16379 est utilisé pour le bus de cluster, qui est un canal de communication point à point utilisant le protocole binaire. Ce bus de cluster (bus de cluster) est utilisé pour la détection de panne de nœud, les mises à jour de configuration, l'autorisation de basculement, etc.

Solution :
Une fois que vous connaissez le problème, vous saurez naturellement comment le résoudre, il vous suffit d'ouvrir le port du bus du cluster correspondant au port Redis. Par exemple : 6379 + 10000 = 16379. Par conséquent, ouvrez le port client et le port de bus de cluster de chaque nœud de cluster pour réussir à créer un cluster !
Remarque : Toutes les machines du cluster Redis doivent libérer le port client Redis et le port de bus de cluster correspondants .
Si vous créez un cluster Redis sur une machine virtuelle, vous pouvez directement désactiver le pare-feu pour résoudre le problème.

systemctl stop firewalld.service  关闭防火墙
systemctl disable firewalld      永久关闭防火墙

Mais si vous créez un cluster Redis sur un serveur cloud, vous devez accéder au groupe de sécurité pour libérer le port de bus de cluster Redis correspondant.
Les paramètres d'ouverture de port du serveur HUAWEI CLOUD sont les suivants :
insérez la description de l'image ici

6.2 [ERR] Le nœud 192.168.2.180:8001 n'est pas vide. Soit le nœud connaît déjà d'autres nœuds (vérifiez avec CLUSTER NODES) ou contient une clé dans la base de données 0

nœuds de cluster
Lors de l'ajout de nœuds à l'environnement de cluster Redis, j'ai rencontré un problème, indiquant que le nœud nouvellement ajouté n'est pas vide.

Résolution :

  • 1. Supprimez les fichiers de sauvegarde locaux tels que aof et rdb sous le nœud qui doit être ajouté ;

appendonly yes

# The name of the append only file (default: "appendonly.aof")

appendfilename "appendonly.aof"

dir est de définir le répertoire du fichier de sauvegarde. S'il n'est pas défini, un dump.rdb sera généré sous ce dossier.

# The Append Only File will also be created inside this directory.
#
# Note that you must specify a directory here, not a file name.
dir /usr/local/redis/redis-cluster/8004

################################# REPLICATION #################################
  • 2. En même temps, supprimez le fichier de configuration du cluster du nouveau nœud, c'est-à-dire supprimez le fichier où se trouve le fichier de configuration du cluster dans votre redis.conf ;
cluster-config-file nodes-8004.conf

# Cluster node timeout is the amount of milliseconds a node must be unreachable
# for it to be considered in failure state.
# Most other internal time limits are multiple of the node timeout.
#
cluster-node-timeout 15000

  • 3. Ajoutez à nouveau un nouveau nœud. Si l'erreur persiste, connectez-vous au nouveau nœud,./redis-cli–hx –p pour effacer la base de données : 172.168.2.180:8001> flushdb #Vider la base de données
    actuelle

Mon répertoire dir est défini dans /usr/local/redis/redis-cluster/800x/, supprimez-le comme indiqué dans la figure ci-dessous : supprimez les fichiers où se trouvent aof et cluster-config-file Effacez la base de données de chaque nœud
insérez la description de l'image ici
Après
insérez la description de l'image ici
avoir
redis-clusterterminé les opérations ci-dessus, recréez le nœud, succès.
insérez la description de l'image iciRemarque : Cette situation peut se produire chaque fois que le cluster Redis est arrêté de manière anormale.

6.3 Impossible de se connecter à Redis à 192.168.3.23:8004 : la connexion a expiré

L'une des raisons possibles est que le numéro de port n'est pas ouvert.
S'il s'agit d'un serveur HUAWEI CLOUD, connectez-vous à HUAWEI CLOUD et configurez-le dans le groupe de sécurité. L'opération est la suivante :
insérez la description de l'image ici

6.4 Impossible de se connecter à Redis à 192.168.2.180:8001 : Connexion refusée

Lors de la création d'un cluster, signalez Impossible de se connecter à Redis à 192.168.2.180:8001 : Connexion refusée.

  1. Tout d'abord, considérez que le service redis du nœud correspondant n'est pas activé, activez-le simplement.
  2. Deuxièmement, est bind 127.0.0.1 commenté. Annoté, cela signifie que n'importe qui peut se connecter par défaut. Commentez-le ou remplacez-le par 0.0.0.0.
  3. Encore une fois, si le mode protégé a été défini sur non. Lorsqu'aucune adresse IP de liaison n'est définie et qu'aucun mot de passe n'est défini, Redis est uniquement autorisé à accepter la réponse de cette machine.

Nous voulons que d'autres machines se connectent à notre service Redis, il y a trois façons :

  1. Trouvez un moyen de faire fonctionner Redis dans un mode où le mode protégé n'est pas.
  2. Si le mode protégé est oui, alors nous pouvons définir la liaison sur le service Redis, c'est-à-dire combien d'ips l'une de nos machines a-t-elle, et spécifier quelle adresse IP de la machine notre service est tenu d'écouter.
  3. Si le mode protégé est oui, en plus de définir la liaison, vous pouvez également définir un mot de passe, c'est-à-dire définir le paramètre requirepass, afin d'atteindre l'objectif de pouvoir accéder à partir d'autres machines.
  1. Enfin, vérifiez si le pare-feu est fermé
    insérez la description de l'image ici
    ou ouvrez le numéro de port spécifié. Il s'agit d'un test local. Pour plus de commodité, fermez le pare-feu directement, mais ne le faites pas dans l'environnement de production.

7. Paramètres de commande communs de redis-cli

Les trois paramètres les plus couramment utilisés de redis-cli sont les options -h, -p et -a, qui sont attribuées pour spécifier l'hôte, le port et le mot de passe de connexion du serveur redis connecté.
Trouvé via redis-cli –help, redis-cli fournit également de nombreux autres paramètres et fonctions.

  1. -x
    L'option -x lit le dernier argument de l'entrée standard (stdin). Par exemple, pour lire l'entrée d'un tube :
echo -en "chen.qun" | redis-cli -x set name
  1. -r -i
  • L'option -r répète une commande le nombre de fois spécifié.
  • -i Définit l'intervalle d'exécution de la commande.
    Par exemple, vérifiez les commandes (qps) exécutées par redis par seconde
redis-cli -r 100 -i 1 info stats | grep instantaneous_ops_per_sec
  1. -c
    active le mode cluster reidis, utilisé lors de la connexion de nœuds de cluster redis.

  2. -rdb
    Récupère le fichier rdb de l'instance redis spécifiée et enregistre-le localement.

redis-cli -h 192.168.44.16 -p 6379 --rdb 6379.rdb
    • -slave
      simule les commandes que l'esclave reçoit du maître. Les commandes reçues sur l'esclave sont toutes des opérations de mise à jour, qui enregistrent le comportement de mise à jour des données.
  1. -scan et - -pattern
    permettent d'analyser la clé dans redis avec la commande scan, l'option - -pattern spécifie le modèle de la clé analysée. Par rapport au mode de modèle de clés , redis ne sera pas bloqué pendant longtemps, ce qui entraînera le blocage permanent des demandes de commande des autres clients.

redis-cli --scan --pattern 'chenqun_*'
  1. -pipe
    est un paramètre très utile. Envoyez les données de format de protocole Redis d'origine au serveur pour exécution.
    Par exemple, les données sous la forme suivante (vous devez utiliser unix2dos pour les convertir en un fichier dos sur le serveur Linux).
    Le saut de ligne par défaut sous Linux est \n, le saut de ligne dans le système Windows est \r\n et Redis utilise \r\n.
echo -en '*3\r\n$3\r\nSET\r\n$3\r\nkey\r\n$5\r\nvalue\r\n' | redis-cli --pipe

Référence : http://redis.io/topics/mass-insert

  1. -bigkeys
    échantillonne les clés dans redis pour trouver des clés plus grandes. La méthode d'analyse est utilisée, alors ne vous inquiétez pas, elle bloquera redis pendant longtemps et ne pourra pas traiter d'autres demandes. Les résultats d'exécution peuvent être utilisés pour analyser l'état d'utilisation de la mémoire de redis et la taille moyenne de chaque type de clé.
redis-cli --bigkeys
  1. -eval
    exécute le script lua spécifié.
redis-cli --eval myscript.lua key1 key2 , arg1 arg2 arg3

8. Articles connexes

Création de cluster Redis, script de démarrage et d'arrêt de service supplémentaire
https://blog.csdn.net/alwaysbefine/article/details/109790828

Guess you like

Origin blog.csdn.net/craftsman2020/article/details/128130348