Redis的高可用方式 哨兵机制【详细】

本文详细描述了Redis哨兵模式的工作原理,包括监控节点状态、故障转移过程和通知机制。哨兵主要监控master和slave节点,一旦master故障,通过多节点投票选出新master并执行切换。
摘要由CSDN通过智能技术生成

哨兵实现的功能

  • 监控:不断地检查各节点是否正常工作
  • 自动故障转移:若主节点失效,哨兵会开始自动故障转移,会在失效的主节点的从节点中选出一个新的主节点
  • 配置提供者:客户端初始化的时,通过哨兵来获得当前Redis服务的master地址
  • 通知:哨兵可以将故障转移的结果发送给客户端

哨兵大致的说明(回头再看遍)

  • 哨兵模式是Redis的高可用方式
  • 哨兵不提供读写服务,是特殊的Redis节点,哨兵节点存在多个
  • 哨兵节点主要是用来监控Redis的各个服务器节点(master以及其下的slave)
  • 如果master宕机,哨兵会立马察觉,并在slave节点中选出一个新的master
  • 因为要投票选举,所以哨兵节点的数量应该设为奇数
  • 哨兵不仅监控Redis服务器,同时也会相互监控

哨兵的工作流程

监控阶段

  • 同步信息

通知阶段

  • 保持联通

故障转移

  • 发现问题,主观下线sdown,客观下线odown
  • 竞选负责人
  • 优选新master
  • 新master上任,其他slave换master,原master作为slave故障恢复后连接

----------------------------------------------------------详细流程---------------------------------------------------------------------------------------------------------------------详细流程---------------------------------------------------------------------------------------------------------------------详细流程-----------------------------------------------------------

监控阶段:

①sentinel(哨兵节点)先会向master发送一个info指令,获取到master的信息,

②建立一个cmd指令通道,这时会在sentinel端和master端同时保存一些信息

③sentinel将会根据info中的slave信息继续连接slave(两端保存的信息会得到更新)

上图右下的"sentinelState:"应改为"sentinelRedisInstance:",下图已纠正

④当有新的sentinel2连接进来,同样会先向master发送一个info指令,同时创建cmd通道,这时创建两端信息(指sentinelState&sentinelRedisInstance)发现已经有了sentinel1的信息,sentinel2会将自己的信息更新到两端,同时会根据已有的信息去连接sentinel1

sentinel互联之后,sentinel之间会同步信息(互通消息),之后sentinel之间会不断发ping确保连接畅通,当越来越多的sentinel连接进来

sentinel之间形成一个连接网,其工作模式为发布订阅:“发布消息、获取消息”

通知阶段:

在这个阶段,sentinel会不断通过cmd通道向服务器节点发送信息,hello,确认节点是否正常工作

每个sentinel拿到信息后都会在连接网中共享自己拿到的信息

故障转移阶段(重点):

故障转移阶段是基于sentinel的日常工作出现问题,

当sentinel在不断给master发送hello的过程中,发现master没有反馈信息,

sentinel会得到一个结论,master挂了

这时,sentinel1先会给master一个特殊标记s_down(表示有节点发现master已经down了)

然后通过内网发送一条信息告诉别的sentinel,

信息内容是:现在对应的服务器地址端口是什么,状态是什么,以及是谁发现

别的sentinel接收到这个信息,会立马去确认信息的正误,向master发送hello,

当他们获取到master的状态,他们也会将自己获得的信息发送到内网

确认过后,会将s_down改成o_down

  • s_down是代表有一个sentinel认为该节点的状态是下线,主观下线
  • o_down代表有超过一半的sentinel认为该节点下线,客观下线

紧接着,在内网中会发起一次投票,决定由谁去处理这个问题。

每个sentinel都会在内网中发出一个指令,表示要去处理

每个sentinel都有一票,它会投给他最先接到的sentinel,先接到谁的申请指令就投给谁

最后谁的票数最多,谁就获得处理权

    • 这时有可能选举失败,如果失败了,内网会开启新一轮的选举,直到选举成功

获得了处理权的sentinel将会去选出一个节点,让它成为master

挑选步骤如下:

  • 1)排除不在线的
  • 2)排除响应速度慢的
  • 3)排除与原master响应慢的
  • 4)优先原则
    • 优先级
    • offset,越大表示于同步原master的数据越多
    • runid

选举成功后,发送指令,告诉所有节点最终结果

发送指令(sentinel)

  • 向新的master发送slaveof no one
  • 向其他slave发送slaveof 新masterIP端口

原master作为slave故障恢复后连接

  • 26
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值