table des matières
Un, introduction du cluster
1.1 Introduction
1) Exigences de version: le cluster n'est pris en charge qu'à partir de Redis3.0;
2) Exigences de maître / sauvegarde: le cluster nécessite des nœuds pour prendre en charge le mode maître / sauvegarde (c'est-à-dire que chaque nœud maître a au moins un nœud esclave)
1.2, schéma d'architecture
1) Chaque cercle représente un nœud maître, et deux nœuds peuvent communiquer;
2) Le client peut accéder à n'importe quel nœud pour les opérations d'accès aux données;
1.3, mécanisme de vote
1) Les nœuds maîtres du cluster Redis votent les uns avec les autres via ping-pong pour déterminer si le nœud est disponible; (par exemple, si plus de la moitié des nœuds maîtres ne répondent pas au ping d'un nœud maître, cela sera considéré down. Ensuite, il continuera. Ping son nœud esclave. S'il tombe également en panne, le cluster entier passera à l'état d'échec indisponible)
2) Dans quel état le cluster sera-t-il indisponible?
a. Tout nœud maître de cluster raccroche, et il n'y a pas d'esclave ou d'esclave indisponible, et entre en état d'échec;
b. Plus de la moitié des nœuds maîtres de cluster raccrochent (que le nœud esclave soit disponible ou non)
1.4, mécanisme de stockage
Principe
1. Redis-cluster calculera la clé de l'opération selon l'algorithme crc16;
2. ramener le reste du résultat du calcul à 16384 pour obtenir un nombre entre 0 et 16383;
3. trouver l'emplacement de hachage correspondant à travers le nombre entier value Node;
4. Effectuez ensuite des opérations d'accès aux données sur le nœud;
par exemple:
effectuez l'opération set key hello sur Node1 (illustré dans la figure ci-dessus)
1. algorithme crc16: par exemple, obtenez crc16: key = 26384
2. Prenez le reste: 26384% 16384 = 10000
3. Nœud de l'emplacement de hachage: trouvez le nœud de l'emplacement de hachage Node2 correspondant à 10000.
4. Opération: exécutez en fait l'opération set key hello dans Node2
5. Le principe est le même lorsque get key hello.
Deux, construction de cluster
2.1. Préparation
1) Construisez le plus petit cluster redis-cluster, c'est-à-dire trois paires de maître et d'esclave (le pseudo cluster est utilisé ici)
2) Installez 6 instances redis dans la machine virtuelle et allouez les ports 8001, 8002, 8003, 8004, 8005, 8006;
3) Si Pour créer un cluster à l'aide de la version autonome utilisée, vous devez supprimer les fichiers dump.rdb et apeendonly.aof;
2.2, installation
2.2.1, installez ruby
[root@eureka1 ~]# yum install ruby
...
[root@eureka1 ~]# yum install rubygems
2.2.2, préparation de colis
Upload: rz
téléchargement de la commande dans le /temp
répertoire
-rw-r--r--. 1 root root 1358081 1月 17 2020 redis-3.0.0.tar.gz
Décompressez: tar -zxvf redis-3.0.0.tar.gz
drwxrwxr-x. 6 root root 4096 4月 1 2015 redis-3.0.0
2.2.3, trouvez redis-trib.rb
Ce fichier peut nous aider à créer redis-cluster
, écrit en langage rubis
[root@eureka1 temp]# cd redis-3.0.0/src/
[root@eureka1 src]# ll *.rb
-rwxrwxr-x. 1 root root 48141 4月 1 2015 redis-trib.rb
2.2.4, télécharger / installer redis-3.0.0.gem
Télécharger dans le /temp
catalogue
-rw-r--r--. 1 root root 57856 1月 17 2020 redis-3.0.0.gem
installation
[root@eureka1 temp]# gem install redis-3.0.0.gem
Successfully installed redis-3.0.0
1 gem installed
2.2.5, installation autonome (préparée pour l'installation du cluster)
Compilez et entrez dans le répertoire décompressé
[root@eureka1 redis-3.0.0]# cd /root/temp/redis-3.0.0
[root@eureka1 redis-3.0.0]# make
installation
[root@eureka1 redis-3.0.0]# make install PREFIX=/usr/local/redis3
Copier redis.conf
[root@eureka1 redis3]# cp /root/temp/redis-3.0.0/redis.conf /usr/local/redis3/bin/
Remplacez daemonize no par yes pour
démarrer
[root@eureka1 bin]# ./redis-server redis.conf
Arrêtez
[root@eureka1 bin]# ./redis-cli shutdown
2.2.6, installation en mode cluster (6 instances)
1) /usr/local/
Créez un redis-cluster
dossier sous le répertoire
[root@eureka1 temp]# cd /usr/local/
[root@eureka1 local]# mkdir redis-cluster
2) le /redis3
répertoire /bin
est copié dans redis-cluster
le suivant, et renomméredis01
[root@eureka1 redis3]# cp -r bin ../redis-cluster/redis01
[root@eureka1 redis3]#
3) Retirez redis01中
le dump..rdb
le apeendonly.aof
document de
4) modifier le redis.conf
fichier de configuration
Port: Le port par défaut 6379
ont été modifiés pour 8001
permettre au cluster: libération de cluster-enabled yes
configuration Remarque
5) dans 6 répétitions de l'exemple et les ports sont modifiés pour 8002,8003,8004,8005,8006
[root@eureka1 redis-cluster]# cp -r redis01/ redis02
[root@eureka1 redis-cluster]# cp -r redis01/ redis03
[root@eureka1 redis-cluster]# cp -r redis01/ redis04
[root@eureka1 redis-cluster]# cp -r redis01/ redis05
[root@eureka1 redis-cluster]# cp -r redis01/ redis06
6) Copiez le redis-trib.rb
script ruby dans redis-cluster
[root@eureka1 redis-3.0.0]# cd /root/temp/redis-3.0.0/src/
[root@eureka1 src]# cp redis-trib.rb /usr/local/redis-cluster/
7) Créez un script de démarrage startall.sh
[root@eureka1 redis-cluster]# vim startall.sh
cd redis01
./redis-server redis.conf
cd ..
cd redis02
./redis-server redis.conf
cd ..
cd redis03
./redis-server redis.conf
cd ..
cd redis04
./redis-server redis.conf
cd ..
cd redis05
./redis-server redis.conf
cd ..
cd redis06
./redis-server redis.conf
cd ..
8) Autorisation de script
[root@eureka1 redis-cluster]# chmod +x startall.sh
9) Démarrer le script
[root@eureka1 redis-cluster]# ./startall.sh
[root@eureka1 redis-cluster]# ps aux|grep redis
root 4108 0.1 0.6 40596 5688 ? Ssl 13:33 0:00 ./redis-server *:8001 [cluster]
root 4110 0.1 0.4 40596 3660 ? Ssl 13:33 0:00 ./redis-server *:8002 [cluster]
root 4114 0.0 0.4 40596 3660 ? Ssl 13:33 0:00 ./redis-server *:8003 [cluster]
root 4118 0.0 0.4 40596 3700 ? Ssl 13:33 0:00 ./redis-server *:8004 [cluster]
root 4120 0.0 0.4 40596 3664 ? Ssl 13:33 0:00 ./redis-server *:8005 [cluster]
root 4126 0.0 0.4 40596 3612 ? Ssl 13:33 0:00 ./redis-server *:8006 [cluster]
root 4165 0.0 0.1 12320 964 pts/0 S+ 13:33 0:00 grep --color=auto redis
10) La création d'un
rb
script de cluster attribuera automatiquement des nœuds maître et esclave, ce qui 1
signifie un maître et une sauvegarde
[root@eureka1 redis-cluster]# ./redis-trib.rb create --replicas 1 192.168.48.128:8001 192.168.48.128:8002 192.168.48.128:8003 192.168.48.128:8004 192.168.48.128:8005 192.168.48.128:8006
Le journal suivant enregistre les détails de distribution du nœud maître et du nœud esclave, ainsi que l'intervalle d'allocation des emplacements de hachage de slot de chaque nœud maître;
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
192.168.48.128:8001
192.168.48.128:8002
192.168.48.128:8003
Adding replica 192.168.48.128:8004 to 192.168.48.128:8001
Adding replica 192.168.48.128:8005 to 192.168.48.128:8002
Adding replica 192.168.48.128:8006 to 192.168.48.128:8003
M: e85faa81e1260828dbe58118753056796715d81d 192.168.48.128:8001
slots:0-5460 (5461 slots) master
M: 86ce0943516ebbe30e5f3cebf40b7076f46212c7 192.168.48.128:8002
slots:5461-10922 (5462 slots) master
M: b1736ef65c852458e27288162ff82e926fc16ace 192.168.48.128:8003
slots:10923-16383 (5461 slots) master
S: f5c3b41dc41437ab514995c2f5952b53a6eb2a14 192.168.48.128:8004
replicates e85faa81e1260828dbe58118753056796715d81d
S: 0a2a99d9940faa104d4b0b1137f98ec7277974d6 192.168.48.128:8005
replicates 86ce0943516ebbe30e5f3cebf40b7076f46212c7
S: e1f4a09028d9aeeedc8b125e7ba3238dde6a21a9 192.168.48.128:8006
replicates b1736ef65c852458e27288162ff82e926fc16ace
Can I set the above configuration? (type 'yes' to accept): yes
11) Grâce au nodes.conf
fichier dans le nœud , vous pouvez afficher les informations de cluster dans le nœud
[root@eureka1 redis01]# cat /usr/local/redis-cluster/redis01/nodes.conf
0a2a99d9940faa104d4b0b1137f98ec7277974d6 192.168.48.128:8005 slave 86ce0943516ebbe30e5f3cebf40b7076f46212c7 0 1599918231045 5 connected
e1f4a09028d9aeeedc8b125e7ba3238dde6a21a9 192.168.48.128:8006 slave b1736ef65c852458e27288162ff82e926fc16ace 0 1599918230327 6 connected
e85faa81e1260828dbe58118753056796715d81d 192.168.48.128:8001 myself,master - 0 0 1 connected 0-5460
b1736ef65c852458e27288162ff82e926fc16ace 192.168.48.128:8003 master - 0 1599918230021 3 connected 10923-16383
86ce0943516ebbe30e5f3cebf40b7076f46212c7 192.168.48.128:8002 master - 0 1599918227975 2 connected 5461-10922
f5c3b41dc41437ab514995c2f5952b53a6eb2a14 192.168.48.128:8004 slave e85faa81e1260828dbe58118753056796715d81d 0 1599918228998 4 connected
vars currentEpoch 6 lastVoteEpoch 0
12) Tester le cluster
N'importe quel nœud peut être connecté, mais des -c
paramètres doivent être ajoutés , sinon il sera considéré comme un mode autonome et l'opération échouera
[root@eureka1 redis-cluster]# ./redis01/redis-cli -h 192.168.48.128 -p 8001 -c
192.168.48.128:8001> set name haha
-> Redirected to slot [5798] located at 192.168.48.128:8002
OK
192.168.48.128:8002> get name
"haha"
13) Arrêtez le cluster et
créez un shutdownall.sh
script
[root@eureka1 redis-cluster]# vim shutdownall.sh
./redis01/redis-cli -h 192.168.48.128 -p 8001 shutdown
./redis01/redis-cli -h 192.168.48.128 -p 8002 shutdown
./redis01/redis-cli -h 192.168.48.128 -p 8003 shutdown
./redis01/redis-cli -h 192.168.48.128 -p 8004 shutdown
./redis01/redis-cli -h 192.168.48.128 -p 8005 shutdown
./redis01/redis-cli -h 192.168.48.128 -p 8006 shutdown
[root@eureka1 redis-cluster]# chmod +x shutdownall.sh
[root@eureka1 redis-cluster]# ./shutdownall.sh
[root@eureka1 redis-cluster]# ps aux|grep redis
root 5365 0.0 0.1 12320 968 pts/0 R+ 14:02 0:00 grep --color=auto redis