在Redis主从系统中使用哨兵

news2024/11/24 22:35:53

一、什么是哨兵

        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为哨兵数量),这样使得只有大部分哨兵节点同意后才会进行故障恢复。

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

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

相关文章

学校教室巡课,为何你总是出错?

教育是社会进步和个人发展的重要基石,而教师的教学质量和专业能力直接关系着教育的成效和学生的学习成果。为了促进教师的专业发展和提高教学质量,在线巡课系统应运而生。 通过在线巡课系统,巡课者可以远程观察教师的授课过程,并提…

Hugging Face开源库accelerate详解

官网:https://huggingface.co/docs/accelerate/package_reference/accelerator Accelerate使用步骤 初始化accelerate对象accelerator Accelerator()调用prepare方法对model、dataloader、optimizer、lr_schedluer进行预处理删除掉代码中关于gpu的操作&#xff0…

使用Jmeter做性能测试的注意点

目录 一、性能测试注意点 二、性能指标分析 一、性能测试注意点 1. 用jmeter测试时使用BeanShell脚本获取随机参数值,会导致请求时间过长,TPS过低。应改为使用csv读取参数值,记录的TPS会更加准确。 注:进行性能测试时&#xff0…

EMC学习笔记(十七)PCB设计中的安规考虑

PCB设计中的安规考虑 1 概述2.安全标识2.1 对安全标示通用准则2.2 电击和能量的危险2.3 PCB上的熔断器2.4 可更换电池 3.爬电距离和电气间隙4.涂覆印制板4.1 PCB板的机械强度4.2 印制电路板的阻燃等级4.3 热循环试验与热老化试验4.4 抗电强度试验4.5 耐划痕试验 5.布线和供电 1…

C# 属性

文章目录 实例属性静态属性只读属性:内部只读属性:动态计算值的属性方式一:主动计算方式二:被动计算 快速生成属性的方法:输入propfull,按两下tab键,然后再按tab键一次修改有底纹的字段&#xf…

LeetCode141.环形链表

141.环形链表 目录 141.环形链表一、哈希表二、双指针 一、哈希表 最容易想到的方法就是遍历所有节点,每次遍历到一个节点的时候,判断该节点此前是否被访问过 我们可以使用哈希表来存储所有已经访问过的节点 每次到达一个节点,如果该节点已…

Cyber Triage 3.7 (Windows) - 数字取证和事件响应

Cyber Triage 3.7 (Windows) - 数字取证和事件响应 请访问原文链接:https://sysin.org/blog/cybertriage-3,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 唯一专门用于事件响应的数字取证工具 快速、准确和简单地…

matlab使用教程(4)—数组类型

1多维数组 MATLAB 环境中的多维数组是具有多个下标的数组。创建多维数组的一种方法是调用具有多个参数的 zeros 、 ones 、 rand 或 randn 。例如, R randn(3,4,5); 创建一个 345 数组,共包含 3*4*5 60 个正态分布的随机元素。 三维数组可表示在矩…

数据库端口操作指南

数据库端口主要功能是允许用户通过从这些数据库端口推送或拉取数据,从而将各种数据库集成到用户的数据流中。 打开知行之桥 EDI 系统,在工作流界面右侧可以看到端口选项卡下有众多端口,我们打开数据库分类,可以看到知行之桥 EDI 系…

Linux文件处理命令

目录: linux系统与shell环境准备linux常用命令之文件处理Linux系统登录与文件操作 1.linux系统与shell环境准备 Linux 系统简介: Linux 内核最初只是由芬兰人林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而…

电子病历编辑器源码

电子病历系统采取结构化与自由式录入的新模式,自由书写,轻松录入。化实现病人医疗记录(包含有首页、病程记录、检查检验结果、医嘱、手术记录、护理记录等等。)的保存、管理、传输和重现,取代手写纸张病历。不仅实现了…

如何使用Spring Boot实现分页和排序?

使用Spring Boot实现分页和排序需要借助Spring Data JPA。Spring Data JPA是Spring Data项目中的一个模块,提供了简化数据访问层的功能,包括分页和排序。 接下来我们通过一段Java代码,展示如何使用Spring Data JPA和Spring Boot实现分页和排…

电压放大器在超声波焊接中的作用以及应用

电压放大器是一种运用于电子设备中的信号放大器,主要作用是将小信号放大为更高幅度的信号。在超声波焊接中,电压放大器起到了重要的作用,它可以将从传感器采集到的微小信号放大为能够被检测和处理的合适大小的信号。 超声波焊接是现代工业生产…

畅游NLP海洋:HuggingFace的快速入门

目录 前言一、HuggingFace介绍1-1、HuggingFace的介绍1-2、安装 二、Tokenizer分词库:分词工具2-0、加载BertTokenizer:需要传入预训练模型的名字2-1、使用Tokenizer对句子编码:2-2、使用增强Tokenizer对句子编码:2-3、批量编码单…

事件传播机制和事件委托

DOM事件流 DOM事件流(event flow )存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。事件捕获(event capturing):通俗的理解就是,当鼠标点击或者触发dom事件时,浏览器会从…

数字孪生系统为何开始尝试融合GIS系统?

数字孪生是一种通过数字模型实时仿真现实世界的技术,而GIS(地理信息系统)则是用于收集、存储、处理和展示地理数据的工具。将数字孪生系统与GIS系统进行融合,可以为各行业带来诸多优势和创新。那么数字孪生系统如何将GIS系统进行融…

Java线程相关

线程优先级 在Java线程中,通过一个整型成员变量priority来控制优先级,优先级的范围从1~10,在线程构建的时候可以通过setPriority(int)方法来修改优先级,默认优先级是5,优先级高的线程分配时间片的数量要多于优先级低的…

[javascript核心-08] V8 内存管理机制及性能优化

V8 内存管理 V8 本身也是程序,它本身也会申请内存,它申请的内存称为常驻内存,而它又将内存分为堆和栈 栈内存 栈内存介绍 栈用于存放JS 中的基本类型和引用类型指针栈空间是连续的,增加删除只需要移动指针,操作速度…

自动收小麦机(牛客2023萌新)

题目链接 示例1 输入 复制 4 1 2 1 1 4 5 2 2 2 3 4 输出 复制 10 说明 在第4格放出水流后,水流会流向第3格,由于第3格高度比第4格低,所以水流继续向左流向第2格,因为平地水流只能流2格,所以到达第2格后水流停…

栈练习题(逆波兰表达式,有效括号,出入栈次序匹配,最小栈)

目录 基础知识: 中缀表达式和后缀表达式(逆波兰式) 中缀表达式转后缀表达式 后缀表达式求结果 有效括号 栈的压入,弹出序列 最小元素栈 基础知识: 栈:是一种先入后出的数据结构,它的底层是由数组实现的 入栈:push(),出栈pop(),查看栈顶元素peek() 中缀表达式和后缀表…