IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Redis哨兵sentinel深入分析 -> 正文阅读

[大数据]Redis哨兵sentinel深入分析

Redis哨兵sentinel深入分析

哨兵sentinel的三大功能监控、选举、故障转移(包含通知)下面来具体分析。

监控

监控其实就是哨兵实例定时向Redis的主从集群发送PING命令,检测主从节点的心跳,一旦主节点的回复时间超过了sentinel.conf配置的down-after-milliseconds值,哨兵实例就会将这个实例主观下线,为避免哨兵节点的误判该哨兵节点向哨兵集群中的其它哨兵节点发送is-master-down-by-addr命令 ,其它哨兵节点根据自身和主节点的连接情况给出判断,==只有判断主观下线数量大于或等于哨兵配置的quorum值==(具体配置如下),才能将主节点实例由主观下线改为客观下线。

--?quorum指同意主节点客观下线的sentinel哨兵个数
sentinel?monitor?<master-name>?<ip>?<redis-port>?<quorum>?

图片

哨兵间通信

判断主节点客观下线必须哨兵间互相通信,但哨兵配置文件sentinel.conf中并没有指定其它哨兵的配置,也没有类似主从节点指定的replicaof命令,那么哨兵间如何通信呢?答案是消息订阅发布,新加入的哨兵通过向主节点的__sentinel__:hello频道(主题)发送哨兵IP和端口,集群中所有的哨兵节点会向主节点订阅__sentinel__:hello频道(主题)这样就能实现哨兵间的相互发现和通信,结构图如下所示。

图片

选举

哨兵确定了主节点客观下线后那么哨兵节点需要开启选举流程,选取一个新的主节点,选举主要是分为两步筛选和打分,这个步骤相对简单,筛选过程如下所示

图片

故障迁移

故障迁移就是已经选出新的主库,现在要进行故障转移,故障转移需要一个哨兵完成,这时候又有一次选举,称为Leader选举,选出哨兵中的Leader,==当哨兵客观下线的赞成数量大于哨兵集群的一半同时大于或者等于哨兵配置的quorum数量==,这时就可以由此哨兵节点向哨兵集群其它节点发起Leader投票请求,如下所示。

图片

如果最后哨兵A和哨兵C拿到的赞成票相同那么这轮投票不会有Leader产生,哨兵集群会等待一段时间(为故障转移超时时间的两倍)后重新发起请求,理由很简单哨兵间通信需要依赖网络如果网络故障可能会导致无法正常选举Leader,所以简单等待后再重新尝试可以提高成功率。

选出Leader后通过发布订阅功能,将更新后的主节点配置传播给其它哨兵节点让它们更新配置,其次还需要通知功能。

通知

通知的任务就是哨兵将新主节点的信息通知给从节点让其主从同步,通知给客户端让其后续请求走新的主节点。那么哨兵如何与从节点以及客户端通信呢?

哨兵获取从节点信息

哨兵和从库建立连接不单单只起通知作用,还会检测从节点的心跳等功能,其实在哨兵得到新主库信息后,可以直接向主节点发送INFO命令

图片

哨兵通知客户端

哨兵选取新的主库后,不仅仅需要通知从节点主从同步,还需要和客户端通信,因为客户端发送请求还是在旧的主节点上,现在需要切换新的主节点,这时如何完成呢?这就和哨兵间的通信方式类似,同样通过发布订阅的方式,客户端可以从哨兵订阅消息, 哨兵提供的频道有很多以下列举常用的如下所示

图片

客户端只需要向哨兵定于主库变更事件switch-master即可得到新主库的IP和端口,订阅命令如下

//?只订阅主库变更一个事件
SUBSCRIBE?switch-master
//?订阅所有的事件
PSUBSCRIBE?*

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 17:49:30  更:2022-04-18 17:53:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:53:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码