Table des matières
Avant-propos
2. Créez un fichier redis.conf dans le répertoire actuel avec le contenu suivant
Redis散列插槽说明
集群伸缩(添加节点)
故障转移
使用redistemplate访问分片集群
Maison base de données Redis Explication détaillée de la construction et de l'utilisation du cluster de partitionnement Redis

Explication détaillée de la construction et de l'utilisation du cluster de partitionnement Redis

Jul 21, 2022 pm 05:46 PM
redis

Apprentissage recommandé : Tutoriel vidéo Redis

Avant-propos

Redis peut être considéré comme étant très fréquemment utilisé dans le développement de projets réels. Dans les clusters communs de Redis, nous avons parlé de plusieurs solutions de cluster couramment utilisées par Redis. Différents clusters correspondent à différents scénarios, et les avantages et les inconvénients des différents clusters sont expliqués en détail. Cet article prendra le cluster redis fragmenté comme point d'entrée, à partir de la construction du cluster redis fragmenté, et expliquera en détail les points techniques. lié au cluster fragmenté Redis. ;

  • Point de défaillance unique ;
  • Gout d'étranglement en écriture sur une seule machine
  • Défaut de stockage automatique du cluster ; hors ligne et transfert ;
  • Construire un diagramme d'architecture de cluster

Préparation

1. Préparez une (ou 6 serveurs, si les conditions le permettent) une machine virtuelle ou un serveur

Dans cet exemple, un serveur avec 8G ; la mémoire est préparée pour l'effet de démonstration. Le maître et l'esclave seront divisés via les ports

2 Téléchargez le package d'installation redis à l'avance

Étapes de construction

1. de chaque exemple redis

mkdir 7001 7002 7003 8001 8002 8003
Copier après la connexion

2. Créez un fichier redis.conf dans le répertoire actuel avec le contenu suivant

port 6379
# 开启集群功能
cluster-enabled yes
# 集群的配置文件名称,不需要我们创建,由redis自己维护
cluster-config-file /usr/local/soft/redis/6379/nodes.conf
# 节点心跳失败的超时时间
cluster-node-timeout 5000
# 持久化文件存放目录
dir /usr/local/soft/redis/6379
# 绑定地址
bind 0.0.0.0
# 让redis后台运行
daemonize yes
# 注册的实例ip
replica-announce-ip 本机公网IP
# 保护模式
protected-mode no
# 数据库数量
databases 1
# 日志
logfile /usr/local/soft/redis/6379/run.log
Copier après la connexion

3 Copiez le fichier de configuration dans chaque répertoire par lots

echo 7001 7002 7003 8001 8002 8003 | xargs -t -n 1 cp redis.conf
Copier après la connexion

4. dans chaque répertoire.conf, modifiez le 6379 pour qu'il soit cohérent avec le répertoire où il se trouve

printf '%s\n' 7001 7002 7003 8001 8002 8003 | xargs -I{} -t sed -i 's/6379/{}/g' {}/redis.conf
Copier après la connexion

Ouvrez un redis.conf au hasard pour voir si la modification est réussie

4. commande pour démarrer

/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7001/redis.conf
/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7002/redis.conf
/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7003/redis.conf

/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/8001/redis.conf
/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/8002/redis.conf
/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/8003/redis.conf
Copier après la connexion
Une fois l'exécution terminée, vous pouvez voir que 6 instances redis ont été ouvertes

Créer un cluster

Grâce aux étapes ci-dessus, 6 instances redis ont été ouvertes, mais aucun cluster n'a été formé entre ces instances. Ensuite, vous devez effectuer les étapes appropriées Commande pour les former en cluster

1 Utilisez la commande suivante pour construire le cluster (commandes après 5.0)

redis-cli --cluster create --cluster-replicas 1 IP地址:7001 IP地址:7002 IP地址:7003 IP地址:8001 IP地址:8002 IP地址:8003
Copier après la connexion

Instructions sur les commandes ci-dessus.

redis-cli --cluster ou ./redis-trib .rb : représente la commande d'opération du cluster ;

create : représente la création d'un cluster ;
  • –replicas 1 ou –cluster-replicas 1 : spécifie le nombre de répliques ; de chaque maître du cluster à 1 et le nombre total de nœuds ÷ (répliques + 1) Ce que vous obtenez est le nombre de maîtres. Par conséquent, les n premiers nœuds de la liste des nœuds sont des maîtres et les autres nœuds sont des nœuds esclaves, attribués de manière aléatoire à différents maîtres
  • Vous pouvez également afficher les commandes du cluster via la commande redis-cli --cluster help
  • Après ; en exécutant la commande, la console demande quel exemple sera utilisé comme maître et lequel comme esclave

Après avoir continué à saisir oui, un cluster sera créé selon la stratégie ci-dessus

Vous peut probablement l'obtenir à partir du journal de sortie. Les informations suivantes :

Le nœud maître a les numéros de port 7001, 7002 et 7003 dans l'ordre

Le nœud esclave a les numéros de port 8001, 8002 et 8003 dans l'ordre ; Le nœud maître a les numéros de port 7001, 7002 et 7003 dans l'ordre. Les nœuds se voient chacun attribuer un certain nombre d'emplacements, qui sont : [0-5460], [5461-10922], [10923-16383], c'est-à-dire : un total de 16384 emplacements sont alloués
  • 2 Vérifiez l'état du cluster
  • redis-cli -p 7001 cluster nodes
    Copier après la connexion
    Copier après la connexion

.

通过这个命令,可以清楚的看到集群中各个实例节点的主从状态,实例ID(唯一身份标识),槽位区间等信息

Redis散列插槽说明

其实对redis分片集群稍有了解的同学应该知道,redis分片集群在逻辑上将集群中的所有节点构成了一块完整的内存空间,数据写入进来后,具体存放到哪个节点呢?所以集群引入了一个逻辑尚的插槽概念,即将集群划分为16384个槽位,集群中的每个节点占据一部分槽位数(这个日志中可以看出来);

那么当某个具体的key写入的时候,集群将会通过一定的算法,将要写入的数据路由到指定的插槽上去;

这里有个点需要注意,数据key不是与节点绑定,而是与插槽绑定。

redis集群会根据key的有效部分计算插槽值,分两种情况:

  • key中包含"{}",且“{}”中至少包含1个字符,“{}”中的部分是有效部分;
  • key中不包含“{}”,整个key都是有效部分;

举例来说:key是num,那么就根据num计算,如果是{应用名称}num,则根据“应用名称”计算。计算方式是利用CRC16算法得到一个hash值,然后对16384取余,得到的结果就是slot值

下面不妨看下效果

通过上面的演示可以发现,经过集群计算的key将会分配到不同的插槽上,也就是说,key是与插槽绑定,而不是与某个节点绑定,想想为什么会这样呢?

思考下面这个需求

如何将同一类数据固定的保存在同一个Redis实例?

简单来说,如果key的分配完全没有规则的话,当涉及到某个业务类的数据对应的key随机分配到不同的节点上面时,取值的时候就会出现像上面的重定向跨节点的问题,一定程度上提升性能;

解决办法

这一类数据使用相同的有效部分,例如key都以{业务ID}为前缀

集群伸缩(添加节点)

reids的cluster模式下,有一个比较强的功能就是集群的伸缩能力,即在现有的集群基础上,可以根据实际的业务需求,进行集群的伸缩,下面来演示下给上面的集群添加一个新节点的步骤;

1、在当前目录下拷贝一个目录

2、修改配置文件的端口

sed -i s/6379/7004/g 7004/redis.conf
Copier après la connexion

3、启动这个实例

/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7004/redis.conf
Copier après la connexion

4、使用下面的命令将7004实例假如集群

redis-cli --cluster add-node IP:7004 IP:7001
Copier après la connexion

5、再次查看集群状态

redis-cli -p 7001 cluster nodes
Copier après la connexion
Copier après la connexion

通过上面的状态信息发现,7004这个节点虽然加入了集群,并成了master,但是集群并没有给它分配任何的插槽

6、分配插槽

分配插槽的基本思路是,从现有的某个节点上迁移部分插槽到新的节点即可,执行下面的命令进行插槽分配

redis-cli --cluster reshard 101.34.23.80:7001
Copier après la connexion

执行命令后将出现下面的提示,这里输入你要转移的插槽数量

将7004对应的实例ID输入即可

输入yes后开始移动插槽

移动完成后,再次查看集群状态,这时候7004对应的节点就分配到了从0 ~ 500的数量的插槽

故障转移

redis的cluster模式的集群,还具备一定的故障转移能力,比如在上面的架构模式下,当集群中的某个master节点宕机之后,会出现什么情况呢?下面我们来模拟下这个过程,看看效果如何

1、使用watch命令监控下集群的状态

通过这个命令可以实时查看集群的动态日志变化

watch redis-cli -p 7001 cluster nodes
Copier après la connexion

2、手动将7002实例的master宕机

redis-cli -p 7002 shutdown
Copier après la connexion

从上面的监控日志不难发现,当7002挂掉后,过了一会儿与集群以及它的从节点8003失去了联系,然后8003这个节点升级为master节点;

3、手动将7002实例启动起来

/usr/local/soft/redis/redis60/src/redis-server /usr/local/soft/redis/7002/redis.conf
Copier après la connexion

再次分析日志,可以看到这时候7002只能以slave的身份加入了集群,事实上在某些情况下,我们仍然希望这个宕机的节点恢复后依然是主节点,这该怎么办呢?这就涉及到了手动故障转移,主要操作步骤如下:

  • 使用redis-cli连接7002节点;
  • 执行cluster failover命令;

在上面执行之后的情况下,7002是一个slave节点

执行 CLUSTER FAILOVER 命令,观察日志动态变化,通过日志变化,可以看到,命令执行完毕后,7002很快就变成了master,而8003成了slave;

通过以上步骤就完成了redis的cluster模式下的故障转移的过程

使用redistemplate访问分片集群

1、引入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Copier après la connexion

2、将配置文件中的集群地址修改成下面这样即可

spring:
  redis:
    cluster:
      nodes:
       - 集群IP:7001
       - 集群IP:7002
       - 集群IP:7003
       - 集群IP:7004
       - 集群IP:8001
       - 集群IP:8002
       - 集群IP:8003
Copier après la connexion

至于具体的代码部分,可以参考下面的这个测试案例

	@Autowired
    private RedisTemplate<String,String> redisTemplate;

    //localhost:8083/set?key=b&value=123
    @GetMapping("/set")
    public void set(@RequestParam String key,@RequestParam String value){
        redisTemplate.opsForValue().set(key,value);
    }

    //localhost:8083/get?key=b
    @GetMapping("/get")
    public String get(@RequestParam String key){
        return redisTemplate.opsForValue().get(key);
    }
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!

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment construire le mode Cluster Redis Comment construire le mode Cluster Redis Apr 10, 2025 pm 10:15 PM

Le mode Redis Cluster déploie les instances Redis sur plusieurs serveurs grâce à la rupture, à l'amélioration de l'évolutivité et de la disponibilité. Les étapes de construction sont les suivantes: Créez des instances de redis étranges avec différents ports; Créer 3 instances Sentinel, Moniteur Redis Instances et basculement; Configurer les fichiers de configuration Sentinel, ajouter des informations d'instance Redis de surveillance et des paramètres de basculement; Configurer les fichiers de configuration d'instance Redis, activer le mode de cluster et spécifier le chemin du fichier d'informations de cluster; Créer un fichier nœuds.conf, contenant des informations de chaque instance redis; Démarrez le cluster, exécutez la commande CREATE pour créer un cluster et spécifiez le nombre de répliques; Connectez-vous au cluster pour exécuter la commande d'informations de cluster pour vérifier l'état du cluster; faire

Comment utiliser la commande redis Comment utiliser la commande redis Apr 10, 2025 pm 08:45 PM

L'utilisation de la directive Redis nécessite les étapes suivantes: Ouvrez le client Redis. Entrez la commande (Verbe Key Value). Fournit les paramètres requis (varie de l'instruction à l'instruction). Appuyez sur Entrée pour exécuter la commande. Redis renvoie une réponse indiquant le résultat de l'opération (généralement OK ou -err).

Comment utiliser un seul fileté redis Comment utiliser un seul fileté redis Apr 10, 2025 pm 07:12 PM

Redis utilise une architecture filetée unique pour fournir des performances élevées, une simplicité et une cohérence. Il utilise le multiplexage d'E / S, les boucles d'événements, les E / S non bloquantes et la mémoire partagée pour améliorer la concurrence, mais avec des limites de limitations de concurrence, un point d'échec unique et inadapté aux charges de travail à forte intensité d'écriture.

Comment lire le code source de Redis Comment lire le code source de Redis Apr 10, 2025 pm 08:27 PM

La meilleure façon de comprendre le code source redis est d'aller étape par étape: familiarisez-vous avec les bases de Redis. Sélectionnez un module ou une fonction spécifique comme point de départ. Commencez par le point d'entrée du module ou de la fonction et affichez le code ligne par ligne. Affichez le code via la chaîne d'appel de fonction. Familiez les structures de données sous-jacentes utilisées par Redis. Identifiez l'algorithme utilisé par Redis.

Comment effacer les données redis Comment effacer les données redis Apr 10, 2025 pm 10:06 PM

Comment effacer les données Redis: utilisez la commande flushall pour effacer toutes les valeurs de clé. Utilisez la commande flushdb pour effacer la valeur clé de la base de données actuellement sélectionnée. Utilisez SELECT pour commuter les bases de données, puis utilisez FlushDB pour effacer plusieurs bases de données. Utilisez la commande del pour supprimer une clé spécifique. Utilisez l'outil Redis-CLI pour effacer les données.

Comment afficher toutes les clés dans Redis Comment afficher toutes les clés dans Redis Apr 10, 2025 pm 07:15 PM

Pour afficher toutes les touches dans Redis, il existe trois façons: utilisez la commande Keys pour retourner toutes les clés qui correspondent au modèle spécifié; Utilisez la commande SCAN pour itérer les touches et renvoyez un ensemble de clés; Utilisez la commande info pour obtenir le nombre total de clés.

Comment lire la file d'attente redis Comment lire la file d'attente redis Apr 10, 2025 pm 10:12 PM

Pour lire une file d'attente à partir de Redis, vous devez obtenir le nom de la file d'attente, lire les éléments à l'aide de la commande LPOP et traiter la file d'attente vide. Les étapes spécifiques sont les suivantes: Obtenez le nom de la file d'attente: Nommez-le avec le préfixe de "Fitre:" tel que "Fitre: My-Quyue". Utilisez la commande LPOP: éjectez l'élément de la tête de la file d'attente et renvoyez sa valeur, telle que la file d'attente LPOP: My-Queue. Traitement des files d'attente vides: si la file d'attente est vide, LPOP renvoie NIL et vous pouvez vérifier si la file d'attente existe avant de lire l'élément.

Comment démarrer le serveur avec redis Comment démarrer le serveur avec redis Apr 10, 2025 pm 08:12 PM

Les étapes pour démarrer un serveur Redis incluent: Installez Redis en fonction du système d'exploitation. Démarrez le service Redis via Redis-Server (Linux / MacOS) ou Redis-Server.exe (Windows). Utilisez la commande redis-Cli Ping (Linux / MacOS) ou redis-Cli.exe Ping (Windows) pour vérifier l'état du service. Utilisez un client redis, tel que redis-cli, python ou node.js pour accéder au serveur.

See all articles