


Analysez le mode sentinelle dans Redis et parlez du processus de construction et d'exécution
Cet article vous donnera une compréhension approfondie du mode sentinelle dans Redis et présentera les étapes de création du mode sentinelle, le processus d'exécution et l'élection des sentinelles. J'espère qu'il vous sera utile !
Introduction de base
Sentinel est une solution haute disponibilité (Haute disponibilité) pour Redis :
Il se compose d'une ou plusieurs instances sentinelles. Un cluster sentinelle peut surveiller un ou plusieurs serveurs maîtres et plusieurs serveurs esclaves. [Recommandations associées : Tutoriel vidéo Redis]
Lorsque le serveur principal est hors ligne, Sentinel peut mettre à niveau un serveur esclave sous le serveur principal pour continuer à fournir des services au serveur principal, garantissant ainsi la haute disponibilité de Redis.
Illustration
Étapes de création du mode Sentinelle
1 Copiez une copie du fichier sentinel.conf
cp sentinel.conf sentinel‐26379.conf cp sentinel.conf sentinel‐26380.conf cp sentinel.conf sentinel‐26381.conf
2.
#哨兵sentinel实例运行的端口默认26379 port 26379 #将`daemonize`由`no`改为`yes` daemonize yes #哨兵sentinel监控的redis主节点的 ip port #master-name可以自己命名的主节点名字只能由字母A-z、数字0-9、这三个字符".-_"组成。#quorum当这些quorum个数sentinel哨兵认为master主节点失联那么这时客观上认为主节点失联了 #sentinel monitor <master-name> <ip> <redis-port> <quorum> sentinel monitor master 127.0.0.1 6379 2 #当在Redis实例中开启了requirepass foobared授权密码这样所有连接Redis实例的客户端都要提供密码 #设置哨兵sentinel连接主从的密码注意必须为主从设置一样的验证密码 #sentinel auth-pass <master-name> <password> sentinel auth-pass master MySUPER--secret-0123passw0rd #指定多少毫秒之后主节点没有应答哨兵sentinel此时哨兵主观上认为主节点下线默认30秒,改成3秒 #sentinel down-after-milliseconds <master-name> <milliseconds> sentinel down-after-milliseconds master 3000 #这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行同步,这个数字越小,完成failover所需的时间就越长,但是如果这个数字越大,就意味着越多的slave因为replication而不可用。可以通过将这个值设为1来保证每次只有一个slave处于不能处理命令请求的状态。 #sentinel parallel-syncs <master-name> <numslaves> sentinel parallel-syncs master 1 #故障转移的超时时间failover-timeout可以用在以下这些方面: #1.同一个sentinel对同一个master两次failover之间的间隔时间。 #2.当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。 #3.当想要取消一个正在进行的failover所需要的时间。 #4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了#默认三分钟 #sentinel failover-timeout <master-name> <milliseconds> sentinelf ailover-timeout master1 80000
3 、 Démarrez l'instance sentinelle
#Démarrez redis-master et redis-slaverdocker run -it --name redis-sentinel2639 -v /Users/yujiale/docker/redis/conf/sentinel6379.conf:/etc/redis/sentinel.conf -v /Users/yujiale/docker/redis/data26379:/data --network localNetwork --ip 172.172.0.16 -d redis:6.2.6 redis-sentinel /etc/redis/sentinel.conf
在redis-master目录下 ./redis-server redis.conf 在redis-slaver1目录下 ./redis-server redis.conf 在redis-slaver2目录下 ./redis-server redis.conf
4. Vérifiez l'état de démarrage
1 . Démarrez et initialisez Sentinel
Sentinel est un serveur Redis spécial qui ne sera pas persistantAprès le démarrage de l'instance Sentinel, chaque Sentinel créera 2 connexions réseau au serveur principal- Connexion de commande : utilisée pour se connecter. au serveur principal Le serveur principal envoie la commande et reçoit la réponse
- Connexion d'abonnement : utilisée pour s'abonner au canal --sentinel-:hello
2. Obtenez le maître principal. information
Sentinel est par défaut toutes les 10 secondes. Une fois, envoyez la commande info au serveur maître surveillé pour obtenir des informations sur le serveur maître et ses serveurs esclaves subordonnés.3. Obtenez des informations sur le baume esclave
Lorsque Sentinel découvre qu'un nouveau serveur esclave apparaît sur le serveur maître, Sentinel établira également une connexion de commande et une connexion d'abonnement au serveur esclave. Une fois la connexion de commande établie, Sentinel envoie toujours la commande info au serveur esclave une fois toutes les 10 secondes par défaut et enregistre les informations du serveur esclave.4. Envoyez des messages au serveur maître et aux serveurs esclaves par abonnement
Par défaut, Sentinel envoie des messages à tous les serveurs maîtres et serveurs esclaves surveillés toutes les 2 secondes —sentinel—. : Envoyez un message sur le canal hello. Le message contiendra les informations propres à Sentinel et celles du serveur principal.5. Recevez des informations sur le canal du serveur maître et du serveur esclave
Lorsque Sentinel établit une connexion d'abonnement avec le serveur maître ou le serveur esclave, Sentinel enverra la commande suivante au serveur via la connexion d'abonnement在redis-sentinel1目录下 ./redis-sentinel sentinel.conf 在redis-sentinel2目录下 ./redis-sentinel sentinel.conf 在redis-sentinel3目录下 ./redis-sentinel sentinel.conf
, car Sentinel peut détecter l'ajout d'un nouveau Sentinel en s'abonnant au serveur maître ou au serveur esclave. Une fois le nouveau Sentinel rejoint, les Sentinels mutuellement conscients peuvent communiquer via des connexions de commande. Sentinel彼此之间只创建命令连接,而不创建订阅连接
6. Détecter l'état subjectif hors ligne
Sentinel envoie une commande PING à toutes les instances avec lesquelles il a établi des connexions de commande (serveur maître, serveur esclave et autre Sentinel) une fois par seconde. millisecondes millisecondes Si une réponse invalide est renvoyée dans les millisecondes qui suivent (sauf pour +PONG, -LOADING et -MASTERDOWN) et que l'instance ne répond pas (délai d'expiration), Sentinel considérera l'instance comme étant subjectivement hors ligne (SDown)
7. Vérifiez objectivement l'état hors ligne
Lorsqu'une Sentinelle détermine qu'un serveur principal est subjectivement hors ligneSentinel enverra des commandes de requête à toutes les autres Sentinelles qui surveillent ce serveur principal en même tempsL'hôte
subscribe—sentinel—:hello
<down_state> <leader_runid> <leader_epoch>
判断它们是否也认为主服务器下线。如果达到Sentinel配置中的quorum数量的Sentinel实例都判断主服务器为主观下线,则该主服务器就会被判定为客观下线(ODown)。
8、选举Leader Sentinel
当一个主服务器被判定为客观下线后,监视这个主服务器的所有Sentinel会通过选举算法(raft),选出一个Leader Sentinel去执行failover(故障转移)操作。
哨兵选举
Raft
Raft协议是用来解决分布式系统一致性问题的协议。
Raft协议描述的节点共有三种状态:Leader, Follower, Candidate。
term:Raft协议将时间切分为一个个的Term(任期),可以认为是一种“逻辑时间”。
选举流程
Raft采用心跳机制触发Leader选举
系统启动后,全部节点初始化为Follower,term为0。
节点如果收到了RequestVote或者AppendEntries,就会保持自己的Follower身份
-
节点如果一段时间内没收到AppendEntries消息,在该节点的超时时间内还没发现Leader,Follower就会转换成Candidate,自己开始竞选Leader。
-
一旦转化为Candidate,该节点立即开始下面几件事情:
- 增加自己的term。
- 启动一个新的定时器。
- 给自己投一票。
- 向所有其他节点发送RequestVote,并等待其他节点的回复。
-
如果在计时器超时前,节点收到多数节点的同意投票,就转换成Leader。同时向所有其他节点发送AppendEntries,告知自己成为了Leader。
每个节点在一个term内只能投一票,采取先到先得的策略,Candidate前面说到已经投给了自己,Follower会投给第一个收到RequestVote的节点。
Raft协议的定时器采取随机超时时间,这是选举Leader的关键。
在同一个term内,先转为Candidate的节点会先发起投票,从而获得多数票。
Sentinel的leader选举流程
1、某Sentinel认定master客观下线后,该Sentinel会先看看自己有没有投过票,如果自己已经投过票给其他Sentinel了,在一定时间内自己就不会成为Leader。
2、如果该Sentinel还没投过票,那么它就成为Candidate。
-
3、Sentinel需要完成几件事情:
- 更新故障转移状态为start
- 当前epoch加1,相当于进入一个新term,在Sentinel中epoch就是Raft协议中的term。
- 向其他节点发送is-master-down-by-addr命令请求投票。命令会带上自己的epoch。
- 给自己投一票(leader、leader_epoch)
4、当其它哨兵收到此命令时,可以同意或者拒绝它成为领导者;(通过判断epoch)
5、Candidate会不断的统计自己的票数,直到他发现认同他成为Leader的票数超过一半而且超过它配置的quorum,这时它就成为了Leader。
6、其他Sentinel等待Leader从slave选出master后,检测到新的master正常工作后,就会去掉客观下线的标识。
故障转移
当选举出Leader Sentinel后,Leader Sentinel会对下线的主服务器执行故障转移操作
1.它会将失效Master的其中一个Slave升级为新的Master,并让失效Master的其他Slave改为复制新的Master;
2.当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用现在的Master替换失效Master。
3.Master和Slave服务器切换后,Master的redis.conf、Slave的redis.conf和sentinel.conf的配置文件的内容都会发生相应的改变,即,Master主服务器的redis.conf配置文件中会多一行replicaof的配置,sentinel.conf的监控目标会随之调换。
主服务器的选择
- 1.过滤掉主观下线的节点
- 2.选择slave-priority最高的节点,如果由则返回没有就继续选择
- 3.选择出复制偏移量最大的系节点,因为复制偏移量越大则数据复制的越完整,如果由就返回了,没有就继续
- 4.选择run_id最小的节点,因为run_id越小说明重启次数越少
更多编程相关知识,请访问:编程入门!!
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!

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

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 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.

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.

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).

L'utilisation des opérations Redis pour verrouiller nécessite l'obtention du verrouillage via la commande setnx, puis en utilisant la commande Expire pour définir le temps d'expiration. Les étapes spécifiques sont les suivantes: (1) Utilisez la commande setnx pour essayer de définir une paire de valeurs de clé; (2) Utilisez la commande Expire pour définir le temps d'expiration du verrou; (3) Utilisez la commande del pour supprimer le verrouillage lorsque le verrouillage n'est plus nécessaire.

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.

Utilisez l'outil de ligne de commande redis (Redis-CLI) pour gérer et utiliser Redis via les étapes suivantes: Connectez-vous au serveur, spécifiez l'adresse et le port. Envoyez des commandes au serveur à l'aide du nom et des paramètres de commande. Utilisez la commande d'aide pour afficher les informations d'aide pour une commande spécifique. Utilisez la commande QUIT pour quitter l'outil de ligne de commande.

Les causes de la perte de données redis incluent les défaillances de mémoire, les pannes de courant, les erreurs humaines et les défaillances matérielles. Les solutions sont: 1. Stockez les données sur le disque avec RDB ou AOF Persistance; 2. Copiez sur plusieurs serveurs pour une haute disponibilité; 3. Ha avec Redis Sentinel ou Redis Cluster; 4. Créez des instantanés pour sauvegarder les données; 5. Mettre en œuvre les meilleures pratiques telles que la persistance, la réplication, les instantanés, la surveillance et les mesures de sécurité.
