【Redis 开发】Redis哨兵

news/2024/9/23 14:33:56/

哨兵

  • 作用和原理
    • 服务状态监控
    • 选举新的master
  • 搭建哨兵集群
  • RedisTemplate的哨兵模式

作用和原理

Redis提供了哨兵机制来实现主从集群中的自动故障恢复:
在这里插入图片描述
哨兵也是一个集群

  1. 监控:会不断检查master和slave是否按预期工作
  2. 自动故障恢复:如果master故障,Sentinel会将一个slave提升为master,当故障实例恢复也以新的master为主
  3. 通知:哨兵充当Redis客户端的服务发现来源,当集群发生故障转移时,会将新信息推送给Redis客户端

服务状态监控

哨兵基于心跳机制监测服务状态,每个1秒向集群的每个实例发送ping命令:
主观下线:如果某哨兵节点发现某实例未在规定时间内响应,则认为该实例主观下线
客观下线:若超过指定数量的哨兵都认为该实例主观下线,则该实例客观下线,这个值最好超过哨兵实例数量的一半

选举新的master

当master故障,哨兵需要在salve中选择一个作为新的master,依据:

  1. 判断salve节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds*10)则会排除slave节点
  2. 然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举
  3. 如果slave-priority一样,则判断slave节点的offset值,越大说明数据较新,优先级越高
  4. 最后判断slave节点的运行id大小,越小优先级越高
  • 选择完成之后如何让从节点变为主节点
  1. 哨兵给备选的slave节点发送slaveof no one命令,让该节点成为master
  2. 哨兵给所有其他的slave节点发送slaveof 192.168.75.135 7002命令,让这些slave成为新master的从节点,开始从新的master上同步数据
  3. 最后,哨兵将故障节点标记为slave,当故障节点恢复后会自动成为新的master的slave节点
    在这里插入图片描述

搭建哨兵集群

这里我们讲述在Linux下搭建三个三个哨兵

  1. /tmp下创建三个目录,mkdir s1 s2 s3
  2. 在s1目录下创建一个sentinel.conf文件,添加内容
port 27001  #配置端口
sentinel announce-ip 192.168.150.101   # 声明自己的ip实例
sentinel monitor mymaster 192.168.150.101 7001 2  # 监控master,时间监控整个集群,2标识之前主观下线的值
sentinel down-after-milliseconds mymaster 5000  #与master连接的超时时间
sentinel failover-timeout mymaster 60000  #与故障恢复的超时时间
dir "/tmp/s1"  #工作目录,实例的存放位置
  1. 将该配置文件拷贝到s2,s3目录中
    echo s2 s3 | xargs -t -n 1 cp s1/sentinel.conf
  2. 修改两个目录下的配置文件将端口分别修改为27002,27003
    sed -i -e 's/27001/27002/g' -e 's/s1/s2/g' s2/sentinel.conf,其他目录相同命令
  3. 启动,打开三个窗口执行redis-sentinel s1/sentinel.conf,剩下两个也同样

RedisTemplate的哨兵模式

在Sentinel集群监管下的Redis主从集群,其节点会因为自动故障转移而发生变化,Redis的客户端必须感知这种变化,及时更新连接信息。Spring的RedisTemplate底层利用lettuce实现了节点的感知和自动切换。

  1. 引入redis的start的依赖
  2. 在配置文件中设置哨兵信息
spring:redis:sentinel:master: hhh #指定master名称nodes: #指定哨兵集群信息-192.168.75.135:27001-192.168.75.135:27002-192.168.75.135:27003
  1. 在配置类中配置Redis集群的读写分离
java">@Bean
public LettceClientConfigurationBuilderCustomizer configurationBuilderCustomizer(){return configBuilder->configBuilder.readFrom(ReadFrom.REPLICA_PREFERRED);
}

这里的ReadFrom是配置Redis的读取操作,是一个枚举:

标识意义
MASTER从主节点读取
MASTER_PREFERRED优先从master节点读取,master不可用才读取replica
REPLICA从slave(replica)节点读取
REPLICA_PREFERRED优先从slave节点读取,所有的节点都不可用才读取master

http://www.ppmy.cn/news/1441790.html

相关文章

Vitis HLS 学习笔记--IDE软件高效操作指引

目录 1. 简介 2. 实用软件操作 2.1 C/RTL Cosimulation 选项 2.2 Do not show this dialog again 2.3 New Solution 2.4 对比 Solution 2.5 以命令行方式运行(windows) 2.6 文本缩放快捷键 2.7 查看和修改快捷键 2.8 将Vitis HLS RTL 导入 Viv…

github Copilot的使用总结

1. 代码建议和补全 GitHub Copilot 的基本使用涉及编写代码时的实时代码建议和补全。一旦你已经安装并配置好 GitHub Copilot 插件,你可以在支持的编辑器(如 Visual Studio Code)中开始使用 Copilot。以下是一些基本的使用步骤: …

全程免费的ssl证书申请——七步实现网站https

全程免费的ssl证书申请步骤如下: 1 准备工作 首先确定好需要的证书类型,如单域名证书、通配符证书和多域名证书,准备好需要安装证书的域名。 2 选择CA 选择提供免费证书的服务商——JoySSL,并访问其官方网站,创建一…

城市公交查询系统的设计与实现(二)

前面内容请移步 城市公交查询系统的设计与实现(一) 相关免费资源 城市公交查询系统​​​​​​​ 2 相关技术简介 2.1 Jsp技术介绍 JSP全称Java Server Pages,是一种动态网页开发技术。它使用JSP标签在HTML网页中插入Java代码。标签…

深入探索 MySQL:成本模型解析与查询性能优化

MySQL作为最流行的关系型数据库管理系统之一,在各种应用场景中都有着广泛的应用。 然而,在处理大规模数据时,查询性能往往成为了关注焦点。 本文将深入探讨MySQL的成本模型,解析其工作原理,并提供一系列优化策略&…

【IC设计】边沿检测电路(上升沿、下降沿、双沿,附带源代码和仿真波形)

文章目录 边沿检测电路的概念上升沿检测电路下降沿检测电路双边沿检测电路代码和仿真RTL代码Testbench代码仿真波形 参考资料 边沿检测电路的概念 边沿检测指的是检测一个信号的上升沿或者下降沿,如果发现了信号的上升沿或下降沿,则给出一个信号指示出来…

c++中的链表list的模拟实现

拖更了半个月,我终于来填c的坑啦。上次我们说的vetcor不知道小伙伴还记得多少呢?今天我们要讲list的模拟实现。 目录 架构结点list表的结构 构造函数尾插push_back()尾删pop_back()计算个数:size()判断空empty()※迭代器问题普通迭代器迭代器…

纯血鸿蒙APP实战开发——自定义路由栈管理

介绍 本案例将介绍如何使用路由跳转返回时获取到来源页的模块名以及路径名,在实际场景中同一页面通常会根据不同来源页展示不同的UI。 使用说明 无特殊使用说明,其他使用说明参考动态路由的相关说明 实现思路 路由来源页的实现 新增来源页字段 ex…