当前位置: 首页 > news >正文

Redis Sentinel(哨兵)详解

目录

 一:什么是Sentinel(哨兵)

二:Sentinel有什么用 

1.监控

2.故障转移

3通知

4.配置提供

三:Sentinel如何检测master节点宕机 

1.主观下线

2.客观下线

四:Sentinel是如何选举出新的master 

1.slave的优先级

2.复制进度 

3.runid 

 五:如何在sentinel集群中选择出Leader


前言:有关Redis的基础知识可以参照我之前写的文章Redis必知必会的知识

在之前的Redis的主从复制模式下,如果一个master宕机,那么需要从slave中选举一个新的master,并且需要修改应用方的master链接地址,还需要从剩余的slave节点复制新master的数据,在此过程中需要人工介入,消耗大量的时间和精力,因此Redis官方提出了一种新的方案就是Sentinel(哨兵)机制,可以实现自动化的故障转移,无需人工介入。

 一:什么是Sentinel(哨兵)

Sentinel是一中运行模式,不提供任何的读写过程,它只负责运行特殊的Redis命令执行自动化的故障转移。默认运行在26379端口上,依赖于Redis工作,可以通过以下命令让Redis以Sentinel的形式运行

redis-sentinel /path/to/sentinel.conf
或者
redis-server /path/to/sentinel.conf --sentinel

Redis的源码中sentinel.conf 就是用来配置Sentinel的

// 指定要监视的 master
// 127.0.0.1 6379 为 master 地址
// 2 表示当有 2 个 sentinel 认为 master 失效时,master 才算真正失效
sentinel monitor mymaster 127.0.0.1 6379 2
// master 节点宕机多长时间才会被 sentinel 认为是失效
sentinel down-after-milliseconds mymaster 60000
sentinel failover-timeout mymaster 180000
sentinel parallel-syncs mymaster 1

sentinel monitor resque 192.168.1.3 6380 4
sentinel down-after-milliseconds resque 10000
sentinel failover-timeout resque 180000
// 在发生主备切换时最多可以有 5 个 slave 同时对新的 master 进行同步
sentinel parallel-syncs resque 5

二:Sentinel有什么用 

根据Redis的官方文档可以知道,sentinel节点主要提供以下几个功能

1.监控

Sentinel会监控redis的每一个节点(master,slave),甚至包括监控自己

2.故障转移

当一个master节点出现故障后,Sentinel会自动帮助我们实现故障转移,自动将某一台的slave节点选举为新的master节点

3通知

通知slave连接线新的master节点,让他们执行replicaof命令成为新的master的slave

4.配置提供

客户端连接 sentinel 请求 master 的地址,如果发生故障转移,sentinel 会通知新的 master 链接信息给客户端。

三:Sentinel如何检测master节点宕机 

1.主观下线

所谓的主观下线是指当某一个Sentinel节点认为一个master节点已经下线了,但是还不是很确定,需要其他的Sentinel进行投票

2.客观下线

客观下线是指过法定票数的sentinel节点认为某一个master已经下线,那么这个master节点就真的下线了

 其实就是当sentinel自己认为master下线那么就是主观下线,而sentinel整体达成一致认为master下线那么就是客观下线。

具体的步骤如下:

每个 sentinel 节点以每秒钟一次的频率向整个集群中的 master、slave 以及其他 sentinel 节点发送一个 PING 命令。

主观下线:

 如果对应的节点超过规定的时间(down-after-millisenconds)没有进行有效回复的话,就会被其认定 为是 主观下线(SDOWN) 。注意!这里的有效回复不一定是 PONG,可以是-LOADING 或者 - MASTERDOWN 。

客观下线:

所有 sentinel 节点要以每秒一次的频率确认 master 的确下线了,当法定数量(通常为过半)的 sentinel 节点认定 master 已经下线, master 才被判定为 客观下线(ODOWN) 。这样做的目的是为了 防止误判,毕竟故障转移的开销还是比较大的,这也是为什么 Redis 官方推荐部署多个 sentinel 节点 (哨兵集群)。

sentinel 中会有一个 Leader 的角色来负责故障转移,也就是自动地从 slave 中选出一个新的 master 并执行完相关的一些工作(比如通知 slave 新的 master 连接信息,让它们执行 replicaof 成为新 的 master 的 slave)。如果没有足够数量的 sentinel 节点认定 master 已经下线的话,当 master 能对 sentinel 的 PING 命令 进行有效回复之后,master 也就不再被认定为主观下线,回归正常。 

四:Sentinel是如何选举出新的master 

slave必须是在线状态才能参加竞选成为新的master,sentinel在选举新的master时是基于以下3个方面来实现的

1.slave的优先级

可以通过slave-priority手动设置slave的优先级,优先级越高成为master的几率也就越高,优先级最高的slave可以直接成为master,如是没有设置slave的优先级sentinel会采用复制进度进一步判断

2.复制进度 

sentinel会选择出数据最完整也就是复制进度最快的slave节点升级为master

3.runid 

通常经过前面两轮筛选已经成果选出来了新的 master,万一真有多个 slave 的优 先级和复制进度一样的话,那就 runid 小的成为新的 master,每个 redis 节点启动时都有一个 40 字节随机字符串作为运行 id。

 五:如何在sentinel集群中选择出Leader

这就需要用到分布式领域的 共识算法 了。简单来说,共识算法就是让分布式系统中的节点就一个问题达成共识。在 sentinel 选举 leader 这个场景下,这些 sentinel 要达成的共识就是谁才是 leader 。 大部分共识算法都是基于 Paxos 算法改进而来,在 sentinel 选举 leader 这个场景下使用的是 Raft 算 法。这是一个比 Paxos 算法更易理解和实现的共识算法—Raft 算法。更具体点来说,Raft 是 MultiPaxos 的一个变种,其简化了 Multi-Paxos 的思想,变得更容易被理解以及工程实现
有关 Raft 算法可以参考以下文章:Raft详解

Raft 协议实战之 Redis Sentinel 的选举 Leader 源码解析

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 3. 轴指令(omron 机器自动化控制器)——>MC_MoveAbsolute
  • 微信小程序点赞动画特效实现
  • k8s以及prometheus
  • 解读 Redis 底层密码:命令执行流程与高效性之源
  • 栈和队列的算法题目(C语言)
  • linux入门到实操-4 linux系统网络配置、连接测试、网络连接模式、修改静态IP、配置主机名
  • Linux基础---06压缩打包及解压rar压缩包
  • Rust 函数
  • 数据结构实验1
  • [创业之路-146] :如何理解:复杂的事情简单化,简单的事情标准化,标准的事情流程化,流程的事情数字化,数字化的事情自动化,自动化的事情智能化
  • CentOS 8FTP服务器
  • 第T11周:优化器对比实验
  • 架构设计:负责网络、定时、坐下、站起、重连等,支持多类游戏的无锁房间
  • 通过python提取PDF文件指定页的图片
  • k8s笔记——kubebuilder实战
  • (三)从jvm层面了解线程的启动和停止
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • Java到底能干嘛?
  • learning koa2.x
  • python学习笔记 - ThreadLocal
  • uva 10370 Above Average
  • 简析gRPC client 连接管理
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 深度学习中的信息论知识详解
  • 什么是Javascript函数节流?
  • 手机端车牌号码键盘的vue组件
  • 我的zsh配置, 2019最新方案
  • 项目管理碎碎念系列之一:干系人管理
  • python最赚钱的4个方向,你最心动的是哪个?
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # SpringBoot 如何让指定的Bean先加载
  • # 数仓建模:如何构建主题宽表模型?
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (2.2w字)前端单元测试之Jest详解篇
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (Charles)如何抓取手机http的报文
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (python)数据结构---字典
  • (八)Flink Join 连接
  • (八十八)VFL语言初步 - 实现布局
  • (附源码)ssm户外用品商城 毕业设计 112346
  • (转) ns2/nam与nam实现相关的文件
  • (转)EOS中账户、钱包和密钥的关系
  • .a文件和.so文件
  • .bashrc在哪里,alias妙用
  • .bat批处理(八):各种形式的变量%0、%i、%%i、var、%var%、!var!的含义和区别
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @EnableConfigurationProperties注解使用
  • @Not - Empty-Null-Blank
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • @Service注解让spring找到你的Service bean
  • [ HTML + CSS + Javascript ] 复盘尝试制作 2048 小游戏时遇到的问题