贝利信息

深入搞懂Redis中的哨兵

日期:2023-04-26 00:00 / 作者:青灯夜游

redis哨兵详解,哨兵搭建流程,哨兵的运行流程和选举原理(主观下线,客观下线,如何选举出哨兵leader)。

Redis哨兵(sentinel)

哨兵是什么?

吹哨人巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务。【相关推荐:Redis视频教程】

俗称,无人值守运维。

干什么?

案例

架构

3个哨兵:自动监控和维护集群,不存放数据,只是吹哨人。

1主2从:用于读取和存放数据

步骤

安装三台linux

ip和port分别为

# sentinel00
192.168.157.112    26379
# sentinel01
192.168.157.113    26380
# sentinel02
192.168.157.118    26381

配置三台哨兵

sentinelxxxx.conf 文件

sentinel00

sentinel26379.conf

bind 0.0.0.0
daemonize yes
protected-mode no
port 26379
logfile "/myredis/sentinel26379.log"
pidfile /var/run/redis-sentinel26379.pid
dir /myredis
sentinel monitor mymaster 192.168.157.115 6379 2
sentinel auth-pass mymaster 1234

sentinel01

sentinel26380.conf

bind 0.0.0.0
daemonize yes
protected-mode no
port 26380
logfile "/myredis/sentinel26380.log"
pidfile /var/run/redis-sentinel26380.pid
dir /myredis
sentinel monitor mymaster 192.168.157.115 6379 2
sentinel auth-pass mymaster 1234

sentinel02

sentinel26381.conf

bind 0.0.0.0
daemonize yes
protected-mode no
port 26381
logfile "/myredis/sentinel26381.log"
pidfile /var/run/redis-sentinel26381.pid
dir /myredis
sentinel monitor mymaster 192.168.157.115 6379 2
sentinel auth-pass mymaster 1234

测试

> 后面为自动新增内容

-

模拟master宕机

对比配置文件

文件的内容,在运行期间会被sentinel动态修改。master—slave主从关系切换后,配置文件内容会自动发生改变。

哨兵运行流程和选举原理

当一个主从配置中的master失效后,sentinel可以选举出一个新的master用于自动替换原master的工作,主从配置中的其他redis服务自动指向新的master同步数据,一般建议sentinel采取奇数台,防止某一台sentinel无法连接到master导致误切换。

SDown主观下线(Subjectively Down)

SDOWN(主观不可用)是单个哨兵自己主观检测到的关于master的状态,从sentinel的角度来看,如果发送了PING心跳后,在一定时间内没有收到合法的回复,就到达了SDOQN的条件。

sentinel配置文件中的 down-after-milliseconds 设置了主观下线的时间长度(默认30秒)。

# sentinel down-after-milliseconds  
sentinel down-after-milliseconds mymaster 30000

ODown客观下线(Objectively Down)

ODOWN需要一定数量的sentinel,多个哨兵达成一致意见才能确认一个master客观上已经宕机了。

# sentinel monitor    
sentinel monitor mymaster 127.0.0.1 6379 2

选举出领导者哨兵

当主节点被判断客观下线后,各个哨兵节点会进行协商,先选举出一个领导者哨兵节点,并由该领导者哨兵节点进行failover(故障迁移)

领导者哨兵如何选出来的?

Raft算法

监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法;Raft算法的基本思路是先到先得,即在一轮选举中,哨兵A向B发送成为领导者的申请,如果B没有同意过其他哨兵,则会同意A成为领导者。

选新的master(im)

整个过程由sentinel自己独立完成,无需人工干涉。

新主登基

某一个slave被选中成为master

选出新的master的规则,剩余slave节点健康的前提下

  1. redis.conf文件中,优先级slave-priority或者replica-priority最高节点(数字越小优先级越高)
  2. 复制偏移量offset最大的从节点。
  3. 最小Run ID的从节点。

群臣俯首

旧主拜服

哨兵使用建议

更多编程相关知识,请访问:编程视频!!