redis集群配置(精华版):哨兵模式

哨兵模式

    • 概念
      • 单机单个哨兵
      • 多哨兵模式
    • 动手实操
      • 1、环境准备
      • 2、配置sentinel.conf配置文件
      • 3、启动哨兵&测试
      • 4、SpringBoot测试哨兵模式故障转移功能

概念

主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干预,费事费力,还会造成一段时间内服务不可用。这不是一种推荐的方式,更多时候,我们优先考虑哨兵模式

哨兵模式优缺点

优点:

  1. 哨兵集群,基于主从复制模式,所有主从复制的优点,它都有
  2. 主从可以切换,故障可以转移,系统的可用性更好
  3. 哨兵模式是主从模式的升级,手动到自动,更加健壮

缺点:

  1. Redis不好在线扩容,集群容量一旦达到上限,在线扩容就十分麻烦
  2. 实现哨兵模式的配置其实是很麻烦的,里面有很多配置项

单机单个哨兵

哨兵的作用:

  • 通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。
  • 当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机

多哨兵模式

在这里插入图片描述

动手实操

1、环境准备

三台centos7虚拟机

节点IPPORT
LBJ192.168.3.1316379
slave01192.168.3.1376379
slave02192.168.3.1386379
/192.168.3.13126379
/192.168.3.13726379
/192.168.3.13826379

默认已经都安装好redis了,redis默认安装路径在/usr/local/bin,我分别在三台服务器的redis安装目录下,创建了一个kconfig文件夹存放redis.confsentinel.conf

在这里插入图片描述

2、配置sentinel.conf配置文件

  • 按照主从复制模式,搭建一主两从
  • 192.168.3.131 为主服务器,192.168.3.137、192.168.3.138 为从服务器,在上一篇文章中,已搭建好主从模式
  • 一主二从都分别搭建哨兵节点

1)禁止保护模式
在这里插入图片描述

2) sentinel monitor mymaster 127.0.0.1 6379 2

其中mymaster为监控对象起的服务器名称,可以自定义,ip地址:监控的主服务,端口为master 服务器port, 2表示至少有多少个哨兵同意迁移的数量,即2个以上哨兵认为主服务器不可以用事,才进行客观下线。单个哨兵监测到主服务不可用,仅仅只是主观下线,需要客观下线才算数

在这里插入图片描述

  • 修改sentinel.conf 将 默认的sentinel monitor mymaster 127.0.0.1 6379 2 改为
    sentinel monitor mymaster 192.168.3.131 6379 2

3)sentinel auth-pass mymaster 123456

由于我们的主服务器设置了密码,所以需要手动配置一下

sentinel auth-pass mymaster 123456

3、启动哨兵&测试

此处默认主从模式已经部署,同时redis已经开启

1)分别启动所有节点的哨兵

redis-sentinel kconfig/sentinel.conf

在这里插入图片描述

可以看到哨兵监听到主服务器

2)关闭主服务器,查看哨兵信息

在这里插入图片描述

我们可以发现192.168.3.131主服务不可用了,过了30秒,哨兵模式 投票 将 从服务器 192.168.3.137选举为主服务器

这里面的有一个时间间隔,实际上是服务下线修复的时间,可以在sentinel.conf配置文件里配置

sentinel down-after-milliseconds <master-name> <milliseconds>,默认:30s

3)重启原本宕机的主服务

在这里插入图片描述

在这里插入图片描述

由于137已经成为master了,重新回来的131,只能当slave

但是原本宕机,现在重新加入的节点,还无法同步最新master的状态

在这里插入图片描述

131继续宕机,也只是作为slave宕机,137哨兵会监测到,并主观下线131

在这里插入图片描述

​ 在Redis的哨兵模式下当一个主服务器宕机后重新开启,并且成为一个从服务器(slave),它不会自动同步新的主服务器(master)的状态,这是因为Redis的复制机制是单向的。换句话说,一个从服务器只能复制主服务器的数据,而不能向主服务器发送数据

当一个主服务器重新启动后成为从服务器,它会尝试连接之前的主服务器(即它断开连接之前的主服务器),并尝试从该主服务器那里进行同步。如果之前的主服务器仍然可用并且数据没有被清除,那么重新启动的从服务器会尝试复制之前的主服务器的数据,而不会连接到新的主服务器

解决这个问题,可以通过以下步骤来手动配置重新启动的从服务器以连接到新的主服务器

  1. 在重新启动的从服务器上,修改配置文件,将新的主服务器的地址和端口更新为主服务器的地址和端口。

  2. 重启从服务器,使其连接到新的主服务器并开始同步数据。

  3. 确保重新启动的从服务器可以与新的主服务器建立连接并成功同步数据。可以通过监视从服务器的日志文件或使用Redis命令检查同步状态。

  4. 如果有必要,可以重新配置哨兵以将重新启动的从服务器纳入监控,并在必要时进行故障转移。

通过执行以上步骤,重新启动的从服务器应该能够成功连接到新的主服务器并同步数据,从而与新的主服务器保持同步状态

4) 完整的哨兵模式配置文件 sentinel.conf

# Example sentinel.conf
 
# 哨兵sentinel实例运行的端口 默认26379
port 26379
 
# 哨兵sentinel的工作目录
dir /tmp
 
# 哨兵sentinel监控的redis主节点的 ip port 
# master-name  可以自己命名的主节点名字 只能由字母A-z、数字0-9 、这三个字符".-_"组成。
# quorum 当这些quorum个数sentinel哨兵认为master主节点失联 那么这时 客观上认为主节点失联了
# sentinel monitor <master-name> <ip> <redis-port> <quorum>
sentinel monitor mymaster 127.0.0.1 6379 1
 
# 当在Redis实例中开启了requirepass foobared 授权密码 这样所有连接Redis实例的客户端都要提供密码
# 设置哨兵sentinel 连接主从的密码 注意必须为主从设置一样的验证密码
# sentinel auth-pass <master-name> <password>
sentinel auth-pass mymaster MySUPER--secret-0123passw0rd
 
 
# 指定多少毫秒之后 主节点没有应答哨兵sentinel 此时 哨兵主观上认为主节点下线 默认30秒
# sentinel down-after-milliseconds <master-name> <milliseconds>
sentinel down-after-milliseconds mymaster 30000
 
# 这个配置项指定了在发生failover主备切换时最多可以有多少个slave同时对新的master进行 同步,
这个数字越小,完成failover所需的时间就越长,
但是如果这个数字越大,就意味着越 多的slave因为replication而不可用。
可以通过将这个值设为 1 来保证每次只有一个slave 处于不能处理命令请求的状态。
# sentinel parallel-syncs <master-name> <numslaves>
sentinel parallel-syncs mymaster 1
 
 
 
# 故障转移的超时时间 failover-timeout 可以用在以下这些方面: 
#1. 同一个sentinel对同一个master两次failover之间的间隔时间。
#2. 当一个slave从一个错误的master那里同步数据开始计算时间。直到slave被纠正为向正确的master那里同步数据时。
#3.当想要取消一个正在进行的failover所需要的时间。  
#4.当进行failover时,配置所有slaves指向新的master所需的最大时间。不过,即使过了这个超时,slaves依然会被正确配置为指向master,但是就不按parallel-syncs所配置的规则来了
# 默认三分钟
# sentinel failover-timeout <master-name> <milliseconds>
sentinel failover-timeout mymaster 180000
 
# SCRIPTS EXECUTION
 
#配置当某一事件发生时所需要执行的脚本,可以通过脚本来通知管理员,例如当系统运行不正常时发邮件通知相关人员。
#对于脚本的运行结果有以下规则:
#若脚本执行后返回1,那么该脚本稍后将会被再次执行,重复次数目前默认为10
#若脚本执行后返回2,或者比2更高的一个返回值,脚本将不会重复执行。
#如果脚本在执行过程中由于收到系统中断信号被终止了,则同返回值为1时的行为相同。
#一个脚本的最大执行时间为60s,如果超过这个时间,脚本将会被一个SIGKILL信号终止,之后重新执行。
 
#通知型脚本:当sentinel有任何警告级别的事件发生时(比如说redis实例的主观失效和客观失效等等),将会去调用这个脚本,
#这时这个脚本应该通过邮件,SMS等方式去通知系统管理员关于系统不正常运行的信息。调用该脚本时,将传给脚本两个参数,
#一个是事件的类型,
#一个是事件的描述。
#如果sentinel.conf配置文件中配置了这个脚本路径,那么必须保证这个脚本存在于这个路径,并且是可执行的,否则sentinel无法正常启动成功。
#通知脚本
# sentinel notification-script <master-name> <script-path>
  sentinel notification-script mymaster /var/redis/notify.sh
 
# 客户端重新配置主节点参数脚本
# 当一个master由于failover而发生改变时,这个脚本将会被调用,通知相关的客户端关于master地址已经发生改变的信息。
# 以下参数将会在调用脚本时传给脚本:
# <master-name> <role> <state> <from-ip> <from-port> <to-ip> <to-port>
# 目前<state>总是“failover”,
# <role>是“leader”或者“observer”中的一个。 
# 参数 from-ip, from-port, to-ip, to-port是用来和旧的master和新的master(即旧的slave)通信的
# 这个脚本应该是通用的,能被多次调用,不是针对性的。
# sentinel client-reconfig-script <master-name> <script-path>
sentinel client-reconfig-script mymaster /var/redis/reconfig.sh

4、SpringBoot测试哨兵模式故障转移功能

先关闭所有的redis主从节点和哨兵节点,重启发现,137依然还是master,说明故障转移后,主从关系确定下来后,将不再发生变化

在这里插入图片描述

初始状态,键值对情况

在这里插入图片描述

1)application.yml

spring:
  redis:
    # 配置哨兵
    sentinel:
      # 主服务器名称
      master: mymaster
      # 哨兵节点
      nodes: 192.168.3.131:26379,192.168.3.137:26379,192.168.3.138:26379
    # 登录密码
    password: 123456
    # Jedis配置
    jedis:
      # 连接池配置
      pool:
        # 最大等待1秒
        max-wait: 1s
        # 最大空闲连接数
        max-idle: 10
        # 最大活动连接数
        max-active: 20
        # 最小空闲连接数
        min-idle: 5
    # 配置Redis集群信息
    cluster:
      # 集群节点信息
      nodes: 192.168.3.131:6379,192.168.3.137:6379,192.168.3.138:6379
      # 最大重定向数,一般设置为5,
      # 不建议设置过大,过大容易引发重定向过多的异常
      max-redirects: 5
      password: 123456

2)controller

    @GetMapping("/test")
    public String test() {
        return "test";
    }

    // 注入StringRedisTemplate对象,该对象操作字符串,由Spring Boot机制自动装配
    @Autowired
    private StringRedisTemplate stringRedisTemplate = null;

    // 测试Redis写入
    @GetMapping("/write")
    public Map<String, String> testWrite() {
        Map<String, String> result = new HashMap<>();
        result.put("666LBJ666", "value1");
        stringRedisTemplate.opsForValue().multiSet(result);
        return result;
    }

    // 测试Redis读出
    @GetMapping("/read")
    public Map<String, String> testRead() {
        Map<String, String> result = new HashMap<>();
        result.put("666LBJ666", stringRedisTemplate.opsForValue().get("666LBJ666"));
        return result;
    }

3)写入键值对

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4)当137master宕机,测试是否可以故障转移,并保证可用

在这里插入图片描述

在这里插入图片描述

删掉刚写入的键值对

在这里插入图片描述

再次请求,写入

在这里插入图片描述

在这里插入图片描述

5)读取一下键值对

在这里插入图片描述

至此redis-哨兵模式搭建与测试功能完毕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/501725.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

选择华为HCIE培训机构有哪些注意事项

选择软件培训机构注意四点事项1、口碑&#xff1a;学员和社会人士对该机构的评价怎样&#xff1f; 口碑对于一个机构是十分重要的&#xff0c;这也是考量一个机构好不好的重要标准&#xff0c;包括社会评价和学员的评价和感言。誉天作为华为首批授权培训中心&#xff0c;一直致…

Python学习(二)

数据容器 数据容器根据特点的不同&#xff0c;如&#xff1a; 是否支持重复元素是否可以修改是否有序&#xff0c;等 分为5类&#xff0c;分别是&#xff1a; 列表&#xff08;list&#xff09;、元组&#xff08;tuple&#xff09;、字符串&#xff08;str&#xff09;、集…

C++赋值运算符函数与拷贝构造函数

一.赋值运算符函数与拷贝构造函数区别 C拷贝赋值运算符与拷贝构造函数的区别&#xff1a; 首先&#xff0c;拷贝构造函数是用于创建一个新对象作为现有对象的副本的构造函数。 典型的拷贝构造函数如下&#xff1a; class_name(const class_name &old_obj); 其中&#xff0…

Spring Boot简介及案例

文章目录 Spring Boot简介以下是一个简单的 Spring Boot Web 应用实例**步骤 1&#xff1a;创建 Spring Boot 项目****步骤 2&#xff1a;编写 RESTful 控制器****步骤 3&#xff1a;配置主类****步骤 4&#xff1a;运行并测试应用** Spring Boot简介 Spring Boot 是一个用于简…

【独立开发前线】Vol.27 为什么独立开发者需要一个网站?

现在很多内容创造者都把主要平台放在了第三方平台上&#xff0c;包括像知乎、B站、头条等等&#xff0c;但即使在2024年&#xff0c;我依然建议你做一个完全属于你的网站。 为什么呢&#xff1f; 你有没有在微信或知乎看到过这种拦截页面&#xff1f; 你花了好大的精力写了一…

Day58:WEB攻防-RCE代码命令执行过滤绕过异或无字符无回显方案黑白盒挖掘

目录 RCE & 代码执行 & 命令执行 RCE-利用&绕过&异或&回显 关键字过滤 - 过滤 flag 过滤执行命令&#xff08;如cat tac等&#xff09; 过滤执行空格 无回显利用 演示案例—白盒-CTF-RCE代码命令执行 29-通配符 30-取代函数&通配符&管道符…

嵌入式|蓝桥杯STM32G431(HAL库开发)——CT117E学习笔记14:PWM捕获

系列文章目录 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记01&#xff1a;赛事介绍与硬件平台 嵌入式|蓝桥杯STM32G431&#xff08;HAL库开发&#xff09;——CT117E学习笔记02&#xff1a;开发环境安装 嵌入式|蓝桥杯STM32G431&#xff08;…

微信小程序开发【从入门到精通】——页面事件

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;开发者-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

MS Edge浏览器坏了?网页播放视频的速度不对

前言 小白是MS Edge浏览器的重度用户。电脑上必须有的两个浏览器&#xff1a;Google Chrome和Microsoft Edge。 前段时间小白在使用MS Edge的时候出了问题&#xff1a;播放视频或者音频的时候总是被莫名其妙加速或者减速&#xff0c;类似于播放视频时候的0.5x或者2.0x。 当时…

舒适的劳保鞋,是工友不可或缺的保障!

劳保鞋&#xff0c;自诞生以来&#xff0c;就承担着保护工作人员足部免受于伤害的重任。在现代工业社会里&#xff0c;劳保鞋作为一种常见的劳保防护用品&#xff0c;被广泛用于各行各业。从实验室到车间再到工厂等&#xff0c;只要是作业现场大部分都会用到对应的劳保鞋。工作…

阿里云2核4G服务器租用价格30元、165元和199元1年

阿里云2核4G服务器租用优惠价格&#xff0c;轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月&#xff0c;活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图&#xff1a; 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

国内好用的chatGPT和AI绘图工具

分享一个比较好用的AI 分享一个比较好用的AI&#xff0c;只是需要开通会员&#xff0c;目前官网的价格是&#xff1a;298&#xff0c;开通之后可以使用chatgpt4、AI绘画、图片融合等等&#xff01;不开通的话是可以免费使用15次的&#xff0c;下面是一些介绍图片&#xff01;链…

使用Leaflet.rotatedMaker进行航班飞行航向模拟的实践

目录 前言 一、Leaflet的不足 1、方向插件 2、方向控制脚本说明 二、实时航向可视化实现 1、创建主体框架 2、飞机展示 3、位置和方位模拟 三、成果及分析 1、成果展示 2、方向绑定解读 总结 前言 众所周知&#xff0c;物体在空间中的运动&#xff08;比如飞行、跑步…

基于微信小程序的考研交流平台的设计与实现

3 系统需求分析与设计 3.1 系统需求分析 本系统基于微信小程序&#xff0c;实现教学互动软件系统是本文的目标&#xff0c;主要涉及到的系统角色分为学生、教师、管理员。系统角色主要有管理员&#xff0c;普通用户两种角色构成。 普通用户有如下几个核心需求&#xff1a; …

JUC:synchronized优化——锁的升级过程(偏向锁->轻量级锁->重量级锁)以及内部实现原理

文章目录 锁的类型轻量级锁重量级锁自旋优化偏向锁偏向锁的细节偏向锁的撤销批量重偏向批量撤销锁消除 锁的类型 重量级锁、轻量级锁、偏向锁。 加锁过程&#xff1a;偏向->轻量级->重量级 轻量级锁 轻量级锁的使用场景&#xff1a;如果一个对象虽然有多线程要加锁&am…

Django详细教程(一)

文章目录 一、安装Django二、创建项目1.终端创建项目2.Pycharm创建项目&#xff08;专业版才可以&#xff09;3.默认文件介绍 三、创建app1.app介绍2.默认文件介绍 四、快速上手1.写一个网页步骤1&#xff1a;注册app 【settings.py】步骤2&#xff1a;编写URL和视图函数对应关…

sort函数对vector一维或者二维数组排序

目录 sort对一维数组排序 1、sort对一位数组升序排序 2、sort对一维数组降序排序 sort对二维数组排序 1、sort默认对横坐标进行升序排序&#xff0c;如下&#xff1a; 2、使用自定义排序对纵坐标进行升序排序&#xff1a; 额外知识&#xff1a; 对横坐标进行降序排列,当…

【全栈小5】我的创作纪念日

目录 前言机缘收获粉丝和原创个人成就六边形战士 回顾文章原代码代码优化 憧憬 前言 全栈小5 &#xff0c;有幸再次遇见你&#xff1a; 还记得 2019 年 03 月 29 日吗&#xff1f; 你撰写了第 1 篇技术博客&#xff1a; 《前端 - 仿动态效果 - 展开信息图标》 在这平凡的一天&…

CSS(三)---【盒子模型、边框、外边距合并】

零.前言 本篇主要介绍CSS中最重要的一种概念模型&#xff1a;“盒子模型”。 关于CSS的更多内容&#xff0c;可以查看作者之前的文章&#xff1a; CSS(一)---【CSS简介、导入方式、八种选择器、优先级】-CSDN博客 CSS(二)---【常见属性、复合属性使用】-CSDN博客 一.盒子模…

基于AI网关的光伏电站在线监测方案

光伏电站作为利用太阳能的重要方式&#xff0c;凭借其环保、高效和可持续性的优势&#xff0c;在全球范围内得到广泛应用。然而&#xff0c;光伏电站的运营和维护也面临着诸多难点和痛点。在这一背景下&#xff0c;AI智能网关的应用为光伏电站的运营和维护带来了新的突破。 光伏…