Redis哨兵(Sentinel)模式

news2024/11/15 23:28:07

前言

上一期实现了Redis的主从复制架构,由于主从模式在主节点宕机故障时整个Redis服务都不能再执行写操作,而无法保证Redis在整个系统中的高可用

Redis提供了Sentinel哨兵机制来解决以上问题,当哨兵服务监测到master下线或宕机,哨兵会自动选举一个slave作为新的master,然后通过发布订阅模式通知其他所有的从节点,修改配置文件,让它们切换主机

简单的说哨兵就是带有自动故障转移功能的主从架构!

哨兵架构原理

如下是单个哨兵

**原理:**哨兵是通过发送命令到各个节点,然后等待Redis服务器响应的方式,来监控运行的各个Redis节点的状态

若某一时刻由于网络延迟等原因(但实际master并未出现故障),哨兵一直未收到master节点的状态响应,而选举了新的master,导致出现了多个master,引起主从复制错乱,这种情况称为——脑裂

脑裂情况的存在实际中会使用多哨兵模式:哨兵除了监控各个Redis服务节点的状态之外,哨兵之间也会互相监控

假设master节点故障,哨兵1先检测到了这个结果,仅仅是哨兵1主观的认为master节点不可用,系统并不会马上进行failover故障转移,选举新master的过程,当一半以上的哨兵也检测到master不可用时,那么哨兵之间就会进行一次投票选举,选举一个slave作为新的master,再由一个哨兵进行failover操作。切换成功后,就会通过发布订阅模式,通知各个哨兵和slave切换master

一主二从三哨兵

搭建哨兵架构

在上一期搭建好的Redis主从复制架构的基础上,完成Redis多哨兵模式的搭建

1、在redis源码包目录下复制出sentinel.conf文件到redis安装的根目录并按如下修改

- sentinel1
	# 开启守护线程的(后台)方式启动
	daemonize  yes
	# 关闭保护模式
	protected-mode no
	# 哨兵服务默认端口是26379
	port 26379
	# 哨兵模式默认工作目录
	dir /tmp
    # 监控的redis主节点服务,mymaster是可自定义的服务名
    # 2 代表有两个或两个以上的哨兵认为master不可用的时候,才会进行故障转移操作
	sentinel monitor mymaster 192.168.31.161 8001 2
	# redis.conf中开启了requirepass,所有连接Redis服务的客户端(包括哨兵)都要提供访问密码
	sentinel auth-pass mymaster 123456
	
- sentinel2
	daemonize  yes
	protected-mode no
	port 26380
	dir /tmp
	sentinel monitor mymaster 192.168.31.161 8001 2
	sentinel auth-pass mymaster 123456
	
- sentinel3
	daemonize  yes
	protected-mode no
	port 26381
	dir /tmp
	sentinel monitor mymaster 192.168.31.161 8001 2
	sentinel auth-pass mymaster 123456

2、配置好三台机的sentinel.conf文件后,先启动三个Redis服务,再启动三个哨兵

**启动三个哨兵:**这里为了方便看日志,在sentinel.conf配置文件中可以先关闭后台启动方式daemonize no

# 在redis的bin目录下执行
./redis-sentinel ../sentinel.conf

三个哨兵启动后,可在任一个中看到检测出的主从节点,已经另外两个哨兵(互相监控)

3、验证sentinel哨兵机制

  • 使用redis-cli客户端进入任意一个哨兵服务查看sentinel信息
  • 宕掉8001的redis主节点服务,查看是否自动选举出了新的master
./redis-cli -p 26379
> info sentinel # 查看当前哨兵服务的信息


如下,手动宕掉(停掉进程)8001的redis主节点服务,当有2个哨兵发现8001的服务shutdown后,这里哨兵重新选举了8003的服务作为新的master节点,并由26381这个哨兵去做了failover故障转移,并通知另两个哨兵做了主从切换

26381哨兵中的日志:

26379和26380两个哨兵中的日志一样:

8003的服务作为新的master节点,原来为只读,此时可在8003上进行写操作

其它细节:

1)故障转移之后,三个哨兵sentinel.conf配置文件中的sentinel monitorIP和端口已自动修改为新的master节点的信息

2)原来的master节点8001已经down了,重新启动8001的redis服务它会作为一个从节点提供服务(等你回来后,你已不再是leader

后记

redis哨兵是带有自动故障转移功能的redis主从架构,但这两种模式它们都无法解决单节点的并发压力和物理上线问题

  • 这两种模式下,客户端所有的写操作(请求)都是始终在一个节点上,在并发非常大的情况下单个节点无法处理导致阻塞设置宕机(即单节点的高并发
  • redis是NoSQL,所有的写请求都落在一个节点的内存中,并且redis默认是开启持久化(AOF/RDB),对这个节点的内存和磁盘的IO要求就非常的高(单节点物理上线问题

此时就需要Redis的集群来解决以上的所有问题!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汽车标定知识整理(二):CCP报文基本命令介绍

目录 一、基本命令 CRO命令报文的基本命令表: 二、基本命令与可选命令帧格式介绍 1、CONNECT——建立连接(0x01) 2、GET_CPP_VERSION——获取CCP版本(0x1B) 3、SET_MTA——设置内存传输地址(0x02&#…

FPGA_边沿监测理解

一、简易频率计设计中为什么一定要获取下降沿?gate_a:实际闸门信号gate_a_stand:将实际闸门信号打一拍之后的信号gate_a_fall_s:下降沿标志信号cnt_clk_stand: Y值,即在实际闸门信号下,标准时钟信号的周期个数cnt_clk_stand_reg:保存Y值的寄存器核心问题…

展示企业情况的BI数据可视化大屏怎么做?

做综合展示企业情况的BI数据可视化大屏,就意味着要综合展示多个子公司或者部门的数据情况。首先要解决的就是多系统数据的整合、数据孤岛的束缚,其次才是数据分析模型构建、BI数据可视化大屏报表的制作。 1、整合多系统数据,消除数据孤岛现象…

flink大数据处理流式计算详解

flink大数据处理 文章目录flink大数据处理二、WebUI可视化界面(测试用)三、Flink部署3.1 JobManager3.2 TaskManager3.3 并行度的调整配置3.4 区分 TaskSolt和parallelism并行度配置四、Source Operator(资源算子)五、Sink Operator(输出算子)六、Flink滑…

系统检测维护工具Wsycheck使用(18)

实验目的 (1)学习Wsycheck的基本功能; (2)掌握Wsycheck的基本使用方法; 预备知识 windows操作系统的基本知识如:进程、网络、服务和文件等的了解。 Wsycheck是一款强大的系统检测维护工具,进程和…

js求解《初级算法》19.删除链表的倒数第N个结点

一、题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 输入:head [1,2,3,4,5], n 2 输出:[1,2,3,5] 二、思路 用虚拟头结点+双指针的方法解决该题,我们知道题目要求我们返回的是…

SpringMVC源码:参数解析、方法调用与返回值处理

参考资料: 《SpringMVC源码解析系列》 《SpringMVC源码分析》 《Spring MVC源码》 写在开头:本文为个人学习笔记,内容比较随意,夹杂个人理解,如有错误,欢迎指正。 前文: 《SpringMVC源码&a…

并发包中的ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别?

第20讲 | 并发包中的ConcurrentLinkedQueue和LinkedBlockingQueue有什么区别? 在上一讲中,我分析了 Java 并发包中的部分内容,今天我来介绍一下线程安全队列。Java 标准库提供了非常多的线程安全队列,很容易混淆。 今天我要问你的…

谷歌浏览器和火狐浏览器永久禁用缓存【一劳永逸的解决方式】

目录 前言 谷歌浏览器 方式一 方式二 火狐浏览器 前言 缓存对于开发人员来说异常的痛苦,很多莫名其妙的bug就是由缓存导致的,但当我们在网上查找禁用缓存的方式时,找到的方式大多数都是在开发者工具的面板中勾选禁用缓存的选项,但这种方式有个弊端就是需要一直打开这个…

软件测试工程师没有碰到算我输-2023最全的接口测试面试题及参考答案

接口测试最近几年被炒的火热了,越来越多的测试同行意识到接口测试的重要性。接口测试为什么会如此重要呢? 主要是平常的功能点点点,大家水平都一样,是个人都能点,面试时候如果问你平常在公司怎么测试的,你除…

【pytorch】使用mixup技术扩充数据集进行训练

目录1.mixup技术简介2.pytorch实现代码,以图片分类为例1.mixup技术简介 mixup是一种数据增强技术,它可以通过将多组不同数据集的样本进行线性组合,生成新的样本,从而扩充数据集。mixup的核心原理是将两个不同的图片按照一定的比例…

【嵌入式开发】iperf

iperf一级目录用法help文档iperf参数功能iperf测试实例测试网口上行速率测试网口下行速率perf 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失。一…

小程序项目在hbuilder里面给它打包成app

小程序项目临时有些登录需求,需要把(小程序某些功能通过条件编译让它显示到app上)小程序打包成app的话就必须需要一个打包的证书,证书的话就要去重新生成,苹果电脑可以去自动生成证书,平时是用windows进行开…

Java的四种引用强软弱虚及其使用场景

一.强引用 回收时机:在内存不足时也不会被回收。 使用方式:String str new String("str"); 使用场景:是平常用的最多的引用 二.软引用 回收时机: 在内存不足时会被回收。 使用方式:SoftRefere…

阿里云全量物理备份.xb备份文件本地恢复

一、下载备份文件并上传到本地 二、安装转码软件 1、yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm2、yum install percona-xtrabackup-24三、解包并解压 1、先解包 cat test1_qp.xb | xbstream -x -v -C /home/mysql/data 2、然后解压&…

【历史上的今天】3 月 6 日:Unix 版权争夺战;豆瓣网上线;谷歌推出了 Google Play

整理 | 王启隆 透过「历史上的今天」,从过去看未来,从现在亦可以改变未来。 今天是 2023 年 3 月 6 日,在 1475 年的今天,大艺术家米开朗琪罗诞辰。米开朗琪罗是意大利文艺复兴时期的雕塑家、画家,他活到 89 岁&#…

Web服务器基础介绍与Apache的简单介绍(LAMP架构与搭建论坛)

目录 Web服务器基础介绍 一.HTML是什么? 二.静态网页和动态网页 1.静态网页 2.动态网页 3.动态网页语言 三.HTTP协议 1.HTTP协议是什么? 2.HTTP方法 3.HTTP状态码 4.HTTP请求流程分析 4.1 请求报文 4.2 响应报文 Apache的简单介绍 一.Apa…

如何找回回收站删除的视频?这三种方法可以试试

在使用电脑过程中,我们可能会误删重要的文件,特别是影音文件。在这样的情况下,我们可以从计算机的回收站中找回已经被删除的视频。但是有时候,我们可能会不小心清空回收站,这时候就需要一些技巧来恢复回收站删除的视频…

走进JVM

JVM的位置 在操作系统之上,可以想象成一个软件,Java程序都运行在上面 JVM结构图 JVM调优的位置 99%的调优在堆中,极少数在方法区中 很多第三方插件都是在执行引擎那块地方做出修改而来,比如Lombook在程序运行时动态生成get/s…

VSYNC研究

Vsync信号是SurfaceFlinger进程中核心的一块逻辑,我们主要从以下几个方面着手讲解。软件Vsync是怎么实现的,它是如何保持有效性的?systrace中看到的VSYNC信号如何解读,这些脉冲信号是在哪里打印的?为什么VSYNC-sf / VS…