redis的哨兵

news2024/11/16 17:56:12

文章目录

  • 一、概念
    • 手动恢复redis主从复制的流程
    • 自动回复redis主从复制的流程
  • 二、部署
  • 三、哨兵节点的作用演示
  • 四、哨兵节点的原理

一、概念

Redis Sentinel 相关名词解释
在这里插入图片描述

我主要说一个场景,就是我们上一篇讲到的redis主从复制会遇到的问题,朱姐带你如果挂掉了,怎么办?

手动恢复redis主从复制的流程

我们的主从节点出现问题了,我们该如何解决呢?
步骤如下:
1.先看看主节点还能不能抢救?好不好抢救回来
2.如果短时间难以解决就,就需要手动挑选一个作为主节点。
a)把选中的从节点,通过slaveof no one 确定为主节点。
b)再把其他的从节点,修改slave of的主节点 ip port,连接上新的主节点。
c) 告知客户端,让客户端能够连接新的主节点,用来完成修改数据的操作。

自动回复redis主从复制的流程

我主要围绕着这里面的架构来说
在这里插入图片描述
这里提供了多个redise sentinel 进程。并且这三个哨兵进程会健康现有的redis master和slave。
我来解释一下如何进行主节点的回复流程了。
1.主节点挂之后,所有的哨兵节点都要确认一遍主节点是否已经挂了。
2.确认主节点挂之后,哨兵节点就会推选出一个leader ,这个leader就会作为一个新的节点。
3.挑选出新节点以后,哨兵节点,就会自动控制被选中节点,并且控制其他从节点,修改slaveof到新的主节点上。
4.最后哨兵会通知客户端程序,告知主节点是谁,并且后续客户端,再进行写操作,就会针对新的节点进行操作了。

二、部署

我们现在要给予docker部署一个哨兵和主从结合的拓扑结构
在这里插入图片描述

  1. 安装docker
# centos
yum install docker-compose
  1. 停止本机自带的redis
service redis-server stop
  1. 使用docker获取redis的镜像
docker pull redis:5.0.9
  1. 编辑redis的主从节点
  • 在root/redis/redis-data/docker-compose.yml
version: '3.7'
services:
  master:
   image: 'redis:5.0.9'
   container_name: redis-master
   restart: always
   command: redis-server --appendonly yes
   ports:
      - 6379:6379
  slave1:
   image: 'redis:5.0.9'
   container_name: redis-slave1
   restart: always
   command: redis-server --appendonly yes --slaveof redis-master 6379
   ports:
     - 6380:6379
  slave2:
   image: 'redis:5.0.9'
   container_name: redis-slave2
   restart: always
   command: redis-server --appendonly yes --slaveof redis-master 6379
   ports:
     - 6381:6379
  • 启动所有容器
docker-compose up -d
  • 查看运行日志
    判断我们redis主从节点配置好没有
docker-compose logs
  • 验证
redis-cli -p 6379

在这里插入图片描述

  1. 编辑redis-sentinel
  • 在/root/redis/redis-sentinel 新建docker-compose.yml
version: '3.7'
services:
 sentinel1:
   image: 'redis:5.0.9'
   container_name: redis-sentinel-1
   restart: always
   command: redis-sentinel /etc/redis/sentinel.conf
   volumes:
        - ./sentinel1.conf:/etc/redis/sentinel.conf
   ports:
        - 26379:26379
 sentinel2:
   image: 'redis:5.0.9'
   container_name: redis-sentinel-2
   restart: always
   command: redis-sentinel /etc/redis/sentinel.conf
   volumes:
       - ./sentinel2.conf:/etc/redis/sentinel.conf
   ports:
      - 26380:26379
 sentinel3:
   image: 'redis:5.0.9'
   container_name: redis-sentinel-3
   restart: always
   command: redis-sentinel /etc/redis/sentinel.conf
   volumes:
       - ./sentinel3.conf:/etc/redis/sentinel.conf
   ports:
       - 26381:26379
networks:
  default:
    external:
      name: redis-data_default
  • 创建 sentinel1.conf sentinel2.conf sentinel3.conf . 三份⽂件的内容是完全相同
    的.
  1 bind 0.0.0.0
  2 port 26379
  3 sentinel myid 5b62d008ce5fcea273e2df911f5243319c9232ad
  4 sentinel deny-scripts-reconfig yes

配置文件的解释

这个配置文件是为Redis Sentinel服务设置的。Redis Sentinel是一个分布式系统,用于管理Redis服务的高可用性(HA)和故障转移。下面是对配置文件中每行的解释:

1. `bind 0.0.0.0`:这行配置指定Redis Sentinel监听所有网络接口上的请求。`0.0.0.0`是一个特殊的IP地址,表示所有网络接口。

2. `port 26379`:这行配置指定Redis Sentinel服务监听的端口号为26379。这是默认的Redis Sentinel端口。

3. `sentinel myid 5b62d008ce5fcea273e2df911f5243319c9232ad`:这行配置为这个Redis Sentinel实例指定了一个唯一的标识符(ID)。在Redis Sentinel集群中,每个实例都需要有一个唯一的ID,以区分不同的实例。

4. `sentinel deny-scripts-reconfig yes`:这行配置禁止了通过脚本来重新配置Redis Sentinel实例。这是一个安全措施,用来防止未授权的更改。

通常,Redis Sentinel的配置文件还会包含其他指令,比如定义主从关系、设置故障转移的参数、指定其他Sentinel实例的地址等,但这些内容没有在您提供的配置文件片段中显示。
  • 启动容器
docker-compose up -d
  • 观察redis-sentinel 的文件
    发现里面的文件已经发生变化了
    在这里插入图片描述

三、哨兵节点的作用演示

哨兵存在的意义就是当主从节点出现问题的时候,此时哨兵节点就能自动帮我们选举出一个主节点出来,来代替之前挂了的节点,保证整个redis仍然是可用的状态。

  1. 我们主动把主节点干掉
docker stop redis-master

在这里插入图片描述
2. 查看日志,发现哨兵已经发挥作用。
在这里插入图片描述
•主观下线 (Subjectively Down, SDown): 哨兵感知到主节点没⼼跳了. 判定为主观下线.
•客观下线 (Objectively Down, ODown): 多个哨兵达成⼀致意⻅, 才能认为 master 确实下线了.

  1. 验证主节点是否发生变化

在这里插入图片描述
4.在这里插入图片描述
在这里插入图片描述

四、哨兵节点的原理

假定当前环境如上⽅介绍, 三个哨兵(sentenal1, sentenal2, sentenal3), ⼀个主节点(redis-master), 两
个从节点(redis-slave1, redis-slave2).当主节点出现故障, 就会触发重新⼀系列过程.
在这里插入图片描述
此时分为两种下线方式

  1. 主节点下线操作
  • 主观下线
    当 redis-master 宕机, 此时 redis-master 和三个哨兵之间的⼼跳包就没有了.此时, 站在三个哨兵的⻆度来看, redis-master 出现严重故障. 因此三个哨兵均会把 redis-master 判定
    为主观下线 (SDown)
  • 客观下线
    此时, 哨兵 sentenal1, sentenal2, sentenal3 均会对主节点故障这件事情进⾏投票. 当故障得票数 >= 配置的法定票数之后,此时意味触发下线操作。
  1. 选举出哨兵的leader
    接下来需要哨兵把剩余的 slave 中挑选出⼀个新的 master. 这个⼯作不需要所有的哨兵都参与. 只需要选出个代表 (称为 leader), 由 leader 负责进⾏ slave 升级到 master 的提拔过程
  2. leader 挑选出合适的slave 成为新的master
  3. 最后剩余的slave都是指向新的master的。

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

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

相关文章

细粒度图像分类论文研读

细粒度图像分类论文研读 摘要Abstract1. 基于细粒度图像分类的视觉语义嵌入模型1.1 文献摘要1.2 创新点1.3 模型网络结构和方法1.3.1 问题陈述1.3.2 两级卷积神经网络1.3.3 局部化 CNN1.3.4 回归排序网络1.3.5 参数学习 1.4 实验1.4.1 数据集1.4.2 实验设置1.4.3 分类结果对比1…

3.SpringSecurity基本原理

SpringSecurity本质是一个过滤器链。十多个过滤器构成一个过滤器链。 这些过滤器在项目启动就会进行加载。每个过滤器执行放行操作才会执行下一个过滤器。 常见过滤器 FilterSecurityInterceptor 是一个方法级的权限过滤器,基本位于过滤器链的最底部。 Excepti…

图神经网络综述和学习路径

应用邻域 应用举例 应用层面(节点,连接,子图,全图) 概念区别 图神经网络本质上解决了表示学习的问题 可以把神经网络看作一个黑箱,图中的f函数 困难与挑战 现代的深度学习,如何把图输入到神经…

Qwik 和 Next.js 未来Web项目框架

Qwikover Next.js Qwik 是我进行 Web 项目开发的首选框架,而不是 Next.js 作为一名全栈工程师,我的前端之旅始于大约 10年前。从纯 JavaScript 和 jQuery 开始,然后转向了 KnockoutJS、AngularJS 和 GWT。React 出现, React 一直是…

IoTDB 入门教程 问题篇②——RPC远程连接IoTDB服务器失败

文章目录 一、前文二、发现问题三、分析问题四、检查6667端口是否监听所有IP五、检查ECS云服务器的安全组是否允许六、检查Linux防火墙是否允许 一、前文 IoTDB入门教程——导读 二、发现问题 使用本地IP127.0.0.1可以连接IoTDB服务器使用远程IPxx.xx.xx.xx却连接不到。提示你…

哥白尼高程Copernicus DEM下载(CSDN_20240505)

哥白尼数字高程模型(Copernicus DEM, COP-DEM)由欧洲航天局(European Space Agency, 简称ESA或欧空局)发布,全球范围免费提供30米和90米分辨率DEM。COP-DEM是数字表面模型(DSM),它表示地球表面(包括建筑物、基础设施和植被)的高程。COP-DEM是经过编辑的D…

java发送请求-http和https

http和https区别 1、http是网络传输超文本协议,client---- http------ server 2、httpshttpssl证书,让网络传输更安全 ,client---- httpssl------ server 3、ssl证书是需要客户端认可的,注意官方证书和jdk生成的证书的用户来使…

sql 中having和where区别

where 是用于筛选表中满足条件的行,不可以和聚类函数一起使用 having 是用于筛选满足条件的组 ,可与聚合函数一起使用 所以having语句中不能使用select中定义的名字

【设计模式】13、template 模板模式

文章目录 十三、template 模板模式13.1 ppl13.1.1 目录层级13.1.2 ppl_test.go13.1.3 ppl.go13.1.4 llm_ppl.go13.1.5 ocr_ppl.go 十三、template 模板模式 https://refactoringguru.cn/design-patterns/template-method 如果是一套标准流程, 但有多种实现, 可以用 template …

nodejs的ws+vue3编写聊天室的demo

nodejs编写ws服务是非常简单高效的,nodejs有众多的实现ws的库,如ws,SocketIO等,nodejs的事件线程是单线程的,所以不要在事件线程内做阻塞性的操作,耗时的操作交给工作线程或者子进程操作。 我使用nodejsvue3实现了写了…

安装vscode基础配置,es6基础语法,

https://code.visualstudio.com/ es6 定义变量 const声明常量(只读变量) // 1、声明之后不允许改变 const PI “3.1415926” PI 3 // TypeError: Assignment to constant variable. // 2、一但声明必须初始化,否则会报错 const MY_AGE /…

MySQL —— 表的基本操作

一、创建 1.语法 create table 表名称( 自定义变量1, 自定义变量2, 自定义变量3(最后一个变量末尾不需要加任何标点符号) )charset字符集 collate校验集 engine存储引擎; ps:若是不具体给字符集、校验集、储存引擎,则采用配置文件…

【网络安全产品】---应用防火墙(WAF)

what Web应用防火墙(Web Application Firewall) WAF可对网站或者App的业务流量进行恶意特征识别及防护,在对流量清洗和过滤后,将正常、安全的流量返回给服务器,避免网站服务器被恶意入侵导致性能异常等问题,从而保障…

计算机网络——Dijkstra路由算法

实验目的 实现基于 Dijkstra 算法的路由软件 实验内容 网络拓扑如图所示 实验过程 先编写开辟应该图的空间,然后给点映射数字,构建图。程序获取用户输入的学号,构建图中边的权值。接下来程序从用户输入获取最短路径的搜索起点&#xff0…

prometheus+grafana的安装与部署及优点

一、Prometheus 的优点 1、非常少的外部依赖,安装使用超简单; 2、已经有非常多的系统集成 例如:docker HAProxy Nginx JMX等等; 3、服务自动化发现; 4、直接集成到代码; 5、设计思想是按照分布式、微服…

QT Windows 实现调用Windows API获取ARP 表

简介 使用ping方式获取网络可访问或者存在的设备发现部分会无法ping通但实际网络上存在此设备, 但使用arp -a却可以显示出来, 所以现在使用windows API的方式获取arp 表。 实现 参考Windows提供的示例转化成Qt Qt .pro LIBS -liphlpapiLIBS -lws2_32…

分割链表

/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct ListNode* partition(struct ListNode* head, int x){if(head NULL){return head;}//创建新链表ListNode* lessHead,*…

UE5(射线检测)学习笔记

这一篇会讲解射线检测点击事件、离开悬停、进入悬停事件的检测,以及关闭射线检测的事件,和射线检测蓝图的基础讲解。 创建一个简单的第三人称模板 创建一个射线检测的文件夹RadiationInspection,并且右键蓝图-场景组件-命名为BPC_Radiation…

用于密集预测任务的通道知识蒸馏——关键字:蒸馏

摘要 https://arxiv.org/pdf/2011.13256 知识蒸馏(KD)已被证明是训练紧凑密集预测模型的简单有效工具。通过从大型教师网络转移而来的额外监督来训练轻量级学生网络。大多数先前的针对密集预测任务的KD变体都在空间域中对学生网络和教师网络的激活图进行对齐,通常是通过在每…

pandas读取文件导致jupyter内核崩溃如何解决

读取execl文件出现以下问题: str_name "D:\\cao_use\\2017_2021(new).xlsx" train_df pd.read_excel(str_name, usecols[0])崩溃的指示图如下所示: bug原因:读入的文件太大,所需时间过长,在读取的过程中,使用中断按钮暂停会直…