Maison  >  Article  >  base de données  >  Un article pour parler du cluster Cluster dans Redis

Un article pour parler du cluster Cluster dans Redis

青灯夜游
青灯夜游avant
2021-07-23 10:21:592866parcourir

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.

Un article pour parler du cluster Cluster dans Redis

Redis Cluster (Redis Cluster)

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.

Port TCP du cluster Redis

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.

  • Les clients ne doivent jamais essayer de communiquer avec le port du bus du cluster, mais toujours avec le port de commande Redis normal, mais assurez-vous d'ouvrir les deux ports du pare-feu en même temps, sinon les nœuds du cluster Redis ne pourront pas communiquer . Le décalage du port de commande et du port du bus du cluster est fixe et est toujours de 10 000.
  • Si les deux ports TCP ne sont pas ouverts en même temps, le cluster ne fonctionnera pas correctement.
  • Le bus de cluster utilise un protocole binaire différent pour l'échange de données de nœud à nœud, et il est plus adapté à l'échange d'informations entre nœuds avec très peu de bande passante et de temps de traitement.

Partagement des données du cluster Redis

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ù :

  • Le nœud A contient des emplacements de hachage de 0 à 5 500.
  • Le nœud B contient des emplacements de hachage de 5501 à 11000.
  • Le nœud C contient les emplacements de hachage de 11001 à 16383.

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.

Utilisez Docker pour créer RedisCluster

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
  • cluster-announce-ip L'adresse IP dans 192.168.1.XX doit être l'adresse IP pour la communication inter-conteneurs, qui peut être consultée dans le réseau précédemment ajouté.
  • Un total de 6 dossiers sont générés, de 6001 à 6006. Chaque dossier contient des dossiers data et conf, et conf contient le fichier de configuration redis.conf.

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
  • Après une création réussie, nous pouvons utiliser la commande redis-cli pour vous connecter à l'un des services Redis
# 单机模式启动
redis-cli -h 127.0.0.1 -p 6001
# 集群模式启动
redis-cli -c -h 127.0.0.1 -p 6001
  • Ensuite, vous. peut afficher les informations sur les nœuds via la commande cluster nodes , qui s'avère conforme aux attentes de 3 maîtres et 3 esclaves

Documentation de référence

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer