Redis二三事一文了解Redis的哨兵机制(超详细步骤图解)

Posted 温文艾尔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redis二三事一文了解Redis的哨兵机制(超详细步骤图解)相关的知识,希望对你有一定的参考价值。

⭐️写在前面


⭐️1 哨兵

哨兵(sentinel)是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障时通过投票机制选择新的master并将所有slave连接到新的master

哨兵的作用

  • 监控
    • 不断地检查masterslave是否正常运行
    • master存活监测、master与slave运行情况检测
  • 通知(提醒)
    • 当被监控的服务器出现问题时,向其他(哨兵间、客户端)发送通知
  • 自动故障转移
    • 断开与master与slave连接。选举一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址
  • 注意
    • 哨兵也是一台redis服务器,只是不提供数据服务
    • 通常哨兵配置数量为单数

⭐️1.1 启用哨兵模式

- 配置一拖二的主从结构
- 配置三个哨兵(配置不同,接口不同)
  - 参看sentinel.conf
- 启动哨兵
  - redis-sentinel    sentinel-端口号.conf

我们新建3个哨兵,1个主服务器,2个从服务器

⭐️1.1.1.修改哨兵配置并创建3个哨兵

进入redis目录下的sentinel.conf文件中

我们在配置之前先来看看哨兵文件中各个配置的含义

将配置文件转移到conf目录下进行操作

cat sentinel.conf | grep -v "#" | grep -v "^$" > ./conf/sentinel-26379.conf

对配置文件进行修改

修改dir配置信息,将哨兵文件的信息声称在data目录下

将当前哨兵文件复制2份,创建2638026381端口的哨兵文件

⭐️1.1.2 搭建主从服务器

在上一篇文章中我们详细介绍了祝贺搭建主从服务器,不明白的小伙伴可以看这篇博文

【Redis二三事】一把LOL的时间让你了解Redis的主从复制机制(超详细步骤图解)

我们6379为主服务器,63806381为从服务器
三个哨兵,1台主服务器,2台从服务器构建完毕


启动主服务器与两台从服务器,启动三台哨兵

启动哨兵命令

redis-sentinel <哨兵配置文件名称>

可以看到当我们启动最后一台哨兵的时候日志信息显示已经检测到了6379主服务器与6380,6381从服务器以及26379,
26380哨兵


接下来我们使主服务器6379宕机(模拟的话CTRL+C停掉就可以了),查看哨兵是否选举其他服务器作为master

等待30秒(我们在配置文件中设置的为30秒

查看哨兵的日志信息变化

⭐️2 哨兵工作原理

哨兵在进行主从切换过程中经历三个阶段

  • 监控
  • 通知
  • 故障转移

⭐️2.1 阶段一:监控阶段

用于同步各个节点的状态信息

  • 获取各个sentine的状态(是否在线),这期间是利用ping命令完成的
  • 获取master的状态
    • master属性
      • runid
      • role:master
    • 各个slave的详细信息
  • 获取所有slave的状态(根据master中的slave信息)
    • slave属性
      • runid
      • role:slave
      • master_host、master_port
      • offset

  • 实际sentinel中信息的获取都是通过master来获取的,第一个sentinel先向master发送info指令并建立cmd连接专门用来发命令,与此同时获取到了其他哨兵的状态以及其他从属服务器的信息,然后根据获取到的slave信息去连接每一个slave,第二个sentinel同样也会发命令连接master同时获取到了其他与master有关哨兵的信息,并与其他哨兵发布订阅,以保证与其他哨兵信息同步,第三个第四个哨兵进来同样是这样

⭐️2.2 阶段二:通知阶段

当三个哨兵经过监控阶段组成了一个小的群体,彼此之间进行信息的互通,哨兵会时时刻刻通过他们之间已经建立的cmd连接去获取他们对应的工作状态,不管是哪位哨兵获取到,都会将信息回传,在哨兵内部的网络中进行信息的互换

此阶段是维护长期的信息对等的阶段

⭐️2.3 阶段三:故障转移阶段

此阶段处理故障问题

sentinel1向master发送确认指令,master无回应,并且持续一定时间以后,sentinel1就会确认master已宕机,
并将master标记为SRI_S_DOWN,之后将master指令传递到哨兵群体的内网中,传播master已宕机的消息,其他
sentinel得到指令后,就会不断的向master发出确认,确定他是真的宕机了,确认完毕也分别将信息传播进内网里

此时修改master的状态为SRI_O_DOWN,事实上只要超过半数的sentinel确认master已宕机,master的状态就会被修改

我们称SRI_S_DOWN标记的master为主观下线,SRI_O_DOWN标记的master为客观下线

确认master下线之后,seneinel会选出一个领头的seneinel,竞选过程中内个sentinel会将挂的ip,挂的端口,自己的竞选次数,自己的runid放出,每个sentinel既是参选者,又是投票者

所有sentinel投票完毕后,得到半数票以上的sentinel直接当选,否则再选一轮,每增加一轮,每个sentinel的竞选次数+1

被选取出来的sentinel做以下几件事
  • 从服务器列表中挑选备选master,寻找master的原则如下
    • 备选master必须在线
    • 备选master的响应速度不能太慢
    • 备选master不要与原来master断开时间久
  • 当经过上面的筛选,依然剩下多个备选master,则依照优先原则进行挑选
    • 优先级(看谁的优先级比较高)
    • offset(看谁的offset比较大)
    • runid(看谁的runid比较小)
最终剩下的备选master即为下一个master

新的master上任之后

  • 发送指令(sentinel)
    • 向新的master发送slaveof no one
    • 向其他slave发送slaveof新的masterIP端口

⭐️3 总结

  • 监控阶段
    • 同步信息
  • 通知阶段
    • 保持联通
  • 故障转移阶段
    • 发现问题
    • 竞选负责人
    • 优选新master
    • 新master上任,其他slave切换master,原master作为slave故障回复后连接

日志


以上是关于Redis二三事一文了解Redis的哨兵机制(超详细步骤图解)的主要内容,如果未能解决你的问题,请参考以下文章

Redis二三事一把LOL的时间让你了解Redis的主从复制机制(超详细步骤图解)

Redis二三事一套超详细的Redis学习教程(步骤图片+实操)---第二集

一文掌握Redis主从复制哨兵Cluster三种集群模式

redis主从复制哨兵机制底层原理

redis主从复制哨兵机制底层原理

Redis集群,备份,哨兵机制