在Redis主从系统中使用哨兵

一、什么是哨兵

        Redis的哨兵(Sentinel)是Redis分布式系统中的一种特殊角色,用于监控和管理Redis主从复制架构中的主节点(master)和从节点(slave)。

        哨兵的主要功能是确保Redis系统的高可用性。它通过持续监控Redis节点的状态,并在发现节点故障或下线时自动执行故障转移操作,将从节点提升为新的主节点,以确保服务的连续性。当原始的主节点恢复正常时,哨兵还可以将其重新加入到集群中作为从节点。

哨兵的工作模式如下:

  1. 监控:每个哨兵定期向Redis节点发送心跳检查,以确保节点的健康状态。
  2. 故障检测:如果一个哨兵在一段时间内无法与主节点通信,它将判断主节点宕机,并开始选举新的主节点。
  3. 故障转移:哨兵会选举一个从节点作为新的主节点,并通过发送命令通知其他节点更新配置。
  4. 通知:哨兵会通知客户端Redis节点的变化,使客户端能够连接到新的主节点。
  5. 自动故障恢复:当原主节点恢复时,哨兵会将其重新加入集群作为从节点,保持主从复制的正常工作。

        通过使用哨兵,Redis可以在主节点故障时自动实现故障转移,提供高可用性和容错能力,同时减少了手动干预的需求。哨兵可以监控多个Redis节点,并支持多个哨兵组成的集群,以提供更高的可靠性和扩展性。

二、使用哨兵

(1)搭建主从复制服务

启动一个一主二从的redis系统,启动参考:Linux下使用命令行和配置文件两种方式实现主从复制-CSDN博客

主数据库启动在6381端口,从数据库启动在6382 6383端口。

查看主从复制配置信息:

 (2)配置哨兵

建立一个配置文件,如 sentinel.conf 内容如下:

#zy-master表示要监控的主数据库名字,可以自定义
sentinel monitor zy-master 127.0.0.1 6381 1
port 26380

(3)启动哨兵

redis-sentinel sentinel.conf

启动后,哨兵会输出如下内容:

 (4)验证哨兵的作用(停止6381节点)

杀死主库的服务,即关闭运行在6381端口的实例

等待指定事件后(可以配置,默认30秒),哨兵会输出如下内容:

 

 到 6383 的实例中查看,可以看到已经成为了主节点:

 (5)重新启动6381节点

 再次查看6383的主从复制信息:

 三、原理

1.下线检测

哨兵和主数据库的连接建立完成后,哨兵会定时执行下面3个操作:

  1. 心跳检查(Heartbeat Checks):哨兵会定期向主数据库发送心跳检查,以确保主数据库的健康状态。这样可以及时发现主数据库是否仍然正常工作。

  2. 主观下线检测(Subjective Down Detection):如果哨兵在一定时间内无法与主数据库进行通信,它会认为主数据库发生了故障,并将其标记为主观下线(Subjectively Down)状态。哨兵会将这一信息传播给其他哨兵和相关节点。

  3. 客观下线检测(Objective Down Detection):当多个哨兵都将主数据库标记为主观下线状态后,它们将进行投票并达成共识,确认主数据库的客观下线(Objectively Down)状态。这时哨兵会执行故障转移操作,选择一个从数据库提升为新的主数据库。

sentinel monitor zy-master 127.0.0.1 6381 1

 这里的最后一个参数 1 就是最低通过票数

 如果配置成 2 ,就表示至少要有两个Sentinel节点认为该主数据库主观下线时,当前哨兵节点才会认为该主数据库客观下线。需要进行故障恢复。但是故障恢复需要由一个领头的哨兵来完成,这样可以保证同一时间只有一个哨兵节点来进行故障恢复。

2. 哨兵的部署

        哨兵以独立进程的方式对一个主从系统进行监控,监控的效果好坏取决于哨兵的视角是否具有代表性,如果一个主从系统配置的哨兵较少,哨兵对整个系统的判断的可靠性就会降低。极端情况下,当只有一个哨兵时,哨兵本身就可能会发生单点故障。整体来讲,相对稳妥的哨兵部署方案是使得哨兵的视角尽可能地与每一个节点的视角一致,即:

(1)为每个节点(无论是主库还是从库)都部署一个哨兵

(2)使每个哨兵与其对应的节点的网络环境相同或相近。

同时设置quorum(最低通过票数)的值为 N/2 + 1 (N为哨兵数量),这样使得只有大部分哨兵节点同意后才会进行故障恢复。

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

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

相关文章

vscode debug的方式

在.vscode文件夹下建立launch.json 例子1:调试python 来自 https://github.com/chunleili/tiPBD/tree/amg {"version": "0.2.0","configurations": [{"name": "hpbd 5 5","type": "python&quo…

26.JavaWeb-SpringSecurity安全框架

1.SpringSecurity安全框架 Spring Security是一个功能强大且灵活的安全框架,它专注于为Java应用程序提供身份验证(Authentication)、授权(Authorization)和其他安全功能。Spring Security可以轻松地集成到Spring框架中…

极值理论 EVT、POT超阈值、GARCH 模型分析股票指数VaR、条件CVaR:多元化投资组合预测风险测度分析...

全文链接:http://tecdat.cn/?p24182 本文用 R 编程语言极值理论 (EVT) 以确定 10 只股票指数的风险价值(和条件 VaR)(点击文末“阅读原文”获取完整代码数据)。 使用 Anderson-Darling 检验对 10 只股票的组合数据进行…

uniapp 小程序 联想地址搜索

效果图&#xff1a; qqmap-wx-jssdk.js下载 <template><view class"items"><view class"items-text">地址&#xff08;必填&#xff09;</view><input type"text" placeholder"搜索地址" maxlength&quo…

解决Missing cookie ‘JssionId‘ for method parameter of type String问题

错误描述如下所示&#xff1a; 上述错误是我在使用CookieValue注解&#xff0c;获取cookieID时出现的&#xff0c;错误原因是由于**CookieValue注解注解中的value值和浏览器中的cookie的jssionID不一致所导致的** 如下所示为浏览器中的CookieID的参数名 而我在注解中写的如下图…

自动化测试之数据驱动与关键字驱动

目录 1.录制/回放的神话 2.数据驱动的自动化测试框架 3.关键字驱动的自动化测试 初次接触自动化测试时&#xff0c;对数据驱动和关键字驱动不甚理解&#xff0c;觉得有点故弄玄须&#xff0c;不就是参数和函数其嘛&#xff01;其实其也体现了测试所不同与开发的一些特点&…

基于遗传算法的新能源电动汽车充电桩与路径选择MATLAB程序

主要内容&#xff1a; 根据城市间的距离&#xff0c;规划新能源汽车的行驶路径。要求行驶距离最短。 部分代码&#xff1a; %% 加载数据 %%遗传参数 load zby;%个城市坐标位置 NIND50; %种群大小 MAXGEN200; Pc0.9; %交叉概率 Pm0.2; %变异概率 GGAP0.…

postman 自动化测试

postman 自动化测试 0、写在前面1、变量引用1.1、如何在请求体中引用变量 2、变量设置2.1、测试需求场景描述&#xff1a;2.2、postman实战2.2.1、全局token的处理2.2.2、接口1的处理2.2.3、接口2的处理2.2.4、接口3的处理 3、测试结果展示 0、写在前面 在有些时候看官方文档 …

聚焦型光场相机基于立体视差的深度估计原理

聚焦型光场相机可以看作是主透镜将物面成了一个放大或者缩小的虚像&#xff0c;然后每个微透镜阵列对这个经过放大或者缩小的虚像进行二次成像后投影在了ccd平面&#xff0c;其中二次成像的过程可以比拟为一个虚拟阵列相机&#xff0c;利用MLA和主透镜的相关参数就可以以立体视…

Android系统开发-入门篇

参见&#xff1a;[视频教程] 写给应用开发的 Android Framework 教程——玩转 AOSP 篇之 Android 系统开发工具推荐 - 掘金 前置条件&#xff1a; android系统源码位于 linux 服务器&#xff0c;ssh 地址假如为&#xff1a;test172.1.10.2本机为windows 1、本机&#xff1a; 下…

访问Liunx文件系统

访问Liunx文件系统 识别文件系统和设备 存储管理概念 Linux服务器上文件按文件系统层次结构访问。该文件系统层次结构测试由系统可用的存储设备所提供的文件系统组装而来。每个文件系统都是一个已格式化的存储设备&#xff0c;可用于存储文件。 文件系统和挂载点 要让文件系…

【mysql】—— 数据库的操作

序言&#xff1a; 在上篇文章我已经对数据库进行了详细的介绍&#xff0c;接下来我们就将上手学习操作的细节了。本篇文章便带领大家去学习有关库操作的基本知识&#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;库的操作 1、 创建数据库 2、字符集和…

HTML input text 常用事件

前言 用于记录开发中常用到的&#xff0c;快捷开发 简单实例 <input type"text" name"noSecretKeyJson" maxlength"200" />常用事件 oninput &#xff08;在用户输入时触发&#xff09;及案例 案例一&#xff1a;限制只允许输入数字…

C#基础--反射

反射 一、为什么学习反射 因为反射真的是无处不在&#xff0c;ORM、MVC、IOC、AOP、Attribute等等都会使用到反射。反射是程序员的快乐 二、什么是反射 Ilspy&#xff1a;逆向工程&#xff0c;可以吧DLL/Exe文件反编译回来 DLL/EXE 文件下包含Metadata和IL&#xff0c;IL是对…

跨文化合作:如何解决海外网红营销中的文化差异?

随着社交媒体的快速发展&#xff0c;海外网红营销已成为许多品牌和企业获取国际市场的有效方式。然而&#xff0c;由于不同国家和地区存在着独特的文化差异&#xff0c;如语言、价值观、习俗等&#xff0c;这也给品牌进行海外网红营销带来了一系列挑战。本文Nox聚星将和大家探讨…

WPF 自定义控件完成库容表盘显示效果

先看一下显示效果&#xff1a; 需要注意的地方有以下几点&#xff1a; 表盘的刻度分部&#xff0c;长刻度和短刻度显示。在数值80W时&#xff0c;需要更改刻度盘的颜色渐变。在数值80W时&#xff0c;更改库容总数背景的显示&#xff0c;也是颜色渐变。刻度盘控件属性定义&…

JVM中的堆和栈到底存储了什么

JVM数据区 先上一张Java虚拟机运行时数据区中堆、栈以及方法区存储数据的概要图&#xff0c;如下所示&#xff1a; 然后我们来具体解析一下堆和栈 堆 堆是存储时的单位&#xff0c;对于绝大多数应用来说&#xff0c;这块区域是 JVM 所管理的内存中最大的一块。线程共享&#…

JavaScript XHR、Fetch

1 前端数据请求方式 2 Http协议的解析 3 XHR的基本用法 4 XHR的进阶和封装 5 Fetch的使用详解 6 前端文件上传流程 早期的页面都是后端做好&#xff0c;浏览器直接拿到页面展示的&#xff0c;用到的是jsp、asp、php等等的语言。 这个叫做服务器端渲染SSR。 这里后端向前端…

[sqoop]导入数据

一、覆盖导入 例如维度表&#xff0c;每次导入的数据需要覆盖上次导入的数据。 hive-overwrite参数&#xff1a;实现覆盖导入 hive-import参数&#xff1a;表示向hive表导入 hive-table参数&#xff1a;指定目标hive库表 sqoop import \ --connect jdbc:mysql://hadoop1:3…

介绍性能压力测试的重要性

在当今数字化时代&#xff0c;软件和应用程序的性能对于用户体验和业务成功至关重要。为了确保系统在面临高负载和压力时能够正常运行&#xff0c;性能压力测试成为一项不可或缺的活动。本文将介绍性能压力测试的重要性。 性能压力测试是一种通过模拟实际场景中的负荷和用户访问…