Redis哨兵模式的实现

 更新时间:2024年02月06日 09:58:53   作者:-代号9527  
Redis的哨兵模式是一种用于自动监控Redis实例状态并在主服务器出现故障时自动切换到从服务器的机制,本文主要介绍了Redis哨兵模式的实现,感兴趣的可以了解一下
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

1、哨兵简介

master宕机场景的处理:

在这里插入图片描述

问题:

怎么确认master确实宕机了?(中间断网1s就认为人挂了不合适)
怎么找一个slave来暂替master?
旧的master恢复以后怎么处理?

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

在这里插入图片描述

哨兵的三点作用:

  • 监控
    不断的检查master和slave是否正常运行。
  • 通知
    当被监控的服务器出现问题时,向其他(哨兵间,客户端)发送通知
  • 自动故障转移
    断开master与slave连接,选取一个slave作为master,将其他slave连接到新的master,并告知客户端新的服务器地址

注:

  • 哨兵也是一台redis服务器,只是不提供数据服务
  • 通常哨兵配置数量为单数,3、5、7……

2、启用哨兵模式

2.1 哨兵配置

查看哨兵的配置文件,过滤注释与空行:

在这里插入图片描述

具体配置参数整理:

配置项实例含义
sentinel auth-pass 服务器名 密码sentinel auth-pass mymaster 9527连接服务器时的验证密码
sentinel down-after-milliseconds 自定的服务器名 masterIP Port 票选数量sentinel monitor mymaster 1.2.3.4 6379 2后面的2,即两个哨兵认为master挂了就是真的挂了,常为哨兵数的1/2+1
sentinel down-after-milliseconds 服务器名 毫秒数sentinel down-after-milliseconds mymaster 3000哨兵判定master挂掉的时间周期
sentinel parallel-syncs 服务器名 服务器数sentinel parallel-syncs mymaster 1指定同时进行主从的slave数量,数值越大,要求网络资源越高,数值约小,同步时间约长
sentinel failover-timeout 服务器名 毫秒数sentinel failover-timeout mymaster 9000出现故障后,故障切换的最大超时时间3分钟,超过则认定切换失败
sentinel notification-script 服务名 脚本路径服务器无法正常联通时,设定的执行脚本,通常调试使用

使用sed编辑文件,并重定向。生成三个哨兵的配置文件(用三个不同端口模拟三个哨兵)

在这里插入图片描述

哨兵启动指令:

redis-sentinel sentinel-端口号.conf先启动master、再slave、最后启动哨兵

2.2 哨兵模拟搭建实验

以本机的6379位master、6380、6381为slave,26379、26380、26381为三个sentinel,模拟实验:

①启动master和slave后,启动26379sentinel:

在这里插入图片描述

②连接哨兵的客户端,验证其确实不能进行set等指令:

在这里插入图片描述

在这里插入图片描述

③启动哨兵26380

在这里插入图片描述

注意此时哨兵26379的配置文件会相应的发生变化:

在这里插入图片描述

④模拟master宕机,CTRL+C掉6379的server端

在这里插入图片描述

⑤6379重新连接服务端以后,查看哨兵控制台日志:取消了6379的s_down标记,但并未恢复其master的身份

在这里插入图片描述

3、哨兵工作原理

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

  • 监控
  • 通知
  • 故障转移

3.1 监控阶段

在这里插入图片描述

sentinel会向master和slave要信息,各个sentinel之间有专门通路进行信息交换,如此便形成了一个网络:

在这里插入图片描述

3.2 通知阶段

就像一个小的朋友圈,sentinel之间互相进行信息的传播,保持信息的对等:

在这里插入图片描述

3.3 故障转移阶段

哨兵1持续发消息给master均无反应,标记master为S_DOWN,也叫主观下线

在这里插入图片描述

哨兵1标记后,并将这个消息带回sentinel的圈子里,告诉其余哨兵,可能master挂了,于是其余哨兵开始发送消息给master验证消息是否属实

在这里插入图片描述

验证结果确实如此,只要半数以上哨兵认为挂了,则标记变为O_DOWN(这也是哨兵数量要求奇数的原因),这时,O_DOWN就是客观下线了

在这里插入图片描述

既然确认master挂了,那就要去处理,哪个哨兵去处理呢,每个哨兵发送挂的IP、挂的端口、自己曾经竞选的次数、自己的runID,以便选个领头的哨兵

在这里插入图片描述

最后由竞选出来的1号哨兵去处理:

在这里插入图片描述

 从slave中挑选备选master,首先淘汰掉:

  • 不在线的
  • 响应慢的
  • 与原master断开时间久的

在这里插入图片描述

对于剩下的备选,则考虑优先级、offset、runid等等

在这里插入图片描述

向新选出的master发送slaveof no one,断开原主从连接,并向其他slave发送slaveof 新masterIP端口

在这里插入图片描述

至此,故障转移完成!!

到此这篇关于Redis哨兵模式的实现的文章就介绍到这了,更多相关Redis哨兵模式内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • Redis 事务知识点相关总结

    Redis 事务知识点相关总结

    这篇文章主要介绍了Redis 事务相关总结,帮助大家更好的理解和学习使用Redis,感兴趣的朋友可以了解下
    2021-03-03
  • k8s部署redis集群实现过程实例详解

    k8s部署redis集群实现过程实例详解

    这篇文章主要为大家介绍了k8s部署redis集群实现过程实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 关于Redis?bigkeys命令会阻塞问题的解决

    关于Redis?bigkeys命令会阻塞问题的解决

    这篇文章主要介绍了关于Redis?bigkeys命令会阻塞问题的解决,今天分享一次Redis引发的线上事故,避免再次踩雷,实现快速入门,需要的朋友可以参考下
    2023-03-03
  • 利用Redis实现订单30分钟自动取消

    利用Redis实现订单30分钟自动取消

    本文主要介绍了利用Redis实现订单30分钟自动取消,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • Redis分布式锁如何自动续期的实现

    Redis分布式锁如何自动续期的实现

    本文主要介绍了Redis分布式锁如何自动续期的实现,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Redis列表类型的常用命令小结

    Redis列表类型的常用命令小结

    这篇文章给大家整理了在操作Redis列表类型中的常用命令,文章总结的很全面,对大家学习Redis具有一定的参考借鉴价值,下面来一起看看吧。
    2016-09-09
  • redis计数器与数量控制的实现

    redis计数器与数量控制的实现

    使用Redis计数器可以轻松地解决数量控制的问题,同时还能有效地提高应用的性能,本文主要介绍了redis计数器与数量控制的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Redis快速实现分布式session的方法详解

    Redis快速实现分布式session的方法详解

    Session是客户端与服务器通讯会话跟踪技术,服务器与客户端保持整个通讯的会话基本信息。本文主要介绍了Redis快速实现分布式session的方法,感兴趣的可以学习一下
    2022-01-01
  • Redis使用ZSET实现消息队列的项目实践

    Redis使用ZSET实现消息队列的项目实践

    本文主要介绍了Redis使用ZSET实现消息队列的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • redis如何实现保存对象

    redis如何实现保存对象

    这篇文章主要介绍了redis如何实现保存对象,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06

最新评论

?


http://www.vxiaotou.com