(九)Redis 哨兵机制与集群
主从复制中,如果从库发生故障了,客户端可以继续向主库或其他从库发送请求,但是如果主库发生故障了肿么办呢?读请求,那还可以由从库继续提供服务,写请求就么得办法了。此时,哨兵机制就登场了,解决3个问题:
(1)主库真的挂了吗?
(2)该选择哪个从库作为主库?
(3)怎么把新主库的相关信息通知给从库和客户端呢?
哨兵就是一个运行在特殊模式下的 Redis 进程,与主从库实例同时运行,主要负责的就是3个任务:监控、选主、通知:
(1)监控:是指哨兵进程在运行时,周期性地给所有的主从库发送 PING 命令,检测它们是否仍然在线运行,没有在规定时间内响应哨兵的 PING 命令,哨兵就会把它标记为“下线状态”,如果是主库下线,自动开始切换主库的流程。
(2)选主:是指主库挂了以后,哨兵就需要从很多个从库里,按照一定的规则选择一个从库实例,把它作为新的主库。这一步完成后,集群里就有了新主库。
(3)通知:是指哨兵会把新主库的连接信息发给其他从库,让它们执行 replicaof 命令,和新主库建立连接,并进行数据复制。同时,把新主库的连接信息通知给客户端,让它们把请求操作发到新主库上。在这三个任务中,通知任务相对来说比较简单,哨兵只需要把新主库信息发给从库和客户端,让它们和新主库建立连接就行,并不涉及决策的逻辑。而监控和选主这两个任务中,哨兵需要做出两个决策:
(1)在监控任务中,哨兵需要判断主库是否处于下线状态
(2)在选主任务中,哨兵也要决定选择哪个从库实例作为主库
监控
主库的下线状态有“主观下线”和“客观下线”两种,当 PING 命令的响应超时了,那么,哨兵就会先把它标记为“主观下线”。如果是从库,影响不大,如果是主库,就要开始选主。一旦启动了主从切换,后续的选主和通知操作都会带来额外的计算和通信开销,为了避免这些不必要的开销,我们要特别注意误判的情况。误判就是主库实际并没有下线,但是哨兵误以为它下线了,一般会发生在集群网络压力较大、网络拥塞,或者是主库本身压力较大的情况下。
通常会采用多哨兵组成的集群模式进行部署,降低误判的概率,这也被称为哨兵集群。大多数的哨兵都判断主库已经“主观下线”了,主库才会被标记为“客观下线”,判断原则就是:少数服从多数。简单来说,“客观下线”的标准就是,当有 N 个哨兵实例时,最好要有 N/2 + 1 个实例判断主库为“主观下线”,才能最终判定主库为“客观下线”。这样一来,就可以减少误判的概率,也能避免误判带来的无谓的主从库切换。(当然,有多少个实例做出“主观下线”的判断才可以,可以由 Redis 管理员自行设定)**
选主
在选主时,要先保证所选的从库仍然在线运行,还要判断它之前的网络连接状态,如果从库总是和主库连接的网络状况并不是太好,就要这个从库筛掉了。具体判断规则是配置项 down-after-milliseconds * 10,down-after-milliseconds 是我们认定主从库断连的最大连接超时时间。如果在 down-after-milliseconds 毫秒内,主从节点都没有通过网络联系上,我们就可以认为主从节点断连了。如果发生断连的次数超过了 10 次,就说明这个从库的网络状况不好,不适合作为新主库。
剩余的从库按3个规则依次打分,只要在某一轮中,有从库得分最高,那么它就是主库了,选主过程到此结束。如果没有出现得分最高的从库,那么就继续进行下一轮。
(1)优先级最高的从库得分高
slave-priority 优先级配置项,比如某个从库内存最大设置了高优先级,将会优先成为新主库,否则进入下一轮打分。
(2)和旧主库同步程度最接近的从库得分高
如果有从库的 slave_repl_offset 最接近旧主库 master_repl_offset,那么它的得分就最高,否则进入下一轮打分。
(3)ID 号小的从库得分高
每个实例都会有一个 ID,在优先级和复制进度都相同的情况下,ID 号最小的从库得分最高,会被选为新主库。
哨兵选择新主库的过程称可以总结为“筛选 + 打分”,按照在线状态、网络状态,筛选过滤掉一部分不符合要求的从库,然后,依次按照优先级、复制进度、ID 号大小再对剩余的从库进行打分,只要有得分最高的从库出现,就把它选为新主库。
(九)Redis 哨兵机制与集群的更多相关文章
- Redis架构之哨兵机制与集群
Redis架构之哨兵机制与集群 哨兵机制 1.介绍: Sentinel(哨兵)是redis高可用性解决方案:由一个或多个由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个 ...
- Redis 主从复制机制(集群)与 哨兵机制
1,什么是redis 主从复制 支持多个数据库之间的数据同步.只能一个主数据库(master),可以一个或者多个从数据库(slave) 主数据库,可以读写 从数据库,只可以读 当主数据库,做写的操作的 ...
- Redis哨兵模式实现集群的高可用
先了解一下哨兵都 做了什么工作:Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel ...
- Redis哨兵功能与集群搭建
6.redis哨兵功能 Redis-Sentinel Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果master本身宕机, ...
- Redis 中常见的集群部署方案
Redis 的高可用集群 前言 几种常用的集群方案 主从集群模式 全量同步 增量同步 哨兵机制 什么是哨兵机制 如何保证选主的准确性 如何选主 选举主节点的规则 哨兵进行主节点切换 切片集群 Redi ...
- Linux07 /redis的配置、五大数据类型、发布订阅、持久化、主从复制、哨兵配置、集群搭建
Linux07 /redis的配置.五大数据类型.发布订阅.持久化.主从复制.哨兵配置.集群搭建 目录 Linux07 /redis的配置.五大数据类型.发布订阅.持久化.主从复制.哨兵配置.集群搭建 ...
- Redis——(主从复制、哨兵模式、集群)的部署及搭建
Redis--(主从复制.哨兵模式.集群)的部署及搭建 重点: 主从复制:主从复制是高可用redis的基础,主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复. 哨兵和集群都是 ...
- 【集群】Redis的哨兵模式和集群模式
哨兵模式 哨兵模式是redis高可用的实现方式之一 使用一个或者多个哨兵(Sentinel)实例组成的系统,对redis节点进行监控,在主节点出现故障的情况下,能将从节点中的一个升级为主节点,进行故障 ...
- 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)
本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...
- redis + 主从 + 持久化 + 分片 + 集群 + spring集成
Redis是一个基于内存的数据库,其不仅读写速度快,每秒可以执行大约110000的写操作,81000的读取操作,而且其支持存储字符串,哈希结构,链表,集合丰富的数据类型.所以得到很多开发者的青睐.加之 ...
随机推荐
- 关于Pure中使用RnadomInteger问题的BUG
每一次连线都会造成返回值不一样相当于重新调用了一次,所以返回值需要新建变量存储来使用而不是直接用它拉两次线 下面是错误写法: 正确写法:
- c#写一个WINFORM的多线程操作
以下是一个简单的示例,展示了如何在C# WinForms中创建一个按钮的异步事件,并使用Label控件来显示事件执行的时长. 首先,确保你已经在你的项目中添加了一个Button和一个Label控件.假 ...
- awk替换指定行指定列内容
例如表格中数值如下1,2,3,41,2,1,22,3,2,3怎么样在原表中,把第二行第三个1替换为5. awk -F"," 'NR==2{$3=5} 1' file.txt -F ...
- 【Hibernate】04 主键策略 & CRUD
实体类编写规范: - 每个属性不应该被公开的访问,设置私有 - 提供可以访问和设置的方法,GETTER & SETTER - 必须编写一个主键属性[ID 唯一值] - 建议使用基本类型的包装类 ...
- OpenAI内讧更多细节曝光:奥特曼离间董事会失败
参考: https://www.thepaper.cn/newsDetail_forward_25512687 ============================== 根据 https://ww ...
- 解决GitHub不显示图片问题——GitHub图片显示失败
在Github上打不开图片是一个极为常见的事情,出现这样的问题的原因就是我们的主机无法正确解析图片所在主机域名对应的IP地址,下面给出一个在本地主机(window10)上使用ping命令解析目标主机域 ...
- 编译python扩展模块报错:-ltensorflow_framework
参考: https://blog.csdn.net/u012947309/article/details/116736684 ===================================== ...
- SMU Summer 2023 Contest Round 3
SMU Summer 2023 Contest Round 3 A. Curriculum Vitae 题意就是要求\(1\)后面不能有\(0\)的情况下的子序列最长长度, 也就是求一个最长不下降子序 ...
- worktree的路径的文件夹自己重命名后发现没有git
1. worktree title: worktree的路径的文件夹自己重命名(修改名称)后发现没有git了 keyword: git worktree repair prune 快速方法 问题:父级 ...
- C语言编程-GCC编译过程
gcc编译 预处理 ->编译->汇编->链接 预处理 gcc -E helloworld.c -o helloworld.i 头文件展开:不检查语法错误,即可以展开任意文件: 宏定义 ...