Maison > Article > base de données > Un article pour parler du cluster Cluster dans Redis
Cet article vous présentera le cluster Cluster dans Redis, examinera les ports TCP, le partage de données et apprendra à utiliser Docker pour créer un cluster Redis avec trois maîtres et trois esclaves.
Redis Cluster est une implémentation distribuée de Redis. Lorsque nous transférons des données vers Redis Cluster, les données seront automatiquement fragmentées et stockées sur chaque nœud Redis. [Recommandations associées : Tutoriel vidéo Redis]
Par rapport à Redis à point unique, Redis Cluster peut continuer à s'exécuter lorsque certains nœuds échouent ou ne peuvent pas communiquer. Cependant, en cas de panne majeure du serveur (par exemple, plus de la moitié des serveurs sont indisponibles), le cluster cessera de fonctionner.
Chaque nœud du cluster Redis doit ouvrir deux connexions TCP. L'un d'entre eux est le port TCP standard utilisé pour servir les clients, dont la valeur par défaut est 6379. Le deuxième port est utilisé pour le bus de cluster, avec le paramètre par défaut de 16379, un canal de communication nœud à nœud de protocole binaire. Les nœuds utilisent le bus de cluster pour la détection des pannes, les mises à jour de configuration, l'autorisation de basculement, etc.
Redis Cluster n'utilise pas de hachage cohérent, mais utilise quelque chose appelé emplacement de hachage hash_slot.
Il y a 16384 emplacements de hachage dans le cluster Redis Lorsque nous stockons une paire de Key-Value dans Redis, l'emplacement de hachage d'une clé donnée est calculé. La méthode consiste d'abord à calculer le CRC16 de la clé, puis à prendre le résultat calculé modulo 16384 :
hash_slot = CRC16(key) mod 16384
Chaque nœud Redis du cluster Redis est responsable d'un sous-ensemble d'emplacements de hachage , donc, si vous avez un cluster avec 3 nœuds, où :
Cela facilite l'ajout et la suppression de nœuds dans le cluster. Par exemple, si je souhaite ajouter un nouveau nœud D, je dois déplacer certains emplacements de hachage des nœuds A, B, C vers D. De même, si je souhaite supprimer le nœud A du cluster, je déplace simplement les emplacements de hachage servis par A vers B et C. Lorsque le nœud A est vide, je peux le supprimer complètement du cluster.
Étant donné que le déplacement d'un emplacement de hachage d'un nœud à un autre ne nécessite pas de temps d'arrêt, l'ajout, la suppression ou la modification de la proportion d'emplacements de hachage détenus par un nœud ne nécessite aucun temps d'arrêt.
Ensuite, nous utilisons Docker pour créer un cluster Redis avec trois maîtres et trois esclaves.
Configuration Redis
port ${PORT} ##节点端口 protected-mode no ##开启集群模式 cluster-enabled yes ##cluster集群模式 cluster-config-file nodes.conf ##集群配置名 cluster-node-timeout 5000 ##超时时间 cluster-announce-ip 192.168.1.XX ##实际为各节点网卡分配ip 先用一个ip代替 cluster-announce-port ${PORT} ##节点映射端口 cluster-announce-bus-port 1${PORT} ##节点总线端口 appendonly yes ##持久化模式
Créer un réseau personnalisé
docker network create redis-net
Chemin personnalisé
mkdir -p /usr/redis_cluster cd /usr/redis_cluster
Générer une configuration et la cible des données, et générer des informations de configuration
for port in `seq 6001 6006`; do mkdir -p ./${port}/conf touch ./${port}/conf/redis.conf mkdir -p ./${port}/data echo "port ${port}" >>./${port}/conf/redis.conf echo "protected-mode no" >>./${port}/conf/redis.conf echo "cluster-enabled yes" >>./${port}/conf/redis.conf echo "cluster-config-file nodes.conf" >>./${port}/conf/redis.conf echo "cluster-node-timeout 5000" >>./${port}/conf/redis.conf echo "cluster-announce-ip 192.168.1.XX" >>./${port}/conf/redis.conf echo "cluster-announce-port ${port}" >>./${port}/conf/redis.conf echo "cluster-announce-bus-port 1${port}" >>./${port}/conf/redis.conf echo "appendonly yes" >>./${port}/conf/redis.conf done
Démarrez le conteneur Redis
for port in `seq 6001 6006`; do \ docker run -d --privileged=true -p ${port}:${port} -p 1${port}:1${port}\ -v $PWD/${port}/conf/redis.conf:/usr/local/etc/redis/redis.conf \ -v $PWD/${port}/data:/data \ --restart always --name redis-${port} --net redis-net \ redis:5.0.5 redis-server /usr/local/etc/redis/redis.conf; \ done
Démarrez le cluster
# 进入任意Redis容器 docker exec -it redis-6001 /bin/bash # 初始化Redis集群命令 redis-cli --cluster create 172.19.0.2:6601 172.19.0.3:6602 172.19.0.4:6603 172.19.0.5:6604 172.19.0.6:6605 172.19.0.7:6606 --cluster-replicas 1
# 单机模式启动 redis-cli -h 127.0.0.1 -p 6001 # 集群模式启动 redis-cli -c -h 127.0.0.1 -p 6001
Pour plus de programmation -connaissances connexes, veuillez visiter : Vidéo de programmation ! !
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!