主从复制中,如果从库发生故障了,客户端可以继续向主库或其他从库发送请求,但是如果主库发生故障了肿么办呢?读请求,那还可以由从库继续提供服务,写请求就么得办法了。此时,哨兵机制就登场了,解决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 哨兵机制与集群的更多相关文章

  1. Redis架构之哨兵机制与集群

    Redis架构之哨兵机制与集群 哨兵机制 1.介绍: Sentinel(哨兵)是redis高可用性解决方案:由一个或多个由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个 ...

  2. Redis 主从复制机制(集群)与 哨兵机制

    1,什么是redis 主从复制 支持多个数据库之间的数据同步.只能一个主数据库(master),可以一个或者多个从数据库(slave) 主数据库,可以读写 从数据库,只可以读 当主数据库,做写的操作的 ...

  3. Redis哨兵模式实现集群的高可用

    先了解一下哨兵都 做了什么工作:Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel ...

  4. Redis哨兵功能与集群搭建

    6.redis哨兵功能 Redis-Sentinel Redis-Sentinel是redis官方推荐的高可用性解决方案,当用redis作master-slave的高可用时,如果master本身宕机, ...

  5. Redis 中常见的集群部署方案

    Redis 的高可用集群 前言 几种常用的集群方案 主从集群模式 全量同步 增量同步 哨兵机制 什么是哨兵机制 如何保证选主的准确性 如何选主 选举主节点的规则 哨兵进行主节点切换 切片集群 Redi ...

  6. Linux07 /redis的配置、五大数据类型、发布订阅、持久化、主从复制、哨兵配置、集群搭建

    Linux07 /redis的配置.五大数据类型.发布订阅.持久化.主从复制.哨兵配置.集群搭建 目录 Linux07 /redis的配置.五大数据类型.发布订阅.持久化.主从复制.哨兵配置.集群搭建 ...

  7. Redis——(主从复制、哨兵模式、集群)的部署及搭建

    Redis--(主从复制.哨兵模式.集群)的部署及搭建 重点: 主从复制:主从复制是高可用redis的基础,主从复制主要实现了数据的多机备份,以及对于读操作的负载均衡和简单的故障恢复. 哨兵和集群都是 ...

  8. 【集群】Redis的哨兵模式和集群模式

    哨兵模式 哨兵模式是redis高可用的实现方式之一 使用一个或者多个哨兵(Sentinel)实例组成的系统,对redis节点进行监控,在主节点出现故障的情况下,能将从节点中的一个升级为主节点,进行故障 ...

  9. 分布式缓存技术redis学习系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  10. redis + 主从 + 持久化 + 分片 + 集群 + spring集成

    Redis是一个基于内存的数据库,其不仅读写速度快,每秒可以执行大约110000的写操作,81000的读取操作,而且其支持存储字符串,哈希结构,链表,集合丰富的数据类型.所以得到很多开发者的青睐.加之 ...

随机推荐

  1. WCF异常System.ServiceModel.ProtocolException问题处理

    现象: 最近遇到了WCF 服务无法调用的错误,异常如下. System.ServiceModel.ProtocolException, System.ServiceModel, Version=4.0 ...

  2. bitwarden本地搭建(无需购买SSL证书)

    bitwarden本地搭建(无需购买SSL证书) 在安装之前,笔者在这里先声明一下,我安装bitwarden使用的操作环境为ArchLinux,我的想法是,因为这只是一个"密码本" ...

  3. laravel6学习

    web 服务器需要拥有 storage 目录下的所有目录和 bootstrap/cache 目录的写权限

  4. jwt redis,微信登陆知识复习 uniapp 请求封装,统一异常处理 相关, HutoolDemo工具介绍)

    第三节   后台布局搭建,代码可以人工智能来写,但是环境初步搭建需要我们先建起来,所以以下记录快带搭建的过程, 思路: 后台首页的搭建 第一   用到了element--UI 自带的页面布局组件,它就 ...

  5. RHCA rh442 005 (NICE FIFO RR) 资源强占与分配 cpuset

    cgroup 容器 控制服务访问 limits 控制用户 进程管理 [root@servera ~]# ps -aux | more USER PID %CPU %MEM VSZ RSS TTY ST ...

  6. SQL实战从在职到离职(1) 如何处理连续查询

    书接上回,最近离职在家了实在无聊,除了看看考研的书,打打dnf手游,也就只能写写代码,结果昨晚挂在某平台的一个技术出售有人下单了,大概业务是需要帮忙辅导一些面试需要用到的SQL. 回想了下,在该平台接 ...

  7. Linux MySQL 服务设置开机自启动

    @ 目录 前言 简介 一.准备工作 二.操作步骤 2.1 启动MySQL服务 2.2 拷贝配置 2.3 赋值权限 2.4 添加为系统服务 2.5 验证 总结 前言 请各大网友尊重本人原创知识分享,谨记 ...

  8. telegraf 常用命令总结

    本文为博主原创,转载请注明出处: Telegraf 是一个灵活的服务器代理,用于收集和报告指标.它支持插件驱动,这意味着你可以根据需要添加或修改功能. 1.使用telegraf --help 查看te ...

  9. 【Ubuntu】下载安装 12.04.5版本 桌面端

    下载 Download 我擦早上起来才发现自己装的是远古版本了,唉算了,反正也没见过,就当是学个东西把 [下载地址:点我访问] https://releases.ubuntu.com/?_ga=2.2 ...

  10. 在单机条件下,MPI4PY与纯Python多进程代码来比较是否有性能优势???

    如题: 最近在看MPI4PY的代码,但是发现这东西除了编写简洁外(少量代码实现复杂的多进程通信,包括单机和多机),好像也没有别的太多功能,当然MPI本身在多机通信广播.规约上做的很成熟,但是假设我们只 ...