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: 5password: 123456

2)controller

    @GetMapping("/test")public String test() {return "test";}// 注入StringRedisTemplate对象,该对象操作字符串,由Spring Boot机制自动装配@Autowiredprivate 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-哨兵模式搭建与测试功能完毕

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

苹果Find My产品需求增长迅速,伦茨科技ST17H6x芯片供货充足

苹果的Find My功能使得用户可以轻松查找iPhone、Mac、AirPods以及Apple Watch等设备。如今Find My还进入了耳机、充电宝、箱包、电动车、保温杯等多个行业。苹果发布AirTag发布以来&#xff0c;大家都更加注重物品的防丢&#xff0c;苹果的 Find My 就可以查找 iPhone、Mac、Ai…

04-JavaScript函数

函数&#xff08;重点&#xff09; 1.为什么使用函数? 用函数来解决代码重用的问题。 2.函数的意义 函数其实就是封装&#xff0c;把可以重复使用的代码放到函数中&#xff0c;如果需要多次使用同一段代码&#xff0c;就可以把封装成一个函数。这样的话&#xff0c;在你需…

大数据-hive,初步了解

1. Hive是什么 Hive是基于Hadoop的数据仓库解决方案。由于Hadoop本身在数据存储和计算方面有很好的可扩展性和高容错性&#xff0c;因此使用Hive构建的数据仓库也秉承了这些特性。 简单来说&#xff0c;Hive就是在Hadoop上架了一层SQL接口&#xff0c;可以将SQL翻译成MapRedu…

docker环境配置过程中的常见问题

1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepository%3Alibr…

keil调试仿真退出卡死现象解决办法

更新到keil5版本V5.20之后&#xff0c;目前一直到V5.29版本&#xff0c;都存在一个问题&#xff1a; 退出调试模式时&#xff0c;有可能会卡死&#xff01; 此时需要在任务管理器中结束掉进程才能强制关闭keil工程。 网上查找了很多资料&#xff0c;一种是退出仿真时不能有断…

Python:执行py命令,提示: Can‘t find a default Python.

1.Python运行环境罢工 今天&#xff0c;要运行一个前年用python编写的爬虫程序&#xff0c;先检测python运行环境是否正常&#xff1a; D:\Python38-32\works>c:\windows\py.exe Cant find a default Python. 再试&#xff1a; D:\Python38-32\works>py --list Installe…

Vue3 + Vite + TS + Element-Plus + Pinia项目(5)对axios进行封装

1、在src文件夹下新建config文件夹后&#xff0c;新建baseURL.ts文件&#xff0c;用来配置http主链接 2、在src文件夹下新建http文件夹后&#xff0c;新建request.ts文件&#xff0c;内容如下 import axios from "axios" import { ElMessage } from element-plus im…

【Node.JS】koa

文章目录 概述koa和express对比koa下载安装使用1.创建koa项目文件目录2. 创建koa服务3. 添加路由 koa-router4. 数据库服务 mongodb5. 添加请求参数json处理 koa-bodyparser6. 用户接口举例7.引入koa一些常用插件8.用户登录验证 koa-jwt9.webpack生产打包 来源 概述 Koa 是一个…

OpenAI发布Voice Engine模型!用AI合成你的声音!

大家好&#xff0c;我是木易&#xff0c;一个持续关注AI领域的互联网技术产品经理&#xff0c;国内Top2本科&#xff0c;美国Top10 CS研究生&#xff0c;MBA。我坚信AI是普通人变强的“外挂”&#xff0c;所以创建了“AI信息Gap”这个公众号&#xff0c;专注于分享AI全维度知识…

6_相机坐标系_相机4个坐标系详述

相机系列文章是用来记录使用opencv3来完成单目相机和6轴机械臂手眼标定。本人吃饭的主职是linux下6轴机械臂相关应用开发。但对于机械臂运动学、相机应用等都非常感兴趣&#xff0c;所以对一些线性代数基础薄弱又想深入了解机械臂内部运算的同志比较有体会。由于是探索性学习&a…

快速上手Spring Cloud 九:服务间通信与消息队列

快速上手Spring Cloud 一&#xff1a;Spring Cloud 简介 快速上手Spring Cloud 二&#xff1a;核心组件解析 快速上手Spring Cloud 三&#xff1a;API网关深入探索与实战应用 快速上手Spring Cloud 四&#xff1a;微服务治理与安全 快速上手Spring Cloud 五&#xff1a;Spring …

新数字时代的启示:揭开Web3的秘密之路

在当今数字时代&#xff0c;随着区块链技术的不断发展&#xff0c;Web3作为下一代互联网的概念正逐渐引起人们的关注和探索。本文将深入探讨新数字时代的启示&#xff0c;揭开Web3的神秘之路&#xff0c;并探讨其在未来的发展前景。 1. Web3的定义与特点 Web3是对互联网未来发…

Discourse 最多允许有几个分类级别

和 DISCUZ 不同&#xff0c;DISCUZ 可以允许分类下面还有分类&#xff0c;再继续分类这种嵌套式分类。 Discourse 最多只允许有 2 个分类。 如果你在已有的分类下再继续分类的话&#xff0c;系统会提示错误&#xff1a; 意思就是子分类不能再分子分类。 Discourse 尽量采取了…

【linux课设】自主实现shell命令行解释器

shell和bash的关系 shell是命令解释器&#xff0c;它接收用户的命令并将其传递给内核去执行。bash,即GNU Bourne-Again Shell&#xff0c;是shell的一种实现方式&#xff0c;也是大多数linux系统下默认的shell。 bash的原理 大多数的指令进程&#xff08;除了内建命令&#…

窥探未来:Web3如何颠覆传统互联网

随着科技的迅速发展&#xff0c;Web3正逐渐成为人们关注的焦点。与传统的Web2相比&#xff0c;Web3代表了一种全新的互联网模式&#xff0c;其潜力和影响力引发了人们对未来的期待和探索。本文将深入探讨Web3如何颠覆传统互联网的各个方面&#xff0c;并展望其可能带来的未来变…

Docker搭建LNMP环境实战(08):安装php-fpm

1、编写php测试文件 在文件夹&#xff1a;/mnt/hgfs/dockers/test_site/www目录下创建文件&#xff1a;test.php&#xff0c;内容为&#xff1a; <?phpecho "hello world!!!!!! From test.php"; ?>2、编写php-fpm部署配置文件 在文件夹&#xff1a;/mnt/h…

基于单片机寻迹巡线避障智能小车系统设计

**单片机设计介绍&#xff0c;基于单片机寻迹巡线避障智能小车系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机寻迹巡线避障智能小车系统设计是一个结合了硬件与软件技术的综合性项目。该系统的目标是设计一款…

AMEYA360代理 | 江苏长晶科技FST2.0高性能 IGBT产品介绍

江苏长晶科技股份有限公司是一家专业从事半导体产品研发、生产和销售的企业。自2019年起&#xff0c;连续4年被中国半导体行业协会评为 “功率器件十强企业”。2021年开始自主研发有着“工业CPU”之称的IGBT&#xff0c;截至2023年Q3在家电/工业/新能源等行业实现8款产品市场应…

【MySQL】DML的表操作详解:添加数据&修改数据&删除数据(可cv例题语句)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

政安晨:【Keras机器学习实践要点】(九)—— 保存、序列化和导出模型

目录 介绍 如何保存和加载模型 保存一个Keras模型 装回模型 设置 保存 例子&#xff1a; 自定义对象 向 load_model() 传递自定义对象 使用自定义对象范围 模型序列化 APIs 内存模型克隆 任意对象序列化和反序列化 保存模型权重 内存中的权重传递接口 无状态层…