Redis哨兵集群的介绍及搭建

Redis 是一款开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。然而,作为一个单点服务,Redis 在面临硬件故障或者网络问题时可能会导致服务不可用。为了解决这个问题,Redis 提供了哨兵模式,一个高可用性解决方案。

在这篇博客中,我们将深入探讨 Redis 的哨兵模式。我们将首先介绍哨兵模式的基本概念,包括主节点、从节点和哨兵节点。然后,我们将详细解析哨兵模式下的主要流程,包括主观下线、客观下线、领导者选举和故障转移。

无论你是一个 Redis 的新手,还是一个有经验的开发者,我相信这篇博客都能帮助你更好地理解和使用 Redis 的哨兵模式。让我们开始吧!


文章目录

        • 1、Redis哨兵模式介绍
          • 1.1、Redis哨兵模式概述
          • 1.2、Redis主从复制与哨兵模式
          • 1.3、Redis哨兵模式主要角色
        • 2、Redis哨兵模式原理
          • 2.1、Redis哨兵模式-定时监控
          • 2.2、Redis哨兵模式-主观&客观下载
          • 2.4、Redis哨兵模式-节点选举
          • 2.5、Redis哨兵模式-故障转移
        • 3、Redis主从复制实现
          • 3.1、拉取Redis镜像
          • 3.3、创建所需文件夹
          • 3.3、修改redis.conf
          • 3.4、修改sentinel.conf
          • 4.5、运行容器
          • 4.6、查看主从节点信息


1、Redis哨兵模式介绍

1.1、Redis哨兵模式概述

Redis 哨兵模式是 Redis 提供的一种高可用解决方案。它通过使用哨兵节点来监控 Redis 主服务器和从服务器的运行状态,当主服务器出现故障时,哨兵可以自动将一个从服务器提升为新的主服务器,实现故障转移。

image-20230910180721166

以下是 Redis 哨兵模式的主要特点:

  1. 监控:哨兵会定期检查主服务器和从服务器是否正常运行,这包括检查是否能正常响应客户端的请求,以及主从服务器之间的数据复制是否正常。
  2. 通知:当哨兵发现主服务器出现故障时,它可以通过 API 向管理员发送通知。
  3. 自动故障转移:当主服务器出现故障时,哨兵会自动从从服务器中选举出一个新的主服务器,并让其他的从服务器开始复制新的主服务器。
  4. 配置提供者:客户端可以向哨兵询问哪个服务器是当前的主服务器。这样,即使发生了故障转移,客户端也能找到正确的主服务器。
1.2、Redis主从复制与哨兵模式

主从复制模式在 Redis 中是一种常见的数据冗余和读取性能提升的方式,但它也存在一些不足之处:

  1. 单点故障问题:在主从复制模式中,所有的写操作都是在主服务器上进行的,如果主服务器出现故障,那么整个 Redis 服务将无法处理写请求。
  2. 故障恢复手动性:当主服务器出现故障后,需要手动将一个从服务器提升为新的主服务器,并修改应用程序的配置指向新的主服务器。这个过程可能需要一段时间,导致服务中断。
  3. 数据一致性问题:在主服务器向从服务器复制数据的过程中,如果出现网络问题或者从服务器宕机,可能会导致主从服务器的数据不一致。

Redis 哨兵模式就是为了解决这些问题而设计的:

  1. 自动故障转移:哨兵模式可以自动检测主服务器的状态,当主服务器出现故障时,哨兵会自动从从服务器中选举出一个新的主服务器,并让其他的从服务器开始复制新的主服务器。这个过程是自动进行的,无需人工干预,可以减少因主服务器故障导致的服务中断时间;
  2. 避免单点故障:通过自动故障转移,哨兵模式可以避免单点故障问题。即使主服务器出现故障,Redis 服务仍然可以继续处理写请求;
  3. 通知(Notification): 哨兵可以将故障转移的结果发送给客户端;
  4. 提供服务发现功能:哨兵还提供了服务发现功能,客户端可以询问哨兵当前的主服务器是哪一个,这样即使发生了故障转移,客户端也能找到正确的主服务器。
1.3、Redis哨兵模式主要角色

在 Redis 哨兵模式中,主要有以下三种角色:

  1. 主节点(Master):主节点是 Redis 服务的主要提供者,它处理所有的写操作,并将数据复制到从节点。在正常情况下,所有的读写操作都由主节点处理;
  2. 从节点(Slave):从节点是主节点的备份,它从主节点复制数据,可以处理读操作。当主节点出现故障时,从节点可以被提升为新的主节点;
  3. 哨兵节点(Sentinel):哨兵节点是 Redis 高可用性的关键,它监控主节点和从节点的运行状态,当主节点出现故障时,哨兵节点会进行故障转移,选举一个新的主节点,并重新配置从节点。

在哨兵模式下,主节点、从节点和哨兵节点都可以是多个,形成一个分布式的、高可用的 Redis 服务。


2、Redis哨兵模式原理

哨兵模式是通过哨兵节点完成对数据节点的监控、下线、故障转移。

image-20230910183904891

2.1、Redis哨兵模式-定时监控

哨兵节点会定期检查主服务器和所有从服务器的运行状态,包括是否在线,是否能正常响应请求,主从数据复制是否正常等。

以下是哨兵模式下的定时监控的主要步骤:

  1. 每隔(默认) 1 秒,每个 Sentinel 节点会向主节点、从节点以及其余 Sentinel 节点发送 PING 命令以检查它们是否在线。如果服务器正常响应了 PING 命令,那么哨兵节点就认为这个服务器是在线的。如果服务器没有响应,或者返回了错误,那么哨兵节点就认为这个服务器可能出现了故障;
  2. 每隔(默认) 2 秒,每个 Sentinel 节点会向 Redis 数据节点的 __sentinel__:hello 频道发送消息,这个消息包含了该 Sentinel 节点对于主节点的判断以及当前 Sentinel 节点的信息;
  3. 每隔(默认) 10 秒,每个 Sentinel 节点会定期(默认是每10秒)向主节点和所有从节点发送 INFO 命令,获取最新的拓扑结构和其他信息。INFO 命令可以返回 Redis 服务器的各种信息和统计数据,包括服务器的一般信息(例如 Redis 版本,启动时间,操作系统等),客户端连接的信息,内存使用情况,数据持久化的状态,主从复制的信息等。
2.2、Redis哨兵模式-主观&客观下载

在 Redis 哨兵模式中,"主观下线"和"客观下线"是两个重要的概念,它们是 Sentinel 节点判断主服务器是否出现故障的依据。

主观下线(Subjective Down):每个 Sentinel 节点会定期(默认是每1秒)向主节点、从节点和其他 Sentinel 节点发送 PING 命令进行心跳检测。如果某个节点在 down-after-milliseconds 参数设定的时间内没有进行有效回复,Sentinel 节点就会对该节点做失败判定,这个行为被称为主观下线。

主观下线是基于 Sentinel 节点自身视角的判断,它只代表了该 Sentinel 节点无法与被检测节点正常通信,可能是由于网络问题或者被检测节点的实际故障。

image-20230910193253376

客观下线(Objective Down):当足够多的 Sentinel 节点都认为主服务器已经下线,那么主服务器就被认为是客观下线。这是多数 Sentinel 节点的共识,更具有可信度。

在 Redis 哨兵模式中,当一个 Sentinel 节点主观判断主节点下线后,它会通过 sentinel is-master-down-by-addr 命令向其他 Sentinel 节点询问对主节点的判断。如果收到的回复中,认为主节点下线的 Sentinel 节点数量达到了 quorum 参数设定的值,那么这个 Sentinel 节点就会认为主节点确实有问题,做出客观下线的决定。

在 Sentinel 模式下,只有当主服务器被判断为客观下线,才会触发故障转移过程。这是为了防止由于个别 Sentinel 节点的网络问题或者误判导致的误报。只有当多数 Sentinel 节点都认为主服务器已经下线,才认为这是一个真实的故障,需要进行故障转移。

2.4、Redis哨兵模式-节点选举

在 Redis 哨兵模式中,当主节点被判断为客观下线后,哨兵节点会进行领导者选举,选出一个领导者 Sentinel 节点来负责故障转移的过程。以下是领导者 Sentinel 节点选举的详细步骤:

  1. 开始选举:当一个 Sentinel 节点判断主节点客观下线后,它会开始一个新的领导者选举过程。首先,它会增加自己的配置纪元(一个全局的、递增的数字),然后向其他 Sentinel 节点发送请求投票的消息;
  2. 投票:当一个 Sentinel 节点收到请求投票的消息后,如果请求中的配置纪元大于自己的配置纪元,那么它会更新自己的配置纪元,并向请求投票的 Sentinel 节点发送投票消息。每个 Sentinel 节点在一个配置纪元中只能投票一次;
  3. 统计投票:请求投票的 Sentinel 节点会统计收到的投票消息,如果在指定的时间内(默认是 2 秒)收到了大多数 Sentinel 节点的投票,那么它就会被选举为领导者;
  4. 开始故障转移:领导者 Sentinel 节点会开始故障转移过程,包括选举新的主节点,重新配置从节点等。

通过这个过程,哨兵系统可以在主节点出现故障后,快速选举出一个领导者来进行故障转移,保证 Redis 服务的高可用性。

2.5、Redis哨兵模式-故障转移

在 Redis 哨兵模式中,当主节点被判断为客观下线后,哨兵节点会进行故障转移,选举一个新的主节点,并重新配置从节点。以下是故障转移的详细步骤:

image-20230910193859958

  1. 选举新的主节点:首先,领导者 Sentinel 节点会从所有的从节点中选举出一个新的主节点。选举的原则主要是优先选择数据最新(复制偏移量最大)和优先级最高的从节点。
  2. 发送 SLAVEOF NO ONE 命令:领导者 Sentinel 节点会向新选举出的主节点发送 SLAVEOF NO ONE 命令,让它成为新的主节点。
  3. 重新配置从节点:然后,领导者 Sentinel 节点会向其他的从节点发送 SLAVEOF 命令,让它们成为新主节点的从节点。
  4. 更新元数据:最后,所有的 Sentinel 节点会更新自己的元数据,包括主节点的地址、主从关系等。
  5. 通知客户端:所有的 Sentinel 节点会向订阅了 +switch-master 事件的客户端发送消息,通知它们主节点已经切换。

通过这个过程,哨兵系统可以在主节点出现故障后,快速完成故障转移,保证 Redis 服务的高可用性。


3、Redis主从复制实现

3.1、拉取Redis镜像

拉取 Redis 镜像:

docker pull redis

image-20230910145808068

3.3、创建所需文件夹

创建所需文件夹,用于映射容器相应文件路径:

mkdir -p ~/data/redis/master/data                                  
touch ~/data/redis/master/redis.confmkdir                       
touch ~/data/redis/master/redis.conf 
mkdir -p ~/data/redis/slave-1/data       
touch ~/data/redis/slave-1/redis.confmkdir
touch ~/data/redis/slave-1/redis.conf
mkdir -p ~/data/redis/slave-2/data       
touch ~/data/redis/slave-2/redis.confmkdir
touch ~/data/redis/slave-2/redis.conf 
mkdir -p ~/data/redis/slave-3/data       
touch ~/data/redis/slave-3/redis.confmkdir
touch ~/data/redis/slave-3/redis.conf 
# sentinel.conf 文件一个就够
touch ~/data/redis/master/sentinel.conf   			
3.3、修改redis.conf

修改主节点 redis.conf 文件

bind 0.0.0.0
# 开启保护模式,限制为本地访问,默认yes
protected-mode no 
# 默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
daemonize no
# redis持久化(可选)
appendonly yes 

修改从节点 redis.conf 文件

bind 0.0.0.0
# 开启保护模式,限制为本地访问,默认yes
protected-mode no 
# 默认no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败
daemonize no
# redis持久化(可选)
appendonly yes 
# 指向master节点
replicaof 172.17.0.2 6379
3.4、修改sentinel.conf

修改 sentinel.conf 文件

daemonize yes
sentinel monitor mymaster 172.17.0.2 6379 2
port 26379
4.5、运行容器

运行容器并指定挂载路径:

docker run -p 16379:6379 -p 16389:26379 --name redis-master -v ~/data/redis/master/data/:/data -v ~/data/redis/master/sentinel.conf:/etc/redis/sentinel.conf -v ~/data/redis/master/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf --appendonly yes
---
docker run -p 26379:6379  -p 16390:26379 --name redis-slave-1 -v ~/data/redis/slave-1/data/:/data -v ~/data/redis/slave-1/sentinel.conf:/etc/redis/sentinel.conf -v ~/data/redis/slave-1/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf --appendonly yes
---
docker run  -p 36379:6379  -p 16391:26379 --name redis-slave-2 -v ~/data/redis/slave-2/data/:/data -v ~/data/redis/slave-2/sentinel.conf:/etc/redis/sentinel.conf  -v ~/data/redis/slave-2/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf --appendonly yes
---
docker run  -p 46379:6379  -p 16392:26379 --name redis-slave-3 -v ~/data/redis/slave-3/data/:/data -v ~/data/redis/slave-3/sentinel.conf:/etc/redis/sentinel.conf  -v ~/data/redis/slave-3/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf --appendonly yes

image-20230910201641077

通过 Docker Desktop 查看:

image-20230910201658326

4.6、查看主从节点信息

查看主从节点信息:

# 进入从节点服务
docker exec -it [CONTAINER ID] redis-cli
# 查看角色信息
127.0.0.1:6379> role
# 查看主从复制信息
127.0.0.1:6379> info replication

主节点:

image-20230910202005890

从节点:

image-20230910201913818

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化

聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化 目录 聚类分析 | MATLAB实现基于SOM自组织特征映射聚类可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于自组织特征映射聚类算法(SOM)的数据聚类可视化 可直接运行 注释清晰 Matlab语言 1.多特征输入&…

MATLAB科学计算从入门到精通

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 MATLAB(Matr…

安科瑞ADL400产品功能及参数说明,适用于5G基站计量使用

安科瑞虞佳豪壹捌柒陆壹伍玖玖零玖叁 “十四五”以来,重庆新型数字基础设施建设取得明显成效,截至今年6月底,每万人拥有5G基站数24个,5G发展保持在全国第一梯队。 新型数字基础设施包括5G网络、千兆光网、数据中心、工业互联网、…

pc端测试手机浏览器运行情况,主要是测试硬件功能

测试h5震动摇晃等功能时不方便测试,需要连电脑显示调试数据 方法: 1.需要手机下载谷歌浏览器,pc端用edge或这谷歌浏览器 2.手机打开USB调试,打开要测试的网页 3.pc端地址栏输入edge://inspect/#devices(这里用的edge浏…

解决微信小程序报错:“SyntaxError:Unexpected end of JSON input”

1. 报错原因: 如果对象的参数或数组的元素中遇到地址,地址中包括?、&这些特殊符号时,对象/数组先要通过JSON.stringify转化为字符串再通过encodeURIComponent编码;接收时,先通过decodeURIComponent解码再通过JSON…

2023年会展行业研究报告

第一章 行业概况 1.1 定义 会展行业是一个多元化和复杂的领域,涵盖了许多不同的活动和功能。一般来说,会展业是指在一定的区域空间内,许多人聚集在一起形成的定期或者不定期,制度或者非制度,传递和交流信息的群众性的…

MYBATIS-PLUS入门使用、踩坑记录

转载&#xff1a; mybatis-plus入门使用、踩坑记录 - 灰信网&#xff08;软件开发博客聚合&#xff09; 首先引入MYBATIS-PLUS依赖&#xff1a; SPRING BOOT项目&#xff1a; <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus…

Excel学习 WPS版

Excel学习 1.界面基础1.1 方格移动快捷键1.2 自动适配文字长度1.3 跨栏置中1.4 多个单元格同宽度&#xff1a;1.5 下拉框选择1.6 打印预览1.7 绘制边框1.8 冻结一行多行表头1.9 分割视图 2.日期相关2.1 今日日期快捷键2.2 月份提取 3.数学公式3.1 自动增长3.2 排序3.3 筛选3.4 …

一个Qt鼠标透传场景与事件过滤器的用法

一个Qt鼠标透传场景与事件过滤器的用法 最近工作中遇到一个开发场景&#xff0c;将一个QWidget控件&#xff08;称为控件A&#xff09;放入QScrollArea&#xff0c;该控件A重写了QWidget::wheelEvent&#xff0c;根据鼠标滚轮事件缩放内部的绘制视图。当控件过大时&#xff0c…

PY32F003F18之RS485通讯

PY32F003F18将USART2连接到RS485芯片&#xff0c;和其它RS485设备实现串口接收后再转发的功能。 一、测试电路 二、测试程序 #include "USART2.h" #include "stdio.h" //getchar(),putchar(),scanf(),printf(),puts(),gets(),sprintf() #include "…

房地产小程序 | 小程序赋能,房地产业务数字化升级

随着科技的不断发展&#xff0c;房地产行业正逐渐向数字化转型。在这个过程中&#xff0c;房地产小程序成为了一种重要的工具&#xff0c;可以帮助房地产企业提供更好的购房体验、增加销售额&#xff0c;并实现管理的便捷化。 优点 便捷购房体验&#xff1a;房地产小程序为用户…

第一颗国产 单/双端口 MIPI CSI/DSI 至 HDMI 1.4 发射器 芯片LT9611

1. 描述 LT9611 MIPI DSI/CSI 至 HDMI1.4 桥接器具有双端口 MIPI D-PHY 接收器前端配置&#xff0c;每个端口有 4 个数据通道&#xff0c;每个数据通道以 2Gbps 的速度工作&#xff0c;最大输入带宽为 16Gbps。 该桥接器提供一个 HDMI 数据输出&#xff0c;具有可选的 …