当前位置: 首页 > news >正文

Linux系统Redis的哨兵架构配置

Linux系统Redis的哨兵架构配置

此处基于 Linux系统Redis的主从架构配置 进行哨兵高可用架构的搭建

此案例在一台虚拟机上启动6379和6380和6381三个reids主从实例(6379为主节点,6380和6381为从节点),以及26379、26380、26381的sentinel哨兵集群;

  1. 先准备好3份reids.conf配置

    6379主节点redis-6379.conf

    # 端口号设置
    port 6379# 持久化数据存储目录
    dir ./data/6379/# 将端口号追加命名到pidfile配置的文件
    pidfile /var/run/redis_6379.pid
    logfile "6379.log"
    

    6380从节点redis-6380.conf

    # 端口号设置
    port 6380# 持久化数据存储目录
    dir ./data/6380/# 将端口号追加命名到pidfile配置的文件
    pidfile /var/run/redis_6380.pid
    logfile "6380.log"# 从6379主redis实例复制数据
    replicaof 192.168.3.39 6379# 设置从节点只读
    replica-read-only yes
    

    6381从节点redis-6381.conf

    # 端口号设置
    port 6381# 持久化数据存储目录
    dir ./data/6381/# 将端口号追加命名到pidfile配置的文件
    pidfile /var/run/redis_6381.pid
    logfile "6381.log"# 从6379主redis实例复制数据
    replicaof 192.168.3.39 6379# 设置从节点只读
    replica-read-only yes
    
  2. 启动三个主从节点

    src/redis-server redis-6369.conf
    src/redis-server redis-6380.conf
    src/redis-server redis-6381.conf
    

    查看节点是否启动成功

    [yunze@localhost redis-5.0.14]$ ps -ef | grep redis
    yunze      3505      1  0 22:12 ?        00:00:02 src/redis-server *:6379
    yunze      3512      1  0 22:13 ?        00:00:02 src/redis-server *:6380
    yunze      3802      1  0 22:18 ?        00:00:01 src/redis-server *:6381
    yunze      4066   2797  0 22:28 pts/0    00:00:00 grep --color=auto redis
    

    三个节点启动成功!

  3. 准备3份哨兵集群的配置

    准备3份sentinel.conf配置文件

    一定要先准备好所有配置文件再去启动,否则如果复制了已启动的sentinel节点的配置文件,会导致哨兵集群搭建失败,因为sentinel启动之后会在当前节点使用的sentinel配置文件里追加写入

    sentinel myid dfb8da08b09e8e97ad4a94cf177a911c654ca464

    sentinel节点的myid 不能一样,所以尽量先准备好配置文件后,再依次启动

    cp sentinel.conf sentinel-26379.conf
    cp sentinel.conf sentinel-26380.conf
    cp sentinel.conf sentinel-26381.conf
    

    26379节点sentinel-26379.conf调整配置

    port 26379
    daemonize yes
    pidfile /var/run/redis-sentinel-26379.pid
    logfile "26379.log"
    dir ./data/26379
    # ip根据实际情况调整,mymaster为主节点的名称
    sentinel monitor mymaster 192.168.3.39 6379 2
    

    26380节点sentinel-23680.conf调整配置

    port 26380
    daemonize yes
    pidfile /var/run/redis-sentinel-26380.pid
    logfile "26380.log"
    dir ./data/26380
    # ip根据实际情况调整,mymaster为主节点的名称,最后的2是指需要有2个以上sentinel节点认为redis主节点失效,才是真的失效,一般为(sentinel总数/2+1)
    sentinel monitor mymaster 192.168.3.39 6379 2
    

    26381节点sentinel-23681.conf调整配置

    port 26381
    daemonize yes
    pidfile /var/run/redis-sentinel-26381.pid
    logfile "26381.log"
    dir ./data/26381
    # ip根据实际情况调整,mymaster为主节点的名称
    sentinel monitor mymaster 192.168.3.39 6379 2
    
  4. 启动哨兵集群

    src/redis-sentinel sentinel-26379.conf
    src/redis-sentinel sentinel-26380.conf
    src/redis-sentinel sentinel-26381.conf
    

    查看节点是否启动成功

    [yunze@localhost redis-5.0.14]$ ps -ef | grep redis
    yunze      3555      1  0 21:28 ?        00:00:00 src/redis-server *:6379
    yunze      3560      1  0 21:28 ?        00:00:00 src/redis-server *:6380
    yunze      3567      1  0 21:28 ?        00:00:00 src/redis-server *:6381
    yunze      3673      1  0 21:28 ?        00:00:00 src/redis-sentinel *:26379 [sentinel]
    yunze      3678      1  0 21:28 ?        00:00:00 src/redis-sentinel *:26380 [sentinel]
    yunze      3683      1  0 21:28 ?        00:00:00 src/redis-sentinel *:26381 [sentinel]
    yunze      3688   3103  0 21:28 pts/0    00:00:00 grep --color=auto redis
    

    至此哨兵架构搭建完成!

  5. 查看哨兵架构节点信息

    sentinel都启动成功之后,会将整个哨兵集群的基础信息写入到所有sentinel的配置文件里的最下面;

    查看sentinel-23679.conf配置文件进行确认

    sentinel known-replica mymaster 192.168.3.39 6381	# 表示主节点的复制节点,及从节点信息
    sentinel known-replica mymaster 192.168.3.39 6380	# 表示主节点的复制节点,及从节点信息
    sentinel known-sentinel mymaster 192.168.3.39 26381 25789bfe6f685c6f35d8710d4df85c344ef8a949
    sentinel known-sentinel mymaster 192.168.3.39 26380 7f3308dfa55e6f488fd03f9eed2a8af5141a46c4
    

    由上述信息得到6380和6381节点都是从节点,则6379就是主节点;如果redis主节点挂了,则哨兵集群会自动重新选出一个新的reids主节点,并修改sentinel配置文件信息;

    如6379节点redis挂了,则sentinel会从6380和6381节点选一个成为主节点,假设选举出的新主节点为6381,则此时sentinel的配置文件里的集群信息就会变为如下所示:

    sentinel known-replica mymaster 192.168.3.39 6380
    sentinel known-replica mymaster 192.168.3.39 6379
    sentinel known-sentinel mymaster 192.168.3.39 26381 25789bfe6f685c6f35d8710d4df85c344ef8a949
    sentinel known-sentinel mymaster 192.168.3.39 26380 7f3308dfa55e6f488fd03f9eed2a8af5141a46c4
    

    且还会将之前配置的

    sentinel monitor mymaster 192.168.3.39 6379 2
    

    修改为

    sentinel monitor mymaster 192.168.3.39 6381 2
    

    而当6379节点重新启动之后,哨兵集群会根据sentinel里的集群信息,将6379redis节点作为从节点加入到整个集群;

  6. 使用Spring Boot整合redis进行验证

    1. 加入依赖

              <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>
      
    2. application.yml配置

      spring:redis:database: 0timeout: 3000# 哨兵模式sentinel:# redis主节点的名称master: mymasternodes: 192.168.3.39:26379,192.168.3.39:26380,192.168.3.39:26381
      
    3. 编写测试代码

      项目运行时,可关闭掉redis主节点,测试哨兵集群自动选举主节点操作(redis主节点挂掉后,服务会发起10次重新连接,之后会重新选举出一个新的主节点继续操作redis数据)

      import lombok.extern.slf4j.Slf4j;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.data.redis.core.StringRedisTemplate;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RestController;/*** @author yunze* @date 2023/7/31 0031 23:20*/
      @Slf4j
      @RestController
      @RequestMapping("/demo")
      public class DemoController {@Autowiredprivate StringRedisTemplate stringRedisTemplate;@RequestMapping("/test_sentinel")public void testSentinel() {int i = 1;while (true) {try {stringRedisTemplate.opsForValue().set("test-" + i, String.valueOf(i));log.info("设置key:{}", "test-" + i);i++;Thread.sleep(1000);} catch (Exception e) {e.printStackTrace();log.error("出现异常:{}", e.getMessage());}}}
      }
      

相关文章:

Linux系统Redis的哨兵架构配置

Linux系统Redis的哨兵架构配置 此处基于 Linux系统Redis的主从架构配置 进行哨兵高可用架构的搭建 此案例在一台虚拟机上启动6379和6380和6381三个reids主从实例&#xff08;6379为主节点&#xff0c;6380和6381为从节点&#xff09;&#xff0c;以及26379、26380、26381的sent…...

HarmonyOS/OpenHarmony-ArkTS基于API9元服务开发快速入门

一、创建项目 二、创建卡片 三、添加资源 四、具体代码 Entry Component struct WidgetNewCard {/** The title.*/readonly TITLE: string harmonyOs;readonly CONTEXT: string 技术构建万物智联;/** The action type.*/readonly ACTION_TYPE: string router;/** The…...

macbook怎么卸载软件?2023年最新全新解析macbook电脑怎样删除软件

macbook怎么卸载软件&#xff1f;2023年最新全新解析macbook电脑怎样删除软件。关于Mac笔记本如何卸载软件_Mac笔记本卸载软件的四种方法的知识大家了解吗&#xff1f;以下就是小编整理的关于Mac笔记本如何卸载软件_Mac笔记本卸载软件的四种方法的介绍&#xff0c;希望可以给到…...

c51单片机16个按键密码锁源代码(富proteus电路图)

注意了&#xff1a;这个代码你是没法直接运行的&#xff0c;但是如果你看得懂&#xff0c;随便改一改不超过1分钟就可以用 #include "reg51.h" #include "myheader.h" void displayNumber(unsigned char num) {if(num1){P10XFF;P10P11P14P15P160;}else if…...

GraalVM

一、GraalVM GraalVM 是由 Oracle 开发的一个高性能、高效的通用虚拟机。它是一个全球性的项目&#xff0c;涵盖了多种编程语言和平台&#xff0c;并为开发者提供了一种统一的虚拟机环境。GraalVM 的核心特性是支持多语言混合执行&#xff0c;即在同一个运行时环境中同时执行多…...

File 类和 InputStream, OutputStream 的用法总结

目录 一、File 类 1.File类属性 2.构造方法 3.普通方法 二、InputStream 1.方法 2.FileInputStream 三、OutputStream 1.方法 2.FileOutputStream 四、针对字符流对象进行读写操作 一、File 类 1.File类属性 修饰符及类型属性说明static StringpathSeparator依赖于系统的路…...

开源进展 | WeBASE v3.1.0发布,新增多个实用特性

WeBASE是一个友好、功能丰富的区块链中间件平台&#xff0c;通过一系列通用功能组件和实用工具&#xff0c;助力社区开发者更快捷地与区块链进行交互。 目前WeBASE已更新迭代至v3.1.0版本&#xff0c;本次更新中&#xff0c;WeBASE带来了最新的合约Java脚手架导出功能&#xff…...

C++动态加载 插件

动态加载&#xff08;Dynamic Loading&#xff09;是指在程序运行时&#xff0c;根据需要动态地加载和链接代码或资源。 动态加载的主要目的是实现程序的灵活性和可扩展性&#xff0c;以及减少内存消耗和启动时间。通过动态加载&#xff0c;程序可以根据运行时的需求加载特定的…...

redis的缓存更新策略

目录 三种缓存更新策略 业务场景&#xff1a; 主动更新的三种实现 操作缓存和数据库时有三个问题 1.删除缓存还是更新缓存&#xff1f; 2.如何保证缓存与数据库的操作的同时成功或失败&#xff1f; 3.先操作缓存还是先操作数据库&#xff1f; 缓存更新策略的最佳实践方案&am…...

Android应用开发(6)TextView进阶用法

Android应用开发学习笔记——目录索引 本章介绍文本视图&#xff08;TextView&#xff09;的显示&#xff0c;包括&#xff1a;设置文本内容、设置文本大小、设置文本显示颜色。 一、设置TextView显示内容 Layout XML文件中设置 如&#xff1a;res/layout/activity_main.xm…...

Matlab滤波、频谱分析

Matlab滤波、频谱分析 滤波&#xff1a; 某目标信号是由5、15、30Hz正弦波混合而成的混合信号&#xff0c;现需要设计一个滤波器滤掉5、30Hz两种频率。 分析&#xff1a;显然我们应该设计一个带通滤波器&#xff0c;通带频率落在15Hz附近。 % 滤波 % 某目标信号是由5、15、3…...

车载软件架构 —— 车载软件入侵检测系统

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 没有人关注你。也无需有人关注你。你必须承认自己的价值&#xff0c;你不能站在他人的角度来反对自己。人…...

“深入解析JVM内部机制:理解Java虚拟机的工作原理“

标题&#xff1a;深入解析JVM内部机制&#xff1a;理解Java虚拟机的工作原理 摘要&#xff1a;本文将深入探讨Java虚拟机&#xff08;JVM&#xff09;的内部机制&#xff0c;解释其工作原理。我们将讨论JVM的组成部分、类加载过程、运行时数据区域以及垃圾回收机制。此外&…...

FPGA初步学习之串口发送模块【单字节和字符串的发送】

串口相关简介 UART 在发送或接收过程中的一帧数据由4部分组成&#xff0c;起始位、数据位、奇偶校验位和停止位&#xff0c;如图所示。其中&#xff0c;起始位标志着一帧数据的开始&#xff0c;停止位标志着一帧数据的结束&#xff0c;数据位是一帧数据中的有效数据。 通常用…...

Kotlin重点理解安全性

目录 一 Kotlin安全性1.1 可空类型1.2 安全调用运算符1.3 Elvis 运算符1.4 非空断言运算符1.5 安全类型转换1.6 延迟初始化 一 Kotlin安全性 Kotlin 在设计时采用了一系列策略&#xff0c;旨在尽可能地减少空指针异常&#xff08;NullPointerException&#xff09;的出现。空指…...

基于Java+SpringBoot+SpringCloud+Vue的智慧养老平台设计与实现(源码+LW+部署文档等)

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…...

Spring中的全局异常处理

在项目中通常会定义各种异常&#xff0c;比如断言异常、业务异常&#xff0c;甚至调用外部接口报的异常需要转成自己系统中的异常类型&#xff0c;这时就需要将各种异常类型进行统一的处理&#xff0c;返回统一的数据结构。在spring中提供了这样全局统一处理异常的注解Controll…...

【安全测试】Web应用安全之XSS跨站脚本攻击漏洞

目录 前言 XSS概念及分类 反射型XSS(非持久性XSS) 存储型XSS(持久型XSS) 如何测试XSS漏洞 方法一&#xff1a; 方法二&#xff1a; XSS漏洞修复 原则&#xff1a;不相信客户输入的数据 处理建议 资料获取方法 前言 以前都只是在各类文档中见到过XSS&#xff0c;也进…...

LeNet卷积神经网络-笔记

LeNet卷积神经网络-笔记 手写分析LeNet网三卷积运算和两池化加两全连接层计算分析 修正上图中H,W的计算公式为下面格式 基于paddle飞桨框架构建测试代码 #输出结果为&#xff1a; #[validation] accuracy/loss: 0.9530/0.1516 #这里准确率为95.3% #通过运行结果可以看出&am…...

使用XMLHttpRequest实现文件异步下载

1、问题描述 我想通过异步的方式实现下载文化&#xff0c;请求为post请求。一开始我打算用ajax。 $.ajax({type:post,contentType:application/json,url:http://xxx/downloadExcel,data:{data:JSON.stringify(<%oJsonResponse.JSONoutput()%>)},}).success(function(dat…...

百度文心大模型如何通过Taotoken实现稳定API调用与成本控制

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 百度文心大模型如何通过Taotoken实现稳定API调用与成本控制 对于希望集成百度文心大模型进行内容生成的企业开发者而言&#xff0c…...

FastbootEnhance:让安卓设备调试变得简单高效的Windows工具箱

FastbootEnhance&#xff1a;让安卓设备调试变得简单高效的Windows工具箱 【免费下载链接】FastbootEnhance A user-friendly Fastboot ToolBox & Payload Dumper for Windows 项目地址: https://gitcode.com/gh_mirrors/fa/FastbootEnhance 你是否曾经在刷机、调试…...

组织空心化,一个被严重忽略的问题

上一篇文章我提了一个概念&#xff1a;管理工具空心化。干部能力起不来&#xff0c;你上再好的系统、再牛的流程&#xff0c;最后全都变成填表运动。 我相信对很多人都会有共鸣。 这说明什么&#xff1f;空心化不是个别现象&#xff0c;是多数组织的慢性病。 今天往深处再撕…...

信息学奥赛刷题技巧:用‘整型转布尔’这道题,教你举一反三理解数据类型隐式转换

从整型转布尔看C隐式类型转换的艺术 在信息学竞赛的刷题过程中&#xff0c;很多同学会止步于"这道题我做对了"的层面&#xff0c;却忽略了题目背后蕴含的语言特性宝藏。以OpenJudge 1.2.09这道经典的整型与布尔型转换题目为例&#xff0c;表面上看只是考察基本数据类…...

构建多链资产追踪器:Node.js与React实现链上资产聚合与估值

1. 项目概述&#xff1a;一个链上资产追踪器的诞生最近在整理自己的数字资产时&#xff0c;发现了一个挺普遍但有点烦人的问题&#xff1a;当你在不同的区块链网络&#xff08;比如以太坊、BSC、Polygon&#xff09;上持有多种代币&#xff08;Token&#xff09;和NFT时&#x…...

保姆级教程:用Arduino IDE 2 + STM32Duino点亮你的第一块STM32开发板(附ST-Link驱动与CubeProgrammer配置)

从零开始&#xff1a;用Arduino IDE 2与STM32Duino打造STM32开发环境实战指南 当你第一次拿到STM32开发板时&#xff0c;那种既兴奋又忐忑的心情我完全理解。作为过来人&#xff0c;我深知一个清晰、完整的入门指南对新手有多重要。本文将带你一步步搭建开发环境&#xff0c;避…...

独立开发者如何借助Taotoken多模型能力打造全能AI助手应用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 独立开发者如何借助Taotoken多模型能力打造全能AI助手应用 对于独立开发者或小型工作室而言&#xff0c;构建一个功能全面的AI助手…...

避开这5个坑,你的癫痫脑电AI模型准确率能翻倍:从数据标注到特征工程实战

避开这5个坑&#xff0c;你的癫痫脑电AI模型准确率能翻倍&#xff1a;从数据标注到特征工程实战 在医疗AI领域&#xff0c;癫痫脑电信号分析一直是个充满挑战的课题。许多开发者满怀信心地构建模型&#xff0c;却在验证阶段遭遇性能瓶颈——准确率停滞不前&#xff0c;误报率居…...

STM32CubeIDE实战指南:从代码编译到一键下载的完整流程解析

1. STM32CubeIDE开发环境概述 对于刚接触STM32开发的工程师来说&#xff0c;选择一款合适的集成开发环境(IDE)至关重要。STM32CubeIDE是ST官方推出的免费开发工具&#xff0c;它集成了代码编辑、编译、调试和下载功能于一体&#xff0c;特别适合新手快速上手。我在实际项目中使…...

小红书无水印下载工具XHS-Downloader:3种使用模式全解析

小红书无水印下载工具XHS-Downloader&#xff1a;3种使用模式全解析 【免费下载链接】XHS-Downloader 小红书&#xff08;XiaoHongShu、RedNote&#xff09;链接提取/作品采集工具&#xff1a;提取账号发布、收藏、点赞、专辑作品链接&#xff1b;提取搜索结果作品、用户链接&a…...