首页 > 数据库 >决战圣地玛丽乔亚Day46----Redis哨兵模式

决战圣地玛丽乔亚Day46----Redis哨兵模式

时间:2023-04-03 09:24:43浏览次数:29  
标签:乔亚 Redis 哨兵 ---- master sentinel slave 下线 节点

哨兵模式Sentinel:

 

 

自动感知Master故障并选择一个Slave切换为Master,实现故障的自动转移能力。

1.监控:持续监控主从是否健康,是否处于预期的工作状态.

2.主从的动态切换:当Master故障后,哨兵启动自动故障恢复:从slave中选一个新的master

3.通知机制:竞选出来新的master后,通知客户端与新master建立连接;slave从新的master中replicaof,保持主从数据一致性

一、监控:

首先是哨兵模式的配置。

哨兵配置文件:

# 指定哨兵进程的端口号
port 26379

# 指定监控的主节点的名称
sentinel monitor mymaster 127.0.0.1 6379 2

# 指定在主节点无响应时,多少毫秒后进行判断主节点是否宕机
sentinel down-after-milliseconds mymaster 5000

# 指定进行故障切换时最少需要多少个哨兵同意
sentinel parallel-syncs mymaster 1

# 指定进行故障切换时,新的主节点和旧的主节点之间数据同步的超时时间
sentinel failover-timeout mymaster 180000

# 指定将新的主节点提升为主节点之后,需要执行的脚本
# (例如,通知其他应用程序更新Redis配置等)
sentinel notification-script mymaster /path/to/your/notification/script

 

 

 

# sentinel monitor <master-name> <master-host> <master-port> <quorum>
# 举例如下:
sentinel monitor mymaster 127.0.0.1 6379 2

这条配置项用于告知哨兵需要监听的主节点:

  • sentinel monitor:代表监控。
  • mymaster:代表主节点的名称,可以自定义。
  • 192.168.11.128:代表监控的主节点 ip,6379 代表端口。
  • 2:法定数量,代表只有两个或两个以上的哨兵认为主节点不可用的时候,才会把 master 设置为客观下线状态,然后进行 failover 操作。

客观下线 的标准就是,当有 N 个哨兵实例时,要有 N/2 + 1 个实例判断 master 为 主观下线 ,才能最终判定 master 为 客观下线 ,其实就是过半机制。

哨兵模式启用的时候,会启用sentinel进程,sentinel进程会向所有的master和slaves和其他sentinel进程发送心跳包(默认1s),看看返回是否正常。

如果从节点没有响应哨兵的PING,哨兵会认为从节点挂了,将tag为下线。

如果主节点没有响应哨兵的PING,哨兵会认为主节点offline离线,多做一步主节点的切换工作。

但是这里要注意:网络拥塞、master实例假死、请求延迟导致的master实例在某个短时间内不可用,又迅速恢复了。

基于以上的假死情况,我们做了标识区分:主观下线和客观下线。

主观下线:

从节点不回复PING直接下线没有问题,因为多从节点,一个下线误判叶不会影响什么,可以切换到其他从节点。主节点的下线,由于怕误判,所以要通过多个sentinel

投票决定是否下线,超过半数哨兵决定对master下线,才进行下线。当sentinel认为主节点下线,但还没有集群投票的时候,是主观下线,并不是真正的客观下线。

客观下线:

当多个哨兵决定对master下线时,对master标记为客观下线。

 

二、主从状态的切换:

1.筛选

1) 过滤掉不健康的从节点

2)评估从节点网络状态,如果在一定周期内断连超过一定次数,不予考虑使用。

2.综合评估

筛选掉不健康的从节点,我们从健康的从节点按照一定的顺序进行主节点的选举。

1)根据从节点配置的slave-priority优先级顺序。

2)选择一个和主节点数据偏移差最小的,即和主节点数据最接近的一个。

3)在优先级和复制进度相同的情况下,根据slave RunId选择runid最小的,runid越小说明创建的越早。

 

3.信息通知

等推选出最新的master之后,后续所有的写操作都会进入这个master中。所以需要尽快通知到所有的slave,让他们重新 replacaof 到 master上,重新建立runID和slave_repl_offset ,来保证数据的正常传输和主从一致性

1)客户端写操作与master建立连接

2)slave重新与master建立连接和数据同步

 

三、哨兵通信

哨兵直接是如何通信?

通过Redis的pub/sub发布订阅机制。

哨兵与master建立通信之后,可以利用master提供发布订阅机制发布自己的ip、port等信息。

master 有一个 sentinel:hello 的专用通道,用于哨兵之间发布和订阅消息。哨兵们都可以通过该通道发布自己的Name、IP、Port消息,同时订阅其他哨兵发布的Name、IP、Port消息。互相发现之后建立起了连接,后续的消息通信就可以直接进行了。

哨兵如何与slave建立联系?

哨兵给主节点发INFO命令,主节点把关联slave的表给哨兵进行同步。

哨兵如何与客户端进行时间通知?

依旧是通过 pub/sub 机制,发布不同事件,让客户端在这里订阅消息。客户端可以订阅哨兵的消息,哨兵提供的消息订阅频道有很多,不同频道包含了主从库切换过程中的不同关键事件。

 

Redis中的发布订阅模式:

PUBLISH channel_name message   向指定频道发送消息

SUBSCRIBE channel1 channel2   订阅一个或多个频道

message channel_name message  当订阅的频道中有消息发布时,订阅者会收到消息。

UNSUBSCRIBE channel1 channel2  取消订阅

标签:乔亚,Redis,哨兵,----,master,sentinel,slave,下线,节点
From: https://www.cnblogs.com/dwj-ngu/p/17281970.html

相关文章

  • AlphaFold2无痛安装教程(超级详细)
    目录介绍环境安装CMAKE安装hmmer安装HHsuite安装Kalign安装OpenMM安装PDBfixer安装Python依赖包安装AlphaFold安装AlphaFold报错处理后续介绍AlphaFlod2作为最近在生物领域非常的火的AI,给生物医药领域带来了划时代的影响,许多研究者都开始尝试使用AlphaFold2介入各自的工作。但......
  • 【ChatGPT答】频率特性、频谱特性、幅频特性的区别,传递函数和增益的区别
    仅供参考。频率特性频率特性是指一个系统或信号在不同频率下的性质,通常用于描述系统或信号的频率响应。在信号处理中,频率特性是对信号在频率域中的分布和特征进行描述的一种方式,也是理解信号在不同频率下的行为的基础。具体来说,频率特性包括以下几个方面:频率响应:一个系统对......
  • java 启动错误idea 不报错误
    penapi.actionSystem.impl.Utils-updatefailedforAnAction(com.intellij.execution.ExecutorRegistryImpl$ExecutorAction)withID=MyBatisLogPluginjava.lang.IllegalStateException:@NotNul在项目拉取启动的时候就报出了这个错误首先查看idea的日志到底是什么报错 ......
  • 内存屏障踩坑
    内存屏障踩坑最近为了给linux系统装上一个新的scheduler,连续一周在熬夜看linux的内核源码。打算等有时间出一个详细的教程怎么搞这类东西作为存档,也要再学习一下。但是这不是今天的主题,今天的主题是一个非常坑爹的bug。在linux内核模块中,调度器为了提高性能,在每次进行调度的时候......
  • 【ArcPy】关于VS Code对ArcPy代码补全(auto complete)/智能感知(intelisense)失效问题的
    昨晚打开VS Code瞎鼓捣,发现代码补全不见了。软件设置、环境配置……上穷碧落下黄泉,一通操作仍不见。便开始将视线转移到VSCode的支持插件上来,经过分析,认定Pylance这东西的锅。把它向前还原了两个版本,解决。 ......
  • 第一章 1.2节 Kubeadm安装K8S高可用集群(二)
    1.1查看Token过期时间执行下面命令查看所有Token:kubectlgetsecret-nkube-system找到之前创建的new.yaml文件,进去查看使用的Token:[root@k8s-master01~]#catnew.yamlapiVersion:kubeadm.k8s.io/v1beta3bootstrapTokens:-groups:-system:bootstrappers:kube......
  • [转]C#写一个后台运行的文字识别工具
    最近做笔记需要一个截图后获取图中文字的轻型程序,最好直接按快捷键就能识别并将文字自动复制。网上的应该都是要钱的,或者东西太杂了看着乱得慌,于是决定自己写。我c#只稍微学了一点,讲的不好的地方代码不规范的地方见谅。我使用的是百度的文字识别api,请先自己去申请一下资源,免费......
  • 【Spring】注解器
    applicationContext.xml1<?xmlversion="1.0"encoding="UTF-8"?>2<beansxmlns="http://www.springframework.org/schema/beans"3xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"4xmln......
  • 联合省选 2023 游记
    联合省选2023游记我OK冇事放松挠肚池把千斤重化做全部薄过纸——《尘大师》高二了,最后一次省选,好好打吧!关于一些外号解释:xzy:摇奖,hzr:蛤(酱),txx:狗。Day-txx安利下大家开始玩他带来的桌游“炸弹猫咪”(我不知道这个要不要用书名号啊)。最后一个下午大家一起gar了......
  • 力扣612(MySQL)-平面上的最近距离(中等)
    题目:表point_2d保存了所有点(多于2个点)的坐标(x,y),这些点在平面上两两不重合。写一个查询语句找到两点之间的最近距离,保留2位小数。 最近距离在点(-1,-1)和(-1,2)之间,距离为1.00。所以输出应该为: 解题思路:建表语句:1createtableifnotexistspoint_2d(x......