Maison  >  Article  >  base de données  >  Comprenez rapidement les modes autonome, maître-esclave, sentinelle et cluster dans Redis

Comprenez rapidement les modes autonome, maître-esclave, sentinelle et cluster dans Redis

青灯夜游
青灯夜游avant
2021-05-06 11:08:322495parcourir

Cet article vous présentera les quatre modes de Redis : autonome, maître-esclave, sentinelle et cluster. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.

Comprenez rapidement les modes autonome, maître-esclave, sentinelle et cluster dans Redis

Moins de code, plus de cheveux

Au cours de la première semaine d'emploi, j'ai été trompé

Je viens de rejoindre une nouvelle entreprise. Au départ, je pensais que lorsque je suis arrivé dans une nouvelle entreprise, je me familiariserais généralement avec mes collègues de l'entreprise, je regarderais les documents d'ingénierie du groupe et j'en trouverais quelques-uns. des démos pour pratiquer par moi-même.

Ahem, toux, toux, je ne m'y attendais pas, tout est ce que je pensais, je suis encore trop jeune.

L'après-midi du jour où j'ai rejoint l'entreprise, le chef d'équipe m'a jeté quelques documents et m'a demandé de jeter un œil aux problèmes de système de mise en cache de ces projets et m'a demandé de mettre à niveau Redis en mode sentinelle.

Quand j'ai reçu la mission, j'étais confus à l'intérieur.

Comprenez rapidement les modes autonome, maître-esclave, sentinelle et cluster dans Redis

Premièrement, je ne sais pas quels types de services utilisent Redis.

Deuxièmement, je ne sais pas comment utiliser Redis.

Troisièmement, si Redis se bloque, cela affectera-t-il les utilisateurs ?

Quatrièmement, je n'ai jamais utilisé Redis du tout.

Bien que je ne l'ai jamais fait auparavant, je ne suis pas timide. Après tout, si vous faites le même travail que faisait tous les jours, alors il y a quelque chose qui ne va pas et il sera optimisé rapidement.

Il semble que le recrutement social et le recrutement scolaire soient encore différents. Le recrutement scolaire comportera une formation d'initiation ou des cours pour débutants.

Grâce à ces formes d'éducation, d'une part, comprenez la culture et les valeurs de l'entreprise, et d'autre part, apprenez le processus de travail et ressentez l'atmosphère technique de l'entreprise.

Tâche

Mettez à niveau tous les services Redis de notre département vers le mode Sentinel. [Recommandations associées : Tutoriel vidéo Redis]

Plusieurs modes de Redis

Ils ont tous dit de passer en mode sentinelle, mais celui utilisé auparavant n'était pas le mode Sentry, il existe certainement d'autres modes.

Mode unique, mode maître-esclave, mode sentinelle, mode cluster

Mode unique

C'est le plus simple et peut être compris d'un coup d'œil .

Installez simplement un Redis, démarrez-le et appelez l'entreprise. Je n'entrerai pas dans les détails des étapes d'installation et de démarrage spécifiques, recherchez-les simplement en ligne.

Des machines uniques sont également utilisées dans de nombreux scénarios, par exemple dans des situations où la haute disponibilité n'est pas nécessairement garantie.

Ahem, toussez, toussez, en fait notre service utilise le mode autonome de Redis, alors laissez-moi le changer en mode sentinelle.

Parlons des avantages et inconvénients d’une seule machine.

Avantages :

  • Facile à déployer, 0 coût.
  • Faible coût, pas de nœuds de rechange, aucune autre dépense requise.
  • Hautes performances, une seule machine n'a pas besoin de synchroniser les données et les données sont naturellement cohérentes.

Inconvénients :

  • La garantie de fiabilité n'est pas très bonne, et il y a un risque d'indisponibilité sur un seul nœud.
  • Les hautes performances sur une seule machine sont limitées par la puissance de traitement du processeur, et Redis est monothread.

Le choix du mode autonome doit être basé sur votre propre scénario commercial. Si des performances et une fiabilité élevées sont requises, le mode autonome n'est pas adapté.

Réplication maître-esclave

La réplication maître-esclave fait référence à la copie de données d'un serveur Redis vers d'autres serveurs Redis.

Le premier est appelé nœud maître, et le second est appelé nœud esclave (esclave) ; la réplication des données est unidirectionnelle et ne peut se faire que du nœud maître vers le nœud esclave.

Comprenez rapidement les modes autonome, maître-esclave, sentinelle et cluster dans Redis

La configuration du mode maître-esclave est très simple. Il vous suffit de configurer l'ip et le numéro de port du nœud maître sur le nœud esclave.

slaveof <masterip> <masterport>
# 例如
# slaveof 192.168.1.214 6379</masterport></masterip>

Démarrez tous les services des nœuds maître-esclave et consultez le journal pour voir les connexions de service entre les nœuds maître-esclave.

Il est facile de penser à un problème à partir de ce qui précède. Puisque la réplication maître-esclave signifie que les données du maître et de l'esclave sont les mêmes, il existe un problème de redondance des données.

Dans la conception des programmes, la redondance est autorisée pour une haute disponibilité et des performances élevées. J'espère que tout le monde en tiendra compte lors de la conception du système et évitera d'économiser cette ressource pour l'entreprise.

Pour les produits qui recherchent l'expérience utilisateur ultime, les temps d'arrêt ne sont absolument pas autorisés.

Le modèle maître-esclave est pris en compte dans de nombreuses conceptions de systèmes. Un maître est suspendu à plusieurs nœuds esclaves. Lorsque le service maître tombe en panne, un nouveau nœud maître sera élu pour assurer le service. . haute disponibilité.

Avantages du mode maître-esclave :

  • Une fois le nœud maître en panne, le nœud esclave peut servir de sauvegarde du nœud maître. Venez à tout moment.

  • Étendez la capacité de lecture du nœud maître pour partager la pression de lecture du nœud maître.

  • Pierre angulaire de la haute disponibilité : en plus des fonctions ci-dessus, la réplication maître-esclave est également la base de la mise en œuvre du mode sentinelle et du mode cluster. Par conséquent, la réplication maître-esclave est la base. pierre angulaire de la haute disponibilité de Redis.

présente également des défauts correspondants, tels que le problème de redondance des données que je viens de mentionner :

  • Une fois que le nœud maître tombe en panne, le Le nœud esclave est promu nœud maître En même temps, l'adresse du nœud maître du côté application doit être modifiée, et tout <.> Les nœuds esclaves doivent recevoir l'ordre de partir Copier le nouveau nœud maître, l'ensemble du processus nécessite intervention manuelle.
  • La capacité d'écriture du nœud maître est limitée par la machine unique.
  • La capacité de stockage du nœud maître est limitée par la machine unique.

Mode Sentinelle

Comme je viens de le mentionner, en mode maître-esclave, lorsque le nœud maître tombe en panne, le nœud esclave peut devenir le maître nœud et continuer à fournir des services de.

Mais il y a un problème. L'adresse IP du nœud maître a changé pour le moment, le service d'application utilise toujours l'adresse du nœud maître

original pour accéder à ceci...

Ainsi, lorsque la version 2.8 de Redis a été introduite, le concept de sentinelle est né.

Basé sur la

réplication, Sentinel implémente une récupération automatisée après panne.

Comprenez rapidement les modes autonome, maître-esclave, sentinelle et cluster dans Redis

Comme le montre la figure, le nœud sentinelle se compose de deux parties, le nœud sentinelle et le nœud de données :

    Nœud sentinelle : Le Le système sentinelle se compose d'un ou plusieurs nœuds sentinelles. Les nœuds sentinelles sont des nœuds redis spéciaux qui ne stockent pas de données.
  • Nœud de données : le nœud maître et le nœud esclave sont tous deux des nœuds de données.
Toutes les données accédées au cluster Redis se font via le cluster sentinelle, et la sentinelle surveille l'ensemble du cluster Redis.

Une fois qu'un problème est détecté dans le cluster Redis, tel que le nœud maître que nous venons de mentionner raccroche, le nœud esclave apparaîtra. Cependant, si l'adresse du nœud maître change, le service d'application n'en sera pas conscient à ce moment-là et il n'est pas nécessaire de modifier l'adresse d'accès, car la sentinelle interagit avec le service d'application.

Sentinel résout très bien le problème du basculement et le porte à un nouveau niveau en termes de haute disponibilité. Bien entendu, Sentinel a également d'autres fonctions.

Par exemple,

détection de survie du nœud maître, détection de l'état de fonctionnement maître-esclave, commutation maître-esclave.

La configuration minimale de Sentinel pour Redis est

un maître et un esclave.

Parlez-moi du principe de surveillance en mode sentinelle

Chaque Sentinelle rend compte à ses

tous les serveurs principaux, Envoyez une commande PING depuis le serveur et les autres instances Sentinel .

Comprenez rapidement les modes autonome, maître-esclave, sentinelle et cluster dans Redis

Si le temps écoulé depuis la dernière réponse valide à la commande PING dépasse la valeur spécifiée par down-after-milliseconds, alors cette instance sera marquée comme Subjectif hors ligne

. Si un

serveur maître

est marqué comme subjectivement hors ligne, alors tous les nœuds Sentinel qui surveillent ce serveur maître doivent être marqués comme Confirmez si le serveur principal est effectivement entré dans l'état subjectivement hors ligne une fois par seconde . Si un serveur maître est marqué comme subjectivement hors ligne et qu'il existe un

nombre suffisant

de Sentinelles (au moins le nombre spécifié dans le fichier de configuration) dans la plage de temps Si vous êtes d'accord avec ce jugement, alors le serveur principal est marqué comme objectivement hors ligne. Dans des circonstances normales, chaque Sentinelle enverra des commandes INFO à tous les serveurs maîtres et serveurs esclaves qu'elle connaît une fois toutes les 10 secondes.

Lorsqu'un

serveur maître

est marqué par Sentinel comme

objectivement hors ligne, la fréquence à laquelle Sentinel envoie des commandes INFO à tous les serveurs esclaves du serveur maître hors ligne passera de 10. Une fois par seconde a été remplacée par une fois par seconde. Sentinel négocie avec d'autres Sentinels sur le statut du nœud maître

Si le nœud maître est dans l'état

SDOWN`, votez pour élire automatiquement un. nouveau nœud maître. Pointez les nœuds esclaves restants vers le nouveau nœud maître pour la réplication des données. Lorsqu'il n'y a pas suffisamment de Sentinelles pour accepter que le serveur principal soit hors ligne, le statut objectif hors ligne

du serveur principal sera supprimé. Lorsque le

serveur principal renvoie une réponse valide à la commande PING de Sentinel, le statut hors ligne subjectif du serveur principal sera supprimé. Avantages et inconvénients du mode Sentinelle

Avantages :

Le mode Sentinelle est basé sur le mode maître-esclave, avec tous les avantages de maître-esclave, Sentinel Tous les modes sont disponibles.

    Maître et esclave peuvent être automatiquement commutés, ce qui rend le système plus robuste et utilisable.
  • Sentinel vérifiera en permanence si le serveur maître et le serveur esclave fonctionnent normalement. Lorsqu'un problème survient sur un serveur Redis surveillé, Sentinel envoie des notifications à l'administrateur ou à d'autres applications via des scripts API.
  • Inconvénients :
    • Redis较难支持在线扩容,对于集群,容量达到上限时在线扩容会变得很复杂。

    我的任务

    我部署的redis服务就如上图所示,三个哨兵节点,三个主从复制节点。

    使用java的jedis去访问我的redis服务,下面来一段简单的演示代码(并非工程里面的代码):

    public static void testSentinel() throws Exception {
         //mastername从配置中获取或者环境变量,这里为了演示
             String masterName = "master";
             Set<String> sentinels = new HashSet<>();
         // sentinel的IP一般会从配置文件获取或者环境变量,这里为了演示
             sentinels.add("192.168.200,213:26379");
             sentinels.add("192.168.200.214:26380");
             sentinels.add("192.168.200.215:26381");
     
         //初始化过程做了很多工作
             JedisSentinelPool pool = new JedisSentinelPool(masterName, sentinels); 
         //获取到redis的client
             Jedis jedis = pool.getResource();
         //写值到redis
             jedis.set("key1", "value1");
         //读取数据
         jedis.get("key1");
    }

    具体部署的配置文件这里太长了,需要的朋友可以公众号后台回复【redis配置】获取。

    听起来是入职第二天就部署了任务感觉很难的样子。

    其实现在看来是个so easy的任务,申请一个redis集群,自己配置下。在把工程里面使用到redis的地方改一下,之前使用的是一个两个单机节点。

    干完,收工。

    Comprenez rapidement les modes autonome, maître-esclave, sentinelle et cluster dans Redis

    虽然领导的任务完成了,但并不意味着学习redis的路结束了。爱学习的龙叔,继续研究了下redis的集群模式。

    集群模式

    主从不能解决故障自动恢复问题,哨兵已经可以解决故障自动恢复了,那到底为啥还要集群模式呢?

    主从和哨兵都还有另外一些问题没有解决,单个节点的存储能力是有上限,访问能力是有上限的。

    Redis Cluster 集群模式具有 高可用可扩展性分布式容错 等特性。

    Cluster 集群模式的原理

    通过数据分片的方式来进行数据共享问题,同时提供数据复制和故障转移功能。

    之前的两种模式数据都是在一个节点上的,单个节点存储是存在上限的。集群模式就是把数据进行分片存储,当一个分片数据达到上限的时候,就分成多个分片。

    数据分片怎么分?

    集群的键空间被分割为16384个slots(即hash槽),通过hash的方式将数据分到不同的分片上的。

HASH_SLOT = CRC16(key) & 16384 复制代码

CRC16是一种循环校验算法,这里不是我们研究的重点,有兴趣可以看看。

这里用了位运算得到取模结果,位运算的速度高于取模运算。

Comprenez rapidement les modes autonome, maître-esclave, sentinelle et cluster dans Redis

有一个很重要的问题,为什么是分割为16384个槽?这个问题可能会被面试官随口一问

数据分片之后怎么查,怎么写?
Comprenez rapidement les modes autonome, maître-esclave, sentinelle et cluster dans Redis

读请求分配给slave节点,写请求分配给master,数据同步从master到slave节点。

读写分离提高并发能力,增加高性能。

如何做到水平扩展?

Comprenez rapidement les modes autonome, maître-esclave, sentinelle et cluster dans Redis

master节点可以做扩充,数据迁移redis内部自动完成。

当你新增一个master节点,需要做数据迁移,redis服务不需要下线。

举个栗子:上面的有三个master节点,意味着redis的槽被分为三个段,假设三段分别是0~7000,7001~12000、12001~16383。

现在因为业务需要新增了一个master节点,四个节点共同占有16384个槽。

槽需要重新分配,数据也需要重新迁移,但是服务不需要下线。

redis集群的重新分片由redis内部的管理软件redis-trib负责执行。redis提供了进行重新分片的所有命令,redis-trib通过向节点发送命令来进行重新分片。

如何做故障转移?

Comprenez rapidement les modes autonome, maître-esclave, sentinelle et cluster dans Redis

假如途中红色的节点故障了,此时master3下面的从节点会通过 选举 产生一个主节点。替换原来的故障节点。

此过程和哨兵模式的故障转移是一样的。

总结

每种模式都有各自的优缺点,在实际使用场景中要根据业务特点去选择合适的模式。

redis是一个非常常用的中间件,作为一个使用者来说,学习成本一点不高。

如果作为一个很好的中间件去研究的话,还是有很多值得学习和借鉴的地方。比如redis的各种数据结构(动态字符串、跳跃表、集合、字典等)、高效的内存分配(jemalloc)、高效的IO模型等等。

Chaque point peut être étudié en profondeur et intégré dans la conception ultérieure de systèmes à haute concurrence et haute disponibilité.

Pour plus de connaissances sur la programmation, 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