Redis 7.x 系列【23】哨兵模式

news2024/12/22 19:27:58

有道无术,术尚可求,有术无道,止于术。

本系列Redis 版本 7.2.5

源码地址:https://gitee.com/pearl-organization/study-redis-demo

文章目录

    • 1. 概述
    • 2. 工作原理
      • 2.1 监控
      • 2.2 标记下线
      • 2.3 哨兵领袖
      • 2.4 新的主节点
      • 2.5 通知更新
    • 3. 搭建演示
      • 3.1 安装
      • 3.2 修改配置
      • 3.3 启动
      • 3.4 测试

1. 概述

官方文档

主从复制模式常用于数据备份和读写分离,当主节点故障时,需要人工干预来处理主节点故障和从节点的升级,在实际应用中,可用性并不高。

Redis 提供了基于哨兵(Sentinel)的高可用解决方案,Sentinel是一个运行在特殊模式下的 Redis 服务端,本身不存储任何数据,而是作为主从复制模式下的监控和管理工具。当主节点出现故障时,可以提供自动故障转移功能,从而保证 Redis 服务的连续性和稳定性。

核心功能:

  • 监控:持续检查主节点和从节点实例是否按预期工作
  • 通知:可以通过 API 通知系统管理员或其他计算机程序,被监控的Redis实例出现问题
  • 自动故障转移:如果主节点未按预期工作,启动故障转移过程,将其中一个从节点被提升为主节点,其他的从节点重新配置使用新的主节点,并且通知在连接时使用的新地址
  • 配置中心:客户端通过连接哨兵来获得当前Redis服务的主节点地址

2. 工作原理

2.1 监控

Redis Sentinel 在启动完成后,首先需要连接到到主从节点进行监控:

在这里插入图片描述

Sentinel 配置文件中,首先需要配置主节点的地址,首次上线时,会根据该地址连接到主节点,并定期(通常是每1秒)向主节点发送 PING 命令来检查其状态。

Sentinel 连接到主节点后,还会通过 INFO 命令获取所有从节点的地址信息,建立和从节点的连接,并同样采用心跳机制进行状态检查。

多个 Sentinel 节点之间,也需要进行通信,会在主节点中建立一个 __sentinel__:hello 专用通道,利用发布订阅机制进行数据交互。可以使用可视化工具查看:

在这里插入图片描述

2.2 标记下线

当某个 Sentinel 节点发送 PING 命令后,主节点在规定的时间内没有响应,则会标记为主观下线Subjectively Down)状态,其他 Sentinel 节点同样也会检测到主节点下线,并标记为主观下线。当主节点被足够数量的 Sentinel 节点都标记为 S_DOWN ,则标记为客观下线Objectively Down)状态。

sentinel monitor 配置项中,可以设置主节点被多少个 Sentinel 标记为 S_DOWN 时,则标记为O_Down

sentinel monitor mymaster 127.0.0.1 6379 2

主观下线客观下线,需要多个哨兵达成一致意见,才能认为主节点客观上已经宕掉,这一步骤是为了防止单个 Sentinel 节点的误判。

2.3 哨兵领袖

当主节点被判定为客观下线后,哨兵节点之间会进行投票选举,以选出哨兵领袖(Leader Sentinel),负责后续的故障转移工作。

整个选举过程基于 Raft 算法,当半数以上的哨兵投票通过后就认定该哨兵为哨兵领袖,所以一般将哨兵数量部署为单数,避免脑裂

2.4 新的主节点

Leader Sentinel 会在从节点中,选择一个新的主节点,选择的标准一般有:

  • 响应速度,慢的就会被优先过滤掉,说明健壮性不够
  • 节点配置的优先级,优先级越高,越容易被选中
  • 数据偏移量,偏移量越大,说明数据复制的完整度越高
  • 节点创建时间,越早创建的节点,会优先选择( 根据RunId 排序)

选出新的主节点后,Leader Sentinel 会调用 REPLICAOF 命令将选出的新节点升级为主节点,其他的从节点更新配置信息,并连接到新的主节点,并确保和新主节点之间的数据同步。

2.5 通知更新

Leader Sentinel 通过发布订阅通知其他哨兵节点,还可以通过 API 或者脚本发送通知,报告集群的状态变化和故障情况。

3. 搭建演示

数据节点直接使用之前搭建的一主两从环境,在此基础上搭建三个哨兵节点,简要部署架构图如下:

在这里插入图片描述
所有节点网络访问地址如下 :

  • 主节点:192.168.56.101:6379
  • 从节点一:192.168.56.102:6379
  • 从节点二:192.168.56.103:6379
  • 哨兵节点一:192.168.56.104:26379
  • 哨兵节点二:192.168.56.105:26379
  • 哨兵节点三:192.168.56.106:26379

3.1 安装

Redis 7.x 系列【2】单机部署
Redis 7.x 系列【21】主从复制

Redis Sentinel也是一个特殊的 Redis 服务端,安装方法和普通的 Redis 一样,参考上面的文档,在三台哨兵服务器上安装即可。

3.2 修改配置

接下来需要修改所有哨兵节点的配置文件,首先从源码中将 sentinel.conf 配置文件复制到配置目录:

[root@localhost /]# mkdir /etc/redis
[root@localhost /]# cp ~/redis-7.2.5/sentinel.conf /etc/redis/
[root@localhost bin]# vim sentinel.conf

三个哨兵节点都需要修改配置,首先允许后台启动:

daemonize yes

配置当前监控的主节点的名称、IP、端口,以及进行故障转移的最少的投票数:

sentinel monitor mymaster 192.168.56.101 6379 2

如果主从节点设置了密码,还需要配置主节点名称、认证密码 (主从密码需要保持一致):

sentinel auth-pass mymaster 123456

可以配置 Sentinel 节点的密码(其他哨兵节点的密码需要保持一致):

requirepass entinel123456

3.3 启动

这里直接使用命令启动,先启动所有主从复制节点,再启动所有哨兵节点:

[root@localhost bin]# cd /usr/local/bin
[root@localhost bin]# ./redis-sentinel /etc/redis/sentinel.conf

3.4 测试

使用 ./redis-cli 连接任一哨兵节点:

[root@localhost bin]# ./redis-cli -p 26379
127.0.0.1:26379> auth sentinel123456
OK

输入 info sentinel 查看所有哨兵信息,可以看到当前连接的主节点地址为 192.168.56.101:6379 ,以及从节点和哨兵节点的数量:

127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.56.101:6379,slaves=2,sentinels=3

在主节点服务器上,直接 kill 掉主节点进程:

[root@localhost bin]# ps -ef | grep redis
root     16305     1  0 01:05 ?        00:00:29 ./redis-server *:6379
root     19902 19252  0 11:18 pts/2    00:00:00 grep --color=auto redis
[root@localhost bin]# kill 16305

再次执行 info sentinel 命令,可以看到主节点地址变成了 192.168.56.102:6379 ,自动进行了故障转移,并选举了新的主节点(当之前下线的主节点重新连接后,会降级为从节点):

127.0.0.1:26379> info sentinel
# Sentinel
sentinel_masters:1
sentinel_tilt:0
sentinel_tilt_since_seconds:-1
sentinel_running_scripts:0
sentinel_scripts_queue_length:0
sentinel_simulate_failure_flags:0
master0:name=mymaster,status=ok,address=192.168.56.102:6379,slaves=3,sentinels=3

查看 sentinel.conf 配置文件,可以看到自动更新了主节点:

在这里插入图片描述

还会自动更新从节点 redis.conf 配置文件:

在这里插入图片描述

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

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

相关文章

jvm 07 GC算法,内存池

01 垃圾判断算法 1.1引用计数算法 最简单的垃圾判断算法。在对象中添加一个属性用于标记对象被引用的次数,每多一个其他对象引用,计数1, 当引用失效时,计数-1,如果计数0,表示没有其他对象引用,…

【YOLO系列】快速部署YOLOv5(Windows)

引言 在计算机视觉领域,目标检测是至关重要的任务之一,它涉及识别图像或视频中的对象,并将其分类和定位。近年来,**YOLO(You Only Look Once)**算法因其速度与精度的平衡而变得非常流行。在这篇博文中&…

【触摸屏】【红十字会学习系统】功能模块:视频 + AI拍照合成

项目背景 提升公众急救能力:确保每个人都能在紧急情况下采取正确的急救措施,减少伤害,挽救生命。培养人道主义价值观:通过教育和培训,传播红十字精神,促进社会对弱势群体的关注与支持。建立社区响应网络&a…

怎么减少pdf格式的内存,怎么减少pdf文件大小

在数字化时代,pdf文件因其格式稳定、兼容性强等特点,成为工作与学习中的常用文档格式。然而,较大的pdf文件往往给存储和传输带来不便。本文将为你详细介绍如何巧妙减小pdf文件内存,助你轻松解决文件传输和存储的烦恼。 让我们来看…

Arduino PID整定

Arduino PID整定 Tuning an Arduino PID Introduction to Tuning an Arduino PID 例如,我们可能想把一箱水加热到华氏 100 度。 我们需要能够在不同的条件下实现这一目标,例如房间的环境(周围)温度。 此外,我们可能会…

CoreIDRAW标注尺寸箭头怎么修改 CoreIDRAW标注尺寸数字怎么修改

*CorelDraw:数字创意的无限可能** 在数字艺术与设计领域,CorelDraw无疑是一款备受推崇的图形设计软件。它不仅为设计师、艺术家和创意工作者提供了强大的工具集,还以其直观易用的界面和卓越的性能赢得了广泛的赞誉。本文将深入探讨CorelDraw…

【Playwright+Python】系列之元素定位

一、常见元素定位 定位器是 Playwright 自动等待和重试能力的核心部分。简而言之,定位器代表了一种随时在页面上查找元素的方法,以下是常用的内置定位器。 1、按角色定位 按显式和隐式可访问性属性进行定位语法:page.get_by_role&#xff0…

力扣经典题目之->删除有序数组中的重复项讲解 的讲解与实现

一:题目 二:思路讲解 第一步:创建两个下标,一个是第一个元素的(start0),一个是第二个元素的(end1) 第二步: a:end移动,直到遇到不等…

Dify中Jieba类的create()方法实现过程

本文主要介绍Dify中Jieba类的create()方法执行过程,重点是段(segment)的关键词的生成。 一.create方法流程概述 整个create方法的目的是为了处理一批文本,提取它们的关键词,并更新关键词表,以便于后续的关…

Spark 实现自定义加密

文章目录 Spark 实现自定义加密一、建立加密和解密的自定义函数二、在 Spark 环境下导入对象实现的方法,并在 SparkSession 中注册 UDF 函数三、在SparkSQL中调用函数 Spark 实现自定义加密 一、建立加密和解密的自定义函数 import java.nio.charset.{StandardCha…

STM32+三色LED智能调光系统源程序 易安卓APP 原理图

资料下载地址:STM32三色LED智能调光系统源程序 易安卓APP 原理图 三色LED手机智能调光系统概述: 利用开发的智能手机软件,对照明三色LED进行智能调光。包含的功能有,支持多手机同时连接服务端,互动调光。支持关…

【数据结构】顺序表的应用

目录 一.引言 二.顺序表概念 三.顺序表的实现 1.定义顺序表 2.顺序表初始化 ​编辑 3.检查空间,如果满了,进行增容 4.顺序表尾插 5.顺序表尾删 6.顺序表头插 7.顺序表头删 ​编辑 8.顺序表查找 9.顺序表在pos位置插入x 10.顺序表删…

深入探讨:CPU问题的深度分析与调优

引言 你是否曾经遇到过这样的情况:系统运行突然变慢,用户抱怨不断,检查后发现CPU使用率居高不下?这时候,你会如何解决?本文将详细解析CPU问题的分析与调优方法,帮助你在面对类似问题时游刃有余。 案例分析:一次CPU性能瓶颈的解决过程 某知名互联网公司在一次促销活动…

Dubbo基础知识

1、什么是 Dubbo ? Dubbo是基于Java的高性能轻量级的RPC分布式服务框架,致力于提供透明化的RPC远程服务调用方案,以及SOA服务治理方案。现已成为Apache 基金会孵化项目。 2、为什么要使用Dubbo? 背景: 随着互联网的快速发展,Web应…

JAVA毕业设计147—基于Java+Springboot的手机维修管理系统(源代码+数据库)

毕设所有选题: https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringboot的手机维修管理系统(源代码数据库)147 一、系统介绍 本项目分为用户、管理员、维修员三种角色 1、用户: 注册、登录、新闻公告、售后申请、申请列…

使用Samba或NFS实现文件共享

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 一、SAMBA文件共享服务 1987年,微软公司和英特尔公司共同定制了SMB(Server Messages Block)服务器消息块协议&am…

板级调试小助手(2)ZYNQ自定义IP核构建属于自己的DDS外设

一、前言 在上期文章中讲述了小助手的系统结构和原理。在PYNQ的框架开发中,我们一般可以将PL端当做PS端的一个外设,通过读写寄存器的方式来操作外设的功能,就类似于在开发ARM和DSP中操作外设一样,不同时的是,我们可以通…

关于前端数据库可视化库的选择,vue3+antd+g2plot录课计划

之前:antdv 现在:g2plot https://g2plot.antv.antgroup.com/manual/introduction 录课内容:快速入门 图表示例: 选择使用比较广泛的示例类型,录课顺序如下: 1、折线图2、面积图3、柱形图4、条形图5、饼…

[Qt] Qt Creator中,新建QT文件时选择界面模版下的各选项

在Qt Creator中,新建文件时选择界面模版下的各选项具有特定的意义,这些选项主要帮助开发者根据项目需求快速生成不同类型的文件。以下是对这些选项的详细解释: 0. Qt Item Model 意义:列表模型是Qt中用于表示和操作数据的强大抽…

Ubuntu下载安装chrome浏览器

方法一:wget下载并安装 1、创建文件夹存安装包 cd /root/Downloads mkdir chrome 2、下载安装包到文件夹内 wget -c https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb -P /root/Downloads/chrome 3、安装 cd chrome sudo dpkg -i go…