Maison > base de données > tutoriel mysql > Introduction détaillée à la configuration et à la gestion du cluster Redis (avec code)

Introduction détaillée à la configuration et à la gestion du cluster Redis (avec code)

不言
Libérer: 2019-04-13 10:15:24
avant
3480 Les gens l'ont consulté

Cet article vous apporte une introduction détaillée à la configuration et à la gestion du cluster Redis (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Redis a commencé à prendre en charge les clusters après la version 3.0. Après des mises à jour et des optimisations continues dans les dernières versions, la fonction cluster de la dernière version est très complète. Cet article présente brièvement le processus et la méthode de configuration de création d'un cluster Redis. La version Redis est 5.0.4 et le système d'exploitation est Kirin (fondamentalement le même que le noyau Centos).

1. Principe du cluster Redis

Le cluster Redis est un assemblage qui permet le partage de données entre plusieurs nœuds Redis partagent le même A. Un réseau décentralisé est construit. Chaque nœud du cluster a une identité égale et chaque nœud enregistre ses propres données et son statut de cluster. Les nœuds utilisent le protocole Gossip pour communiquer , assurant la synchronisation des informations sur l'état des nœuds.

Les données du cluster Redis sont gérées via des partitions et chaque nœud enregistre un sous-ensemble des données du cluster. Les données sont allouées à l'aide d'une méthode appelée 哈希槽(hash slot), qui est différente du hachage cohérent traditionnel. Redis 集群有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定放置哪个槽。

Afin de rendre le cluster toujours disponible lorsque certains nœuds échouent ou que la plupart des nœuds ne peuvent pas communiquer, le cluster utilise un modèle de réplication maître-esclave. Lors de la lecture des données, les données sont obtenues à partir du nœud maître correspondant selon l'algorithme de hachage cohérent. Si le maître raccroche, un nœud salve correspondant sera démarré pour agir en tant que maître.

2. Préparation de l'environnement

Ici nous allons construire un cluster redis avec 3 maîtres et 3 esclaves sur un PC.

Créez un nouveau rediscluster de dossier dans le répertoire /opt/ pour stocker le répertoire du nœud du cluster.

Créez ensuite 6 dossiers de server10, server11, server20, server21, server30 et server31 respectivement pour préparer 6 nœuds redis. Ces nœuds utilisent respectivement 6379, 6380, 6381, 6382, 6383 et 6384, avec server10. comme Un exemple de configuration est le suivant :

port 6379
daemonize yes
pidfile /var/run/redis_6379.pid
cluster-enabled yes
cluster-node-timeout 15000
cluster-config-file  nodes-6379.conf
Copier après la connexion

Les autres nœuds doivent uniquement modifier le port et le nom de fichier et les configurer dans l'ordre. Une fois la configuration terminée, démarrez ces nœuds.

[root@localhost rediscluster]# ./server10/redis-server ./server10/redis.conf &
[root@localhost rediscluster]# ./server11/redis-server ./server11/redis.conf &
[root@localhost rediscluster]# ./server20/redis-server ./server20/redis.conf &
[root@localhost rediscluster]# ./server21/redis-server ./server21/redis.conf &
[root@localhost rediscluster]# ./server30/redis-server ./server30/redis.conf &
[root@localhost rediscluster]# ./server31/redis-server ./server31/redis.conf &
Copier après la connexion

Afficher l'état de démarrage :

[root@localhost rediscluster]# ps -ef|grep redis
root     11842     1  0 15:03 ?        00:00:12 ./server10/redis-server 127.0.0.1:6379 [cluster]
root     11950     1  0 15:03 ?        00:00:13 ./server11/redis-server 127.0.0.1:6380 [cluster]
root     12074     1  0 15:04 ?        00:00:13 ./server20/redis-server 127.0.0.1:6381 [cluster]
root     12181     1  0 15:04 ?        00:00:12 ./server21/redis-server 127.0.0.1:6382 [cluster]
root     12297     1  0 15:04 ?        00:00:12 ./server30/redis-server 127.0.0.1:6383 [cluster]
root     12404     1  0 15:04 ?        00:00:12 ./server31/redis-server 127.0.0.1:6384 [cluster]
Copier après la connexion

3. Configuration du cluster

Très simple : redis-cli --cluster. créer 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1 :6382 127.0.0.1 :6383 127.0.0.1 :6384 --cluster -répliques 1

où -réplicas 1 signifie 1 nœud esclave par nœud maître

[root@localhost rediscluster]# ./server10/redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1
>>> Performing hash slots allocation on 6 nodes...
Master[0] -> Slots 0 - 5460
Master[1] -> Slots 5461 - 10922
Master[2] -> Slots 10923 - 16383
Adding replica 127.0.0.1:6383 to 127.0.0.1:6379
Adding replica 127.0.0.1:6384 to 127.0.0.1:6380
Adding replica 127.0.0.1:6382 to 127.0.0.1:6381
>>> Trying to optimize slaves allocation for anti-affinity
[WARNING] Some slaves are in the same host as their master
M: efa84a74525749b8ea20585074dda81b852e9c29 127.0.0.1:6379
   slots:[0-5460] (5461 slots) master
M: 63e20c75984e493892265ddd2a441c81bcdc575c 127.0.0.1:6380
   slots:[5461-10922] (5462 slots) master
M: d9a79ed6204e558b2fcee78ea05218b4de006acd 127.0.0.1:6381
   slots:[10923-16383] (5461 slots) master
S: 0469ec03b43e27dc2b7b4eb24de34e10969e3adf 127.0.0.1:6382
   replicates 63e20c75984e493892265ddd2a441c81bcdc575c
S: fd8ea61503e7c9b6e950894c0da41aed3ee19e7e 127.0.0.1:6383
   replicates d9a79ed6204e558b2fcee78ea05218b4de006acd
S: ddebc3ca467d15c7d25125e4e16bcc5576a13699 127.0.0.1:6384
   replicates efa84a74525749b8ea20585074dda81b852e9c29
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join
....
>>> Performing Cluster Check (using node 127.0.0.1:6379)
M: efa84a74525749b8ea20585074dda81b852e9c29 127.0.0.1:6379
   slots:[0-5460] (5461 slots) master
additional replica(s)
M: d9a79ed6204e558b2fcee78ea05218b4de006acd 127.0.0.1:6381
   slots:[10923-16383] (5461 slots) master
additional replica(s)
S: 0469ec03b43e27dc2b7b4eb24de34e10969e3adf 127.0.0.1:6382
   slots: (0 slots) slave
   replicates 63e20c75984e493892265ddd2a441c81bcdc575c
S: ddebc3ca467d15c7d25125e4e16bcc5576a13699 127.0.0.1:6384
   slots: (0 slots) slave
   replicates efa84a74525749b8ea20585074dda81b852e9c29
M: 63e20c75984e493892265ddd2a441c81bcdc575c 127.0.0.1:6380
   slots:[5461-10922] (5462 slots) master
additional replica(s)
S: fd8ea61503e7c9b6e950894c0da41aed3ee19e7e 127.0.0.1:6383
   slots: (0 slots) slave
   replicates d9a79ed6204e558b2fcee78ea05218b4de006acd
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
Copier après la connexion

Création terminée, la distribution des nœuds maître-esclave est la suivante :

Adding replica 127.0.0.1:6383 to 127.0.0.1:6379
Adding replica 127.0.0.1:6384 to 127.0.0.1:6380
Adding replica 127.0.0.1:6382 to 127.0.0.1:6381
Copier après la connexion

4. Test du cluster

Testé après la connexion via le client 6379 et constaté qu'il est passé à 6381 :

[root@localhost rediscluster]# ./server10/redis-cli -h 127.0.0.1 -c -p 6379
127.0.0.1:6379> set foo bar
-> Redirected to slot [12182] located at 127.0.0.1:6381
OK
127.0.0.1:6381> get foo
"bar"
Copier après la connexion

Test de connexion sur 6381 :

[root@localhost rediscluster]# ./server10/redis-cli -h 127.0.0.1 -c -p 6381
127.0.0.1:6381> get foo
"bar"
Copier après la connexion

Les résultats sont les mêmes, indiquant que la configuration du cluster est normale.

5. Extension du nœud de cluster

Ajoutez deux nouveaux répertoires, server40 et server41, ajoutez deux nouveaux nœuds Redis et configurez deux ports, 6385 et 6386. Utilisez 6385 comme nouveau nœud maître et 6386 comme nœud esclave, puis démarrez le nœud : Ajoutez le nœud maître :

[root@localhost server41]# ps -ef|grep redis
root     11842     1  0 15:03 ?        00:00:18 ./server10/redis-server 127.0.0.1:6379 [cluster]
root     11950     1  0 15:03 ?        00:00:19 ./server11/redis-server 127.0.0.1:6380 [cluster]
root     12074     1  0 15:04 ?        00:00:18 ./server20/redis-server 127.0.0.1:6381 [cluster]
root     12181     1  0 15:04 ?        00:00:18 ./server21/redis-server 127.0.0.1:6382 [cluster]
root     12297     1  0 15:04 ?        00:00:17 ./server30/redis-server 127.0.0.1:6383 [cluster]
root     12404     1  0 15:04 ?        00:00:18 ./server31/redis-server 127.0.0.1:6384 [cluster]
root     30563     1  0 18:01 ?        00:00:00 ./redis-server 127.0.0.1:6385 [cluster]
root     30582     1  0 18:02 ?        00:00:00 ./redis-server 127.0.0.1:6386 [cluster]
Copier après la connexion
Affichez la liste des nœuds :

[root@localhost server41]# ./redis-cli --cluster add-node 127.0.0.1:6385 127.0.0.1:6379
>>> Adding node 127.0.0.1:6385 to cluster 127.0.0.1:6379
>>> Performing Cluster Check (using node 127.0.0.1:6379)
M: efa84a74525749b8ea20585074dda81b852e9c29 127.0.0.1:6379
   slots:[0-5460] (5461 slots) master
additional replica(s)
M: d9a79ed6204e558b2fcee78ea05218b4de006acd 127.0.0.1:6381
   slots:[10923-16383] (5461 slots) master
additional replica(s)
S: 0469ec03b43e27dc2b7b4eb24de34e10969e3adf 127.0.0.1:6382
   slots: (0 slots) slave
   replicates 63e20c75984e493892265ddd2a441c81bcdc575c
S: ddebc3ca467d15c7d25125e4e16bcc5576a13699 127.0.0.1:6384
   slots: (0 slots) slave
   replicates efa84a74525749b8ea20585074dda81b852e9c29
M: 63e20c75984e493892265ddd2a441c81bcdc575c 127.0.0.1:6380
   slots:[5461-10922] (5462 slots) master
additional replica(s)
S: fd8ea61503e7c9b6e950894c0da41aed3ee19e7e 127.0.0.1:6383
   slots: (0 slots) slave
   replicates d9a79ed6204e558b2fcee78ea05218b4de006acd
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 127.0.0.1:6385 to make it join the cluster.
[OK] New node added correctly.
Copier après la connexion
Ajouter un nœud esclave :

[root@localhost server41]# ./redis-cli 
127.0.0.1:6379> cluster nodes
22e8a8e97d6f7cc7d627e577a986384d4d181a4f 127.0.0.1:6385@16385 master - 0 1555064037664 0 connected
efa84a74525749b8ea20585074dda81b852e9c29 127.0.0.1:6379@16379 myself,master - 0 1555064036000 1 connected 0-5460
d9a79ed6204e558b2fcee78ea05218b4de006acd 127.0.0.1:6381@16381 master - 0 1555064038666 3 connected 10923-16383
0469ec03b43e27dc2b7b4eb24de34e10969e3adf 127.0.0.1:6382@16382 slave 63e20c75984e493892265ddd2a441c81bcdc575c 0 1555064035000 4 connected
ddebc3ca467d15c7d25125e4e16bcc5576a13699 127.0.0.1:6384@16384 slave efa84a74525749b8ea20585074dda81b852e9c29 0 1555064037000 6 connected
63e20c75984e493892265ddd2a441c81bcdc575c 127.0.0.1:6380@16380 master - 0 1555064037000 2 connected 5461-10922
fd8ea61503e7c9b6e950894c0da41aed3ee19e7e 127.0.0.1:6383@16383 slave d9a79ed6204e558b2fcee78ea05218b4de006acd 0 1555064037000 5 connected
Copier après la connexion
Une fois l'ajout réussi, allouez les données au nouveau nœud :

[root@localhost server41]# ./redis-cli --cluster add-node 127.0.0.1:6386 127.0.0.1:6379 --cluster-slave --cluster-master-id 22e8a8e97d6f7cc7d627e577a986384d4d181a4f
>>> Adding node 127.0.0.1:6386 to cluster 127.0.0.1:6379
>>> Performing Cluster Check (using node 127.0.0.1:6379)
M: efa84a74525749b8ea20585074dda81b852e9c29 127.0.0.1:6379
   slots:[0-5460] (5461 slots) master
additional replica(s)
M: 22e8a8e97d6f7cc7d627e577a986384d4d181a4f 127.0.0.1:6385
   slots: (0 slots) master
M: d9a79ed6204e558b2fcee78ea05218b4de006acd 127.0.0.1:6381
   slots:[10923-16383] (5461 slots) master
additional replica(s)
S: 0469ec03b43e27dc2b7b4eb24de34e10969e3adf 127.0.0.1:6382
   slots: (0 slots) slave
   replicates 63e20c75984e493892265ddd2a441c81bcdc575c
S: ddebc3ca467d15c7d25125e4e16bcc5576a13699 127.0.0.1:6384
   slots: (0 slots) slave
   replicates efa84a74525749b8ea20585074dda81b852e9c29
M: 63e20c75984e493892265ddd2a441c81bcdc575c 127.0.0.1:6380
   slots:[5461-10922] (5462 slots) master
additional replica(s)
S: fd8ea61503e7c9b6e950894c0da41aed3ee19e7e 127.0.0.1:6383
   slots: (0 slots) slave
   replicates d9a79ed6204e558b2fcee78ea05218b4de006acd
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Send CLUSTER MEET to node 127.0.0.1:6386 to make it join the cluster.
Waiting for the cluster to join

>>> Configure node as replica of 127.0.0.1:6385.
[OK] New node added correctly.
Copier après la connexion
L'ajout est terminé. vérifiez le nouveau nœud via la commande des nœuds de cluster. Augmentation de la distribution des emplacements

[root@localhost server41]# ./redis-cli --cluster reshard 127.0.0.1:6385

How many slots do you want to move (from 1 to 16384)? 1000
What is the receiving node ID? 22e8a8e97d6f7cc7d627e577a986384d4d181a4f
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: all
Copier après la connexion

6.

缩减节点时先缩减从节点:

[root@localhost server41]# ./redis-cli --cluster del-node 127.0.0.1:6386 7c24e205301b38caa1ff3cd8b270a1ceb7249a2e
>>> Removing node 7c24e205301b38caa1ff3cd8b270a1ceb7249a2e from cluster 127.0.0.1:6386
>>> Sending CLUSTER FORGET messages to the cluster...
>>> SHUTDOWN the node.
Copier après la connexion

然后进行主节点slot转移:

[root@localhost server41]# ./redis-cli --cluster reshard 127.0.0.1:6385How many slots do you want to move (from 1 to 16384)? 1000What is the receiving node ID? efa84a74525749b8ea20585074dda81b852e9c29  //要移到的节点Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: 22e8a8e97d6f7cc7d627e577a986384d4d181a4f   //要删除的主节点Source node #2: done
Copier après la connexion

最后在缩减主节点

[root@localhost server41]# ./redis-cli --cluster reshard 127.0.0.1:6385

How many slots do you want to move (from 1 to 16384)? 1000
What is the receiving node ID? efa84a74525749b8ea20585074dda81b852e9c29  //要移到的节点
Please enter all the source node IDs.
  Type 'all' to use all the nodes as source nodes for the hash slots.
  Type 'done' once you entered all the source nodes IDs.
Source node #1: 22e8a8e97d6f7cc7d627e577a986384d4d181a4f   //要删除的主节点
Source node #2: done
Copier après la connexion

缩减完成!【相关推荐:Redis教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal