首页 > 数据库 >Redis哨兵模式详解

Redis哨兵模式详解

时间:2023-09-13 16:13:14浏览次数:44  
标签:Redis 模式 哨兵 故障 详解 Sentinel 节点

目录
Redis哨兵模式定义
为什么需要Redis哨兵模式?
Redis哨兵模式功能
Redis哨兵模式原理
Redis哨兵模式的优缺点

 


Redis哨兵模式定义
Redis哨兵模式是是一个管理多个 Redis 实例的工具,它可以实现对 Redis 的监控、通知、自动故障转移,是Redis实现高可用 的实现方案。

 

为什么需要Redis哨兵模式?
Redis主从模式当主服务器宕机后,需要手动把一台从服务器切换为主服务器,需要人工干预费事费力,为了解决这个问题出现了哨兵模式。

如下图所示:

 

 

Redis哨兵模式功能
Redis哨兵模式提供了以下功能:

 

 

1.监控(Monitoring)

负责监控redis master和slave进程是否正常工作。

2.通知(Notification)

如果redis实例有故障,报警通知给管理员。

3.自动故障转移(Automatic failover)

当 主节点 不能正常工作时,Sentinel 会开始一次 自动的 故障转移操作,它会将与 失效主节点 是 主从关系 的其中一个 从节点 ,升级为新的 主节点,并且将其他的 从节点 指向 新的主节点。

4.配置提供者(Configuration provider)

如果故障转移发生了,通知client客户端新的master地址。

 

Redis哨兵模式原理
当主节点出现故障时,由Redis Sentinel自动完成故障发现和转移,并通知应用方,实现高可用性。

如下图所示:

 


原理是哨兵通过发送命令(ping命令),等待Redis服务器响应,如果在指定时间内,主机Redis无响应,从机则判断主机宕机,选举从机上位,从而监控运行的多个Redis实例。

第一步:心跳机制

每个 Sentinel 会每秒钟 一次的频率向它所知的 主服务器、从服务器 以及其他 Sentinel 实例 发送一个 PING 命令,获取其拓扑结构和状态信息。

如下图所示:

 

 

每个 Sentinel 节点会向主节点、从节点、以及其余 Sentinel 节点定时发送 ping 命令作为心跳检测, 来确认这些节点是否可达,共同监控数据节点的运行状况。

第二步:判断master节点是否下线

每个 sentinel 哨兵节点每隔1s 向所有的节点发送一个PING命令,作用是通过心跳检测,检测主从服务器的网络连接状态。

如果 master 节点回复 PING 命令的时间超过 down-after-milliseconds 设定的阈值(默认30s),则这个 master 会被 sentinel 标记为主观下线。

如下图所示:

 

 

第三步:基于Raft算法选举领头sentinel

master客观下线,那就需要一个sentinel来负责故障转移,所以需要通过选举一个sentinel的领头羊来解决。

如下图所示:

 

 

第四步:故障转移

故障转移的一个主要问题和选择领头sentinel问题差不多,就是要选择一个slaver节点来作为master。

选择主Maseter过程大致如下:

① 选择优先级最高的节点,通过sentinel配置文件中的replica-priority配置项,这个参数越小,表示优先级越高;

② 如果第一步中的优先级相同,选择offset最大的,offset表示主节点向从节点同步数据的偏移量,越大表示同步的数据越多;

③ 如果第二步offset也相同,选择run id较小的;

这样通过以上四大步骤,实现由Redis Sentinel自动完成故障发现和转移,实现自动高可用。

 

Redis哨兵模式的优缺点
哨兵模式优点:最大的优点就是主从可以自动切换,系统更健壮,可用性更高;

哨兵模式缺点:最大的缺点就是还要多维护一套哨兵模式,实现起来也变的更加复杂增加维护成本;

 

 

 


原文:陈睿|mikechen https://mikechen.cc/21217.html

标签:Redis,模式,哨兵,故障,详解,Sentinel,节点
From: https://www.cnblogs.com/jiaodaoniujava/p/17699943.html

相关文章

  • Redis启动器项目RunRedisServer在github开源了
    Redis启动器项目RunRedisServer在github开源了,github最近访问有问题,今天在github上面也开源下。主要用来启动Redis程序加载对应的某个conf文件。github https://github.com/binghe021/RunRedisServer......
  • 架构分布式____Redis集群架构各种方案分析
    //1.主从复制架构图解摘自网上一位博友的图片//2.客户端分片//3.twemproxy架构//4.Redis3.0P2P模式 的集群//更多资料最全的Redis集群方案介绍http://mt.sohu.com/20160601/n452401108.shtml......
  • C++11之智能指针(万字长文详解)
    C++11之智能指针为什么需要智能指针#include<iostream>usingnamespacestd;intdiv(){inta,b;cin>>a>>b;if(b==0)throwinvalid_argument("除0错误");returna/b;}voidFunc(){//1、如果p1这......
  • Java安全架构____KeyGenerator(对称)秘钥生成工具详解
    packagecom.ryx.frame.security.aes;importjava.security.SecureRandom;importjava.util.Date;importjavax.crypto.KeyGenerator;importjavax.crypto.SecretKey;importorg.apache.commons.codec.binary.Base64;publicclassKeyGeneral{ /** *AES128,256......
  • 静默安装db_install.rsp详解
    db_install.rsp详解####################################################################Copyright(c)OracleCorporation1998,2008.Allrightsreserved.Specifyvaluesforthevariableslistedbelowtocustomizeyourinstallation.Eachvariableisassociatedwi......
  • Java开发面试--Redis专区
    1、什么是Redis?它的主要特点是什么?答:Redis是一个开源的、基于内存的高性能键值对存储系统。它主要用于缓存、数据存储和消息队列等场景。高性能:Redis将数据存储在内存中,并采用单线程的方式处理请求,使得其读写速度非常快,能够达到10万+的读写操作每秒。数据结构丰富:Redis支......
  • nacos redis mysql 服务启动脚本
    nacos#cat/etc/systemd/system/nacos.service[Unit]Description=nacosAfter=network.target[Service]Type=forkingExecStart=/usr/local/src/nacos/bin/startup.shExecStop=/usr/local/src/nacos/bin/shutdown.shPrivateTmp=true[Install]WantedBy=multi-user.......
  • 大屏自适应/适配方案【详解】(echarts自适配、rem、flexible.js、vscode中px2rem插件自
    原文链接:https://blog.csdn.net/weixin_41192489/article/details/120004315大屏自适应的核心目标有:字体大小随屏幕尺寸自适应变化详见下文自动撑满全屏设置如下.bg{background:url("~@/assets/images/主背景.png");position:fixed;top:0;left:0;wi......
  • MySQL字符集详解——utf8mb4 & utf8区别?
    字符集详解|JavaGuide(Java面试+学习指南)MySQL字符编码集中有两套UTF-8编码实现:utf8和**utf8mb4**。如果使用utf8的话,存储emoji符号和一些比较复杂的汉字、繁体字就会出错。何为字符集?字符是各种文字和符号的统称,包括各个国家文字、标点符号、表情、数字等等。......
  • Redis7 10大数据类型(Redis字符串)
    一、常用二、单值单value三、案例1、常用setkeyvalue[NX|XX][GET][EXseconds|PXmilliseconds|EXATunix-time-seconds|PXATunix-time-milliseconds|KEEPTTL]getvaluekeepttlset重置value时,ttl不重置2、同时设置/获取多个键值MSETkeyvalue[keyvalue...]MGETkey[k......