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.
Moins de code, plus de cheveux
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.
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.
Mettez à niveau tous les services Redis de notre département vers le mode Sentinel. [Recommandations associées : Tutoriel vidéo 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
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 :
Inconvénients :
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é.
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.
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 :
original pour accéder à ceci...
Ainsi, lorsque la version 2.8 de Redis a été introduite, le concept de sentinelle est né. Basé sur laréplication, Sentinel implémente une récupération automatisée après panne.
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 :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 estun maître et un esclave.
Parlez-moi du principe de surveillance en mode sentinelleChaque Sentinelle rend compte à sestous les serveurs principaux, Envoyez une commande PING depuis le serveur et les autres instances Sentinel .
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îtreest 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 suffisantde 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'unserveur maître
est marqué par Sentinel commeobjectivement 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'étatSDOWN`, 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 leserveur 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
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.
我部署的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的地方改一下,之前使用的是一个两个单机节点。
干完,收工。
虽然领导的任务完成了,但并不意味着学习redis的路结束了。爱学习的龙叔,继续研究了下redis的集群模式。
主从不能解决故障自动恢复问题,哨兵已经可以解决故障自动恢复了,那到底为啥还要集群模式呢?
主从和哨兵都还有另外一些问题没有解决,单个节点的存储能力是有上限,访问能力是有上限的。
Redis Cluster 集群模式具有 高可用、可扩展性、分布式、容错 等特性。
通过数据分片的方式来进行数据共享问题,同时提供数据复制和故障转移功能。
之前的两种模式数据都是在一个节点上的,单个节点存储是存在上限的。集群模式就是把数据进行分片存储,当一个分片数据达到上限的时候,就分成多个分片。
集群的键空间被分割为16384个slots(即hash槽),通过hash的方式将数据分到不同的分片上的。
HASH_SLOT = CRC16(key) & 16384 复制代码
CRC16是一种循环校验算法,这里不是我们研究的重点,有兴趣可以看看。
这里用了位运算得到取模结果,位运算的速度高于取模运算。
有一个很重要的问题,为什么是分割为16384个槽?这个问题可能会被面试官随口一问
读请求分配给slave节点,写请求分配给master,数据同步从master到slave节点。
读写分离提高并发能力,增加高性能。
master节点可以做扩充,数据迁移redis内部自动完成。
当你新增一个master节点,需要做数据迁移,redis服务不需要下线。
举个栗子:上面的有三个master节点,意味着redis的槽被分为三个段,假设三段分别是0~7000,7001~12000、12001~16383。
现在因为业务需要新增了一个master节点,四个节点共同占有16384个槽。
槽需要重新分配,数据也需要重新迁移,但是服务不需要下线。
redis集群的重新分片由redis内部的管理软件redis-trib负责执行。redis提供了进行重新分片的所有命令,redis-trib通过向节点发送命令来进行重新分片。
假如途中红色的节点故障了,此时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!