Redis哨兵(sentinel)

巡查监控后台master主机是否故障,如果故障了根据投票数自动将某一个从库转换为新主库,继续对外服务。


作用

  • 主从监控:监控主从redis库运行是否正常
  • 消息通知:哨兵可以将故障转移的结果发送给客户端
  • 故障转移:如果master异常,则会进行主从切换,将其中一个slave作为新master
  • 配置中心:客户端通过连接哨兵来获得当前redis服务的主节点地址

示例

  1. 在sentinel.conf文件中,使用如下命令设置要监控的master服务器,quorum表示确认客观下线的最少的哨兵数量

    sentinel monitor <master-name> <ip> <redis-port> <quorum>

使用如下命令连接master服务的密码

sentinel auth-pass <master-name> <password>

其他配置

bash 复制代码
sentinel down-after-milliseconds <master-name> <milliseconds>
指定多少毫秒之后,主节点没有应答哨兵,此时哨兵主观上认为主节点下线

sentinel parallel-syncs <master-name> <nums>:
表示允许并行同步的slave个数,当Master挂了后,哨兵会选出新的Master,此时,剩余的slave会向新的master发起同步数据

sentinel failover-timeout <master-name> <milliseconds>:
故障转移的超时时间,进行故障转移时,如果超过设置的毫秒,表示故障转移失败

sentinel notification-script <master-name> <script-path> :
配置当某一事件发生时所需要执行的脚本

sentinel client-reconfig-script <master-name> <script-path>:
客户端重新配置主节点参数脚本
  1. 启动哨兵

查看sentinel.log,哨兵启动成功

  1. 将主机shutdown模拟主机故障

此时从机get数据时会失去连接,再次get数据重新发起连接,哨兵会从从机中选取新的master

查看主机的sentinel.log,选取了ip为192.168.229.102的从机作为新的master

  1. 重新启动原来的主机,可以看到原主机从master变为slave,新的master并不会改变

  • sdown:主观下线,单个sentinel自己主观上检测到的关于master的状态在发送PING心跳后一定时间内(默认30s)没有收到合法回复
  • odown:客观下线,多个sentinel达成一致意见认为一个master客观上已经宕机
  • 当主节点被判断客观下线后,各个哨兵节点会进行协商,先选举出一个领导者哨兵,并由该哨兵进行故障迁移
  • 哨兵选取新的master时,优先选取原master的直接slave,如果直接slave不可用,才会去寻找slave的slave

领导者哨兵选取算法------Raft算法

基本思路是先到先得:即在一轮选举中,哨兵A向B发送成为领导者的申请,如果B没有同意过其他哨兵,则会同意A成为领导者

新master选取机制

  1. 选出新的master,在健康的slave中,通过优先级(redis.conf中slave-priority或replica-priority,数字越小优先级越高)、复制偏移量、id三层比较选取新的master
  1. 重新认定master,领导者哨兵会对选举出的新master执行slaveof no one;对其他slave发送命令使剩余slave称为新master的slave

  2. 原master成为新master的slave,领导者哨兵会让原master降级为slave并恢复正常工作

相关推荐
暮毅1 分钟前
10.Node.js连接MongoDb
数据库·mongodb·node.js
wowocpp4 分钟前
ubuntu 22.04 server 格式化 磁盘 为 ext4 并 自动挂载 LTS
服务器·数据库·ubuntu
成富26 分钟前
文本转SQL(Text-to-SQL),场景介绍与 Spring AI 实现
数据库·人工智能·sql·spring·oracle
songqq2727 分钟前
SQL题:使用hive查询各类型专利top 10申请人,以及对应的专利申请数
数据库·sql
计算机学长felix31 分钟前
基于SpringBoot的“校园交友网站”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·毕业设计·交友
王佑辉1 小时前
【redis】redis缓存和数据库保证一致性的方案
redis·面试
小码的头发丝、1 小时前
Django中ListView 和 DetailView类的区别
数据库·python·django
Karoku0661 小时前
【企业级分布式系统】Zabbix监控系统与部署安装
运维·服务器·数据库·redis·mysql·zabbix
gorgor在码农2 小时前
Redis 热key总结
java·redis·热key
想进大厂的小王2 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构