Redis7【⑦ Redis哨兵(sentinel)】

Redis哨兵

Redis Sentinel(哨兵)是 Redis 的高可用性解决方案之一,它可以用于监控和管理 Redis 主从复制集群,并在主节点发生故障时自动将从节点升级为新的主节点,从而保证系统的高可用性和可靠性。

Redis Sentinel 的主要功能如下:

  1. 监控 Redis 主节点和从节点的状态,包括节点的可用性、延迟等情况。
  2. 自动发现和识别 Redis 主从复制集群的拓扑结构。
  3. 在主节点发生故障时,自动将从节点升级为新的主节点,并将其他从节点重新连接到新的主节点。
  4. 支持 Redis 集群的自动故障转移、故障恢复和配置管理等功能。
  5. 提供监控和管理 Redis 集群的 API 和命令行工具。


在这里插入图片描述

1. 环境配置

(1)配置三个哨兵实例

三个哨兵实例需要三台虚拟机,考虑到机器性能有限,这里将三个哨兵实例配置到一台虚拟机上(这里配置到主节点的那台虚拟机),配置三份不同的哨兵配置文件即可:sentinel26379.conf、sentinel26380.conf、sentinel26381.conf,将它们存放到/myredis下。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ec26k4md-1687955266273)(img/2023-04-15_030538.png)]

(2)修改哨兵配置文件的内容

  • 基础配置
    在这里插入图片描述

    • 关闭保护模式:protected-mode no
    • 开启后台运行:daemonize yes
    • 配置哨兵服务端口号:port 26379 (三个文件要不一样)
    • 日志文件路径:logfile "/myredis/sentinel26379.log"
    • pid文件路径:pidfile /var/run/redis-sentinel26379.pid
    • 工作目录:dir /myredis
  • 主要配置

    • 设置要监控的master:master monitor <master-name> <ip> <redis-port> <quorum>

      master-name:给master取的名字。

      quorum:同意故障迁移的法定票数。即表示有几个哨兵认可主观下线。达到一定票数后认定为客观下线(宕机、不可用)

    • 配置连接master服务的密码:sentinel-auth-pass <master-name> <password>

  • 其他配置(使用默认即可,重点是主观下线)

    • sentinel down-after-milliseconds <master-name> <milliseconds>

      指定多少毫秒之后,主节点没有应答哨兵,此时哨兵主观上认为主节点下线 — 主观下线

    • sentinel parallel-syncs <master-name> <nums>

      表示允许并行同步的slave个数,当master挂了后,哨兵会选出新的master,剩余的slave会向新的master发起同步数据

    • sentinel failover-timeout <master-name> <milliseconds>

      故障转移的超时时间,进行故障转移时,如果超过设置的毫秒,表示故障转移失败,相当于选举成功,但是数据转移失败了

    • sentinel notification-script <master-name> <script-path>

      配置当某一事件发生时所需要执行的脚本

    • sentinel client-reconfig-script <master-name> <script-path>

      客户端重新配置主节点参数脚本

去除配置文件的注释,最终配置文件sentinel26379.conf的内容如下,sentinel26380.conf和sentinel26381.conf稍作修改即可

bind 0.0.0.0
daemonize yes
protected-mode no
port 26379
logfile "/myredis/sentinel26379.log"
pidfile /var/run/redis-sentinel26379.pid
dir /myredis
sentinel monitor mymaster 192.168.101.110 6379 2
sentinel auth-pass mymaster 123456

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aL2cW66P-1687955266274)(img/2023-04-15_035110.png)]

(3)配置主节点的访问密码

主节点宕机后,哨兵会选举一个从节点作为主节点,而之前的主节点会变成从节点,所以需要配置访问新主节点的密码。

这里所有节点都设置为同一密码,方便操作。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YYxVO1h5-1687955266275)(img/2023-04-15_040008.png)]

2. 实操演示

2.1 启动三个redis实例

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FaNL8fJL-1687955266275)(img/2023-04-15_041926.png)]

2.2 启动三个哨兵实例

这里在redis(6379)那台机器上启动三个哨兵实例。

启动哨兵服务有两种方式:

  • 使用redis-sentinel程序启动:redis-sentinel sentinel.conf
  • 使用redis-server程序启动:redis-server sentinel.conf --sentinel

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9xlzgWHZ-1687955266275)(img/2023-04-15_043016.png)]

lsof -i|grep redis 可以看到哨兵之间也是有通信的

2.3 测试主从复制

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DdqMFZ0g-1687955266276)(img/2023-04-15_044818.png)]

2.4 查看sentinel日志文件

工作中排查问题肯定是要去查日志文件,这里可以发现,每个哨兵都会在日志把主机和从机记录,也会把所有其他哨兵一并记录,日志中写明他们保存在 disk,也就是磁盘里,那么我们要去哪里找到他们呢?
其实这里是重写了conf的配置文件,把相应的关系和信息都写入配置文件里了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rLqEPtBC-1687955266276)(img/2023-04-15_045331.png)]

下面查看sentinel26379.log文件的主要内容:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gJdCbHD4-1687955266276)(img/2023-04-15_045716.png)]
了解 Broken pipe
在这里插入图片描述

新配置保存到磁盘的意思就是新配置信息写入到sentinel.conf文件中,下面查看sentinel26379.conf文件新增的内容:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NzSsauLI-1687955266277)(img/2023-04-15_065615.png)]

2.5 模拟master节点宕机

关闭master节点后,哨兵会重新选举一个从节点作为新的主节点。

首先三个哨兵实例会投票选举一个哨兵实例作为领导者,然后由该哨兵实例来选举一个新的主节点并且进行故障迁移(failover)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cb3tik0Z-1687955266277)(img/2023-04-15_055113.png)]

  • 查看sentinel26379.log日志文件了解哨兵选举的过程:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s13RKcNI-1687955266277)(img/2023-04-15_052907.png)]

  • 查看redis(6379)实例的redis.conf文件哨兵leader新增的内容:

    redis(6379)实例由之前的主节点变成从节点

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dEbWv15C-1687955266278)(img/2023-04-15_062500.png)]

  • 查看redis1(6380)实例的redis.conf文件哨兵leader修改的内容:

    redis1(6380)实例由之前的从节点变成主节点

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m2edawX3-1687955266278)(img/image-20230415063454674.png)]

  • 查看redis2(6381)实例的redis.conf文件哨兵leader修改的内容:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4EKYRvr8-1687955266278)(img/2023-04-15_064629.png)]


3. 哨兵选举的流程

  1. 哨兵检测到主节点不可用:当哨兵检测到主节点不可用时,会将主节点标记为下线状态(sdown),并向其他哨兵发送通知,通知其他哨兵主节点已经下线,其他哨兵也标记主节点下线后(odown),确定主节点不可用。

    主观下线(sdown):指的是单个Sentinel实例对服务器做出的下线判断,即单个sentinel认为某个服务下线(有可能是接收不到订阅,之间的网络不通等等原因)。主观下线就是说如果服务器在sentinel down-after-milliseconds给定的毫秒数之内没有回应PING命令或者返回一个错误消息, 那么这个Sentinel会主观的(单方面的)认为这个master不可以用了。默认30秒。
    在这里插入图片描述

    客观下线(odown):客观下线需要多个哨兵达成一致意见才能认为主节点真正不可用。
    quorum(票数)这个参数是进行客观下线的一个依据。法定人数/法定票数(quorum)。
    在这里插入图片描述

  2. 哨兵投票选举哨兵leader:哨兵在检测到主节点不可用后,会进入选举状态,此时哨兵将开始选举哨兵的领导者。(哨兵中选出一个兵王)

    监视该主节点的所有哨兵都有可能被选为领导者,选举使用的算法是Raft算法;Raft算法的基本思路是先到先得:
    1要票,23没有投过,要票成功,2要票,只能要到1,3要票,要不到,都投过,应该是没人手里一张票,具体高级篇会细致讲解

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dDxMmiLj-1687955266278)(img/哨兵选举.png)]

  3. 哨兵leader开始推动故障切换流程并选举出一个新的master
    在这里插入图片描述

    在从节点中选出新的master的规则:
    ①redis.conf中优先级slave-priority或replica-priority高的从节点优先(数值越小优先级越高)
    在这里插入图片描述

    ②复制偏移量(offset)大的从节点优先。
    ③Run ID最小的从节点优先(按字典顺序、ASCII码值比较),每个redis实例启动后都会随机生成一个40位的run id。

  4. 选举出新的master后由Sentinel leader完成failover工作(故障切换)

    • 执行slaveof no one命令让选出来的从节点成为新的主节点,并通过slaveof命令让其他节点(包括原来的master)成为新主节点的从节点。
    • Sentinel leader会向被重新配置的实例发送一个 CONFIG REWRITE 命令, 从而确保这些配置会持久化在硬盘里(写入配置文件)。
    • 将之前已下线的老master设置为新选出的新master的从节点,当老master重新上线,它会成为新master的从节点,sentinel leader会让原来的master降级为slave并恢复正常工作。不用上线,就已经在log中写为slave,下次上线会对它重新配置。

4. 小总结

  • 哨兵实例的数量应为多个,哨兵本身应该集群,保证高可用

  • 哨兵实例的个数应该为奇数,方便投票选出Sentinel Leader

  • 各个哨兵实例的配置应该一致

  • 哨兵集群+主从复制,并不能保证数据零丢失(引出集群cluster,集群可以解决这一问题)

    master宕机后,哨兵需要在一定时间内选出新的master并执行failover操作,这段时间内从节点无法写入数据,造成数据丢失。

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

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

相关文章

Flex写法系列-Flex布局之基本语法

以前的传统布局&#xff0c;依赖盒装模型。即 display position float 属性。但是对于比较特殊的布局就不太容易实现&#xff0c;例如&#xff1a;垂直居中。下面主要介绍flex的基本语法。 一、什么是Flex布局&#xff1f; Flex布局个人理解为弹性盒子&#xff0c;为盒装模型…

【机器学习】——神经网络与深度学习

目录 引入 一、神经网络及其主要算法 1、前馈神经网络 2、感知器 3、三层前馈网络&#xff08;多层感知器MLP&#xff09; 4、反向传播算法 二、深度学习 1、自编码算法AutorEncoder 2、自组织编码深度网络 ①栈式AutorEncoder自动编码器 ②Sparse Coding稀疏编码 …

opencv编译

文章目录 一、编译前工作二、编译安装1、Windows2、Linux 一、编译前工作 进入下载页面https://github.com/opencv/opencv&#xff0c;下载指定.tar.gz源码包&#xff0c;例如&#xff1a;opencv-4.7.0.tar.gz。解压到指定目录。 二、编译安装 opencv构建时&#xff0c;需要…

chatgpt赋能python:使用Python连接网络摄像头

使用Python连接网络摄像头 网络摄像头是现代生活中不可或缺的设备之一&#xff0c;其允许用户在远程位置查看实时视频流。Python语言提供了强大的工具来连接和控制网络摄像头。本文将向您展示如何使用Python连接网络摄像头以及如何将视频流数据流式传输到本地计算机。 环境设…

OpenGL 鼠标拾取模型

1.简介 在我们的场景中&#xff0c;使用鼠标光标点击或“挑选”一个3d对象是很有用的。一种方法是从鼠标投射3d光线&#xff0c;通过相机&#xff0c;进入场景&#xff0c;然后检查光线是否与任何物体相交。这通常被称为光线投射。 我们不是从局部空间中的网格开始&#xff0c…

vscode 出现 No such file or directory 的解决办法(python tkinter)

问题 主要解决的问题是python在linux下包没办法安装的问题 Traceback (most recent call last): File “e:\Github\Python-GUI\PyQt-Fluent-Widgets\examples\navigation\demo.py”, line 202, in w Window() File “e:\Github\Python-GUI\PyQt-Fluent-Widgets\examples\na…

Python学习—装饰器的力量

Python学习—装饰器的力量 作为许多语言都存在的高级语法之一&#xff0c;装饰器是你必须掌握的知识点。 Python的装饰器&#xff08;Decorator&#xff09;允许你扩展和修改可调用对象&#xff08;函数、方法和类&#xff09;的行为&#xff0c;而无需永久修改可调用的对象本身…

leedcode-只出现一次的数字-异或

题目 题目 代码 class Solution { public:int singleNumber(vector<int>& nums) {int ansnums[0];for(int i1;i<nums.size();i){ansans^nums[i];}return ans;} };

C++ - 哈希的应用

前面的文章中我们讲解了如何进行哈希表的构建以及使用实现的哈希表来模拟实现unordered_map&#xff0c;在本文中我们将继续来讲解一下哈希的应用。 位图 问题引入 首先我们来引入一个问题&#xff1a;给40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&am…

介绍 9 个研发质量度量指标

研发质量管理中的 MTTR、MTBF、MTTF、MTTD 都是什么&#xff1f;今天我们从生产事件的全生命周期出发&#xff0c;认识研发质量管理的 9 个度量指标——「MT 家族」。 01 Mean Time To ALL 「MT」是 Mean Time 的缩写&#xff0c;意为平均时间&#xff0c;「MT 家族」则是 Li…

【AcWing算法基础课】第一章 基础算法(部分待更)

文章目录 前言课前温习一、快速排序核心模板1.1题目描述1.2思路分析1.3代码实现 二、归并排序核心模板2.1题目描述2.2思路分析2.3代码实现 三、二分查找整数二分题目一3.1题目描述3.2思路分析3.3代码实现 浮点数二分题目二3.1题目描述3.2思路分析3.3代码实现 四、高精度加法核心…

记录--巧用 overflow-scroll 实现丝滑轮播图

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言: 近期我在项目中就接到了一个完成轮播图组件的需求。最开始我也像大家一样&#xff0c;直接选择使用了知名的开源项目 "Swiper"&#xff0c;但是后来发现它在移动端项目中某些测试环境…

函数调用的机器级表示

文章目录 1.Call和ret指令2. 如何访问栈帧里面的数据为什么栈底放在上面&#xff0c;栈顶放在下面X86中的寄存器EBP、ESP寄存器push 、pop 指令mov 指令总结如何访问栈帧 3. 如何切换栈帧函数调用时函数返回时 4. 完整的函数调用过程1. 一个函数的栈帧内包含哪些内容2. 汇编代码…

Jenkins 发送文件到远程服务器:Publish Over SSH 插件

Jenkins 发送文件到远程服务器&#xff1a;Publish Over SSH 插件 文章目录 Jenkins 发送文件到远程服务器&#xff1a;Publish Over SSH 插件一、Publish Over SSH 插件1、概述2、主要功能和特点3、插件主页4、安装 Publish Over SSH 插件5、配置远程主机 二、发送文件到远程主…

windows安装python开发工具pycharm

下载地址 PyCharm: the Python IDE for Professional Developers by JetBrains 点击下载 安装 双击exe安装等待安装完成即可 设置python环境 添加本地python环境 选择python.exe 所在路径即可&#xff0c;2.x版本和3.x版本都可&#xff0c;根据需要进行调整

【Spring】——Spring生命周期

前言 ❤️❤️❤️Spring专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring_冷兮雪的博客-CSDN博客 前面我们讲完了Spring中有关Bean的读和取&#xff0c;我们还没有好好去了解了解Bean对象&#xff0c;这篇 …

基于appnium+python+夜神模拟器的自动化

目录 1、安装夜神模拟器 2、定位元素 3、开始编码 首先搭好appnium环境&#xff01;参考https://www.cnblogs.com/testlearn/p/11419797.html 1、安装夜神模拟器 下载安装夜神模拟器后&#xff0c;在cmd命令输入adb connect 127.0.0.1:62001&#xff0c;显示出设备则表示…

redis协议与异步方式学习笔记

目录 1 交互方式 pipline2 广播机制2.1 概念演示2.2 使用场景 3 redis事物3.1 概念3.2 使用场景3.3 解决的问题3.3.1 背景&#xff1a;多线程竞争出现问题3.3.2 事务3.3.3 安全性事务 3.4两种类型的“事务”3.4.1 watch ... multi exec3.4.2 lua 脚本实现“原子”执行&#xff…

再以汇编代码分析c++的右值引用

汇编分析c语言的执行结果最为准确。 可见&#xff0c;右值引用其实还是引用&#xff0c; bb 和 cc 都是对 aa 的引用&#xff0c;其内存里存储了 aa 的地址。 而且还有一个很奇特的现象&#xff0c;bb无法给cc赋值&#xff0c;右值引用无法给右值赋值。 同样是调用std:: move…

d2l_第七章学习_卷积神经网络

参考: d2l今日学习——卷积神经网络&#xff08;CNN&#xff09;https://blog.csdn.net/m0_61165991/article/details/124176077图像工程&#xff08;上册&#xff09;-图像处理傅里叶变换https://blog.csdn.net/qq_43369406/article/details/131350139CNN卷积神经网络基础知识…
最新文章