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

哨兵实现的功能

  • 监控:不断地检查各节点是否正常工作
  • 自动故障转移:若主节点失效,哨兵会开始自动故障转移,会在失效的主节点的从节点中选出一个新的主节点
  • 配置提供者:客户端初始化的时,通过哨兵来获得当前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
    评论
Redis的集群哨兵机制是一种用于实现主从集群的自动故障恢复的机制。它由Redis提供,并具有以下作用和原理: 1. 监控:哨兵会不断检查主节点和从节点是否按预期工作。它会监控节点的状态,包括是否在线、是否正常工作等。 2. 自动故障恢复:如果主节点发生故障,哨兵会选择一个从节点提升为新的主节点,以保证集群的正常运行。当故障的主节点恢复后,它也会以新的主节点为主。 3. 通知:哨兵充当Redis客户端的服务发现来源,当集群发生故障转移时,它会将最新的信息(例如新的主节点的地址)推送给Redis的客户端,以便客户端能够及时更新连接信息。 通过哨兵机制Redis集群能够实现自动的故障恢复和可用性。它能够监控节点的状态,并在主节点故障时自动选举新的主节点,同时通知客户端进行更新。这样可以保证Redis集群的稳定性和可靠性。\[1\]\[3\] #### 引用[.reference_title] - *1* *3* [【RedisRedis集群之哨兵机制](https://blog.csdn.net/Decade_Faiz/article/details/129340233)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Redis集群(读写分离、哨兵机制、Cluster集群)](https://blog.csdn.net/Dean_xiu/article/details/118661742)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值