Redis集群方案——哨兵机制

Redis Sentinel(哨兵)是Redis官方提供的高可用性(HA)解决方案,用于管理Redis主从架构并实现自动故障转移

一、集群结构和作用

哨兵是一个分布式系统,由多个哨兵节点组成:

哨兵的作用如下:

  • 监控:Sentinel 会不断检查您的master和slave是否按预期工作

  • 自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主

  • 通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端

二、哨兵工作原理

Sentinel基于心跳机制监测服务状态,每隔1秒向集群的每个实例发送ping命令:

  • 主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线
  • 客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。

三、集群故障恢复原理

1.哨兵选主规则

一旦发现master故障,sentinel需要在salve中选择一个作为新的master,选择依据是这样的:

  • 首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点

  • 然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举

  • 如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高

  • 最后是判断slave节点的运行id大小,越小优先级越高。

2.故障转移流程

当选出一个新的master后,该如何实现切换呢?

流程如下:

  • sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master

  • sentinel给所有其它slave发送slaveof 192.168.206.180 7002 命令,让这些slave成为新master的从节点,开始从新的master上同步数据。

  • 最后,sentinel将故障节点标记为slave,当故障节点恢复后会自动成为新的master的slave节点

四、Docker搭建Redis哨兵集群

五、相关面试问题

1.怎么保证redis的高并发高可用?

        redis提供了主从同步+哨兵模式保证了redis的高并发和高可用性。

        首先,主从同步保证了redis的高并发性:单节点redis的并发能力是有上线的,我们可以搭建主从同步集群实现redis的读写分离:master负责写数据,slave只负责读数据。

        然后,哨兵机制保证了redis的高可用性:哨兵机制可以实现主从集群的自动故障恢复,里面就包含了对主从服务的检测、自动故障恢复和通知;如果master故障,sentinel会重新选取一个slave作为新的master,当master恢复会自动下降为slave。同时当redis实现故障转移,sentinel会向redis客户端通知信息变化。

2.如何解决redis的集群脑裂问题

        redis的哨兵模式一般会因为网络等原因出现脑裂问题。也就是,master、slave和sentinel处于不同的网络分区,sentinel心跳机制检测不到master,会重新选举一个slave作为新的master,但是旧的master并未下线,仍在写入数据,新的master无法同步,当网络恢复,旧的master下降为slave,就会导致丢失大量数据。

        我知道的有以下几种方法可以避免和减轻脑裂问题:

        第一,设置合适的哨兵quonum,一般为N/2+1(其中N为哨兵节点数)。

        第二,启用主节点写入保护,在redis.conf中添加:至少要有1个从节点连接(min-slaves-to-write 1)和从节点复制延迟不超过10秒(min-slaves-max-lag 10)才能同步数据。

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

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

相关文章

1.2.3_2 TCP/IP模型

在这个视频中,我们要探讨TCP/IP模型。对于TCP/IP模型考试的要求是这样的,首先我们需要记住它各个层次的名称和顺序,以及我们需要了解TCP/IP 模型和OSI参考模型,它们在设计理念上有哪些区别,设计理念的区别又导致了TCP/…

EVOLVEpro安装使用教程-蛋白质语言模型驱动的快速定向进化

写在前面:蛋白质是生命活动的基石,其功能和序列之间的复杂关系长期以来吸引着科学家们的关注。尽管深度突变扫描等实验方法可以解析蛋白质突变的功能影响,但这些技术的应用范围局限于序列空间的一小部分。近年来,基于蛋白质语言模…

【Linux】Rocky Linux 清华镜像源安装 GitLab

使用清华镜像源安装 GitLab 地址:清华镜像源 1. 搜索 gitlab,我们选择 gitlab-ce 社区版进行安装 2. 新建 /etc/yum.repos.d/gitlab-ce.repo,内容为 注意:el$releasever 是清华镜像源内的文件夹版本 [gitlab-ce] nameGitlab C…

【龙泽科技】新能源汽车维护与动力蓄电池检测仿真教学软件【吉利几何G6】

产品简介新能源汽车维护与动力蓄电池检测仿真教学软件是依托《全国职业院校技能大赛》“新能源汽车维修”赛项中“新能源汽车维护与动力蓄电池检测” 竞赛模块,自主开发的一款仿真教学软件。软件采用仿真技术对车辆进行指定维护作业,并对动力蓄电池总成进…

UE5多人MOBA+GAS 18、用对象池来设置小兵的队伍的生成,为小兵设置一个目标从己方出生点攻打对方出生点,优化小兵的血条UI

文章目录根据小兵队伍更换小兵的皮肤管理小兵的生成使用对象池来管理小兵的生成为小兵设置一个目标小兵生成完整代码调整一下小兵的UI根据小兵队伍更换小兵的皮肤 懒得开UE了,增加一个Minion类继承基类角色CCharacter // 幻雨喜欢小猫咪#pragma once#include &qu…

Clojure持久化数据结构的底层实现

文章目录一、Clojure的持久化数据结构二、向量(Vector)/Map的底层结构​1. HAMT 哈希数组映射字典树(1)简介(2)HAMT 的核心思想(3)HAMT 的结构​a. 基本组成​b. 树的分支因子​(4)H…

面试150 二叉树展开为链表

思路 思路:使用列表存储先序遍历的相关节点。然后遍历列表,分别获取前驱节点和当前节点,将前驱节点的左指针指向空,前驱节点的右指针指向当前节点。 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, …

代码随想录算法训练营第十七天

目录 LeetCode.654 最大二叉树 题目链接 最大二叉树 题解 解题思路 LeetCode.617 合并二叉树 题目链接 合并二叉树 题解 解题思路 LeetCode.700 二叉搜索树中的搜索 题目链接 二叉搜索树中的搜索 题解 解题思路 解题思路 LeetCode.98 验证二叉搜索树 题目链接 验…

pycharm无法识别pip安装的包

在使用conda创建一个新的环境后,有些包通过pip的方式安装更方便有效,若在pip安装后,遇到该环境没有此包,或pycharm监测不到此包,通常是pip的环境指向有问题。 解决措施: # 首先检查当前pip的指向 which pip…

Elasticsearch 的 `modules` 目录

Elasticsearch 的 modules 目录是存放**核心功能模块**的目录,这些模块是 Elasticsearch 运行所必需的基础组件,**随官方发行版一起提供**,但设计上允许通过移除或替换模块来**定制化部署**(比如构建一个最小化的 Elasticsearch 实…

https——TCP+TLS

https——TCPTLS主题:基于mbedtls-2.16.0,验证TLS会话复用功能验证环境:1.TLS服务端2.TLS客户端2.1 基于Sesssion ID2.1.1mbedtls-2.16.0库的宏配置2.1.2 初始化配置2.1.3 TCP连接2.1.4 首次TLS连接2.1.4.1 发送加密算法列表2.1.4.2 选择加密…

uni-app uni-push 2.0推送图标不展示问题

问题现象:我在uni-app的配置文件,配置了推送的大图标小图标发现在真机测试无法展示配置的推送图标问题 官网文档:开通 | uni-app官网 解决方法: 在uni-app官网中说的并不是很清楚只给了一个简单的示例,配置并没有告诉我…

scp:上传大型数据集到实验室服务器

我通过百度网盘下载了大概200GB的LUNA-2016的肺结节CT数据。实验是在实验室服务器上进行的,我现在需要将本地的数据集传输到实验室的服务器上。我已经通过remote-ssh连接上了实验室的服务器,但是如果通过这个插件上传数据的话,一方面不支持上…

量子计算突破:8比特扩散模型实现指数级加速

目录 一、量子扩散模型(Quantum Diffusion) 二、DNA存储生成(Biological-GAN) 三、光子计算加速 四、神经形态生成 五、引力场渲染 六、分子级生成 七、星际生成网络 八、元生成系统 极限挑战方向 一、量子扩散模型&…

Flask3.1打造极简CMS系统

基于Flask 3.1和Python 3.13的简易CMS以下是一个基于Flask 3.1和Python 3.13的简易CMS管理系统实现方案,包含核心功能和可运行代码示例。环境准备安装Flask和其他依赖库:pip install flask3.1.0 flask-sqlalchemy flask-login配置数据库在config.py中设置…

用 Node.js 构建模块化的 CLI 脚手架工具,从 GitHub 下载远程模板

本文将手把手带你构建一个支持远程模板下载、自定义项目名称,并完成模块化拆分的 CLI 脚手架工具,适用于初创项目、团队内部工具或者开源项目快速初始化。🧩 为什么要自己造一个 CLI 脚手架? 在日常开发中,我们常用脚手…

08.如何正确关闭文件

如何正确关闭文件(File Handling Best Practices) 文件操作是日常开发中非常常见的任务,正确关闭文件对于避免资源泄漏尤为关键。错误的文件关闭方式可能导致文件未保存、锁定或其他异常。 1. 常见的错误方式:手动 close() 许多初学者会手动调用 close() 关闭文件,这在异…

算法入门--动态规划(C++)

深入浅出掌握动态规划核心思想,图文并茂实战代码 什么是动态规划? 动态规划(Dynamic Programming, DP) 是一种高效解决多阶段决策问题的方法。它通过将复杂问题分解为重叠子问题,并存储子问题的解(避免重…

[2025CVPR]GNN-ViTCap:用于病理图像分类与描述模型

论文结构解析​ 本文采用经典学术论文结构: ​引言​:阐述病理图像分析的挑战与现有方法局限性​相关工作​:系统梳理MIL、视觉语言预训练和生物医学语言模型三大领域​方法​:详细阐述GNN-ViTCap四阶段架构​实验​:在BreakHis和PatchGastric数据集验证性能​讨论​:通…

Java SE--图书管理系统模拟实现

一.设计思路首先这个系统可以由俩种用户使用,分别为管理者用户和普通者用户,根据不同的用户有不同的界面,每个界面有不同的功能。二.代码实现创建三个包和一个类book包:包括Book类和Booklist类Book类:package book; pu…