《Redis 核心技术与实战》课程学习笔记(六)

这篇具有很好参考价值的文章主要介绍了《Redis 核心技术与实战》课程学习笔记(六)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

哨兵集群

哨兵机制的基本流程

  • 在 Redis 主从集群中,哨兵机制是实现主从库自动切换的关键机制。

  • 哨兵其实就是一个运行在特殊模式下的 Redis 进程,主从库实例运行的同时,它也在运行。哨兵主要负责的就是三个任务:监控、选主(选择主库)和通知。
    《Redis 核心技术与实战》课程学习笔记(六),微服务,数据库,redis,学习,笔记

    • 监控
      • 哨兵进程在运行时,周期性地给所有的主从库发送 PING 命令,检测它们是否仍然在线运行。
      • 如果从库没有在规定时间内响应哨兵的 PING 命令,哨兵就会把它标记为“下线状态”。
      • 同样,如果主库也没有在规定时间内响应哨兵的 PING 命令,哨兵就会判定主库下线,然后开始自动切换主库的流程。
    • 选主
      • 主库挂了以后,哨兵就需要从很多个从库里,按照一定的规则选择⼀个从库实例,把它作为新的主库。
      • 这⼀步完成后,现在的集群里就有了新主库。
    • 通知
      • 在执行通知任务时,哨兵会把新主库的连接信息发给其他从库,让它们执行 replicaof 命令,和新主库建立连接,并进行数据复制。
      • 同时,哨兵会把新主库的连接信息通知给客户端,让它们把请求操作发到新主库上。

主观下线和客观下线

  • 哨兵进程会使用 PING 命令检测它自己和主、从库的网络连接情况,用来判断实例的状态。
  • 如果哨兵发现主库或从库对 PING 命令的响应超时了,那么,哨兵就会先把它标记为“主观下线”。
    • 如果检测的是从库,那么,哨兵简单地把它标记为“主观下线”就行了,因为从库的下线影响一般不太大,集群的对外服务不会间断。
    • 但是,如果检测的是主库,那么,哨兵还不能简单地把它标记为“主观下线”,开启主从切换。因为很有可能哨兵误判了,其实主库并没有故障。一旦启动了主从切换,后续的选主和通知操作都会带来额外的计算和通信开销。
      • 哨兵机制通常会采用多实例组成的集群模式进行部署,这也被称为哨兵集群。
      • 引入多个哨兵实例一起来判断,就可以避免单个哨兵因为自身网络状况不好,而误判主库下线的情况。
      • 同时,多个哨兵的网络同时不稳定的概率较小,由它们一起做决策,误判率也能降低。
      • 在判断主库是否下线时,不能由一个哨兵说了算,只有大多数的哨兵实例,都判断主库已经“主观下线”了,主库才会被标记为“客观下线”,这个叫法也是表明主库下线成为⼀个客观事实了。这个判断原则就是:少数服从多数。同时,这会进一步触发哨兵开始主从切换流程。

如何选定新主库?

  • 哨兵选择新主库的过程称为“筛选+打分”。
    • 简单来说,我们在多个从库中,先按照一定的筛选条件,把不符合条件的从库去掉。
      • 一般情况下,我们肯定要先保证所选的从库仍然在线运行。
      • 除了要检查从库的当前在线状态,还要判断它之前的网络连接状态。
      • 如果从库总是和主库断连,而且断连次数超出了一定的阈值,我们就有理由相信,这个从库的网络状况并不是太好,就可以把这个从库筛掉了。
    • 然后,我们再按照一定的规则,给剩下的从库逐个打分,将得分最高的从库选为新主库。
      • 我们可以分别按照三个规则依次进行三轮打分,这三个规则分别是从库优先级从库复制进度以及从库 ID号。
      • 只要在某一轮中,有从库得分最高,那么它就是主库了,选主过程到此结束。
      • 第一轮:优先级最高的从库得分高。
        • 可以通过 slave-priority 配置项,给不同的从库设置不同优先级。
      • 第二轮:和旧主库同步程度最接近的从库得分高。
        • 我们想要找的从库,它的 slave_repl_offset 需要最接近 master_repl_offset。
        • 如果在所有从库中,有从库的 slave_repl_offset 最接近 master_repl_offset,那么它的得分就最高,可以作为新主库。
      • 第三轮:ID 号小的从库得分高。
        • 在优先级和复制进度都相同的情况下,ID 号最小的从库得分最高,会被选为新主库。

哨兵集群:哨兵挂了,主从库还能切换吗?

  • 实际上,一旦多个实例组成了哨兵集群,即使有哨兵实例出现故障挂掉了,其他哨兵还能继续协作完成主从库切换的工作,包括判定主库是不是处于下线状态,选择新主库,以及通知从库和客户端。
  • 在配置哨兵的信息时,我们只需要用到sentinel monitor <master-name> <ip> <redis-port> <quorum>,设置主库的 IP 和端口,并没有配置其他哨兵的连接信息。

基于 pub/sub 机制的哨兵集群组成

  • 哨兵实例之间可以相互发现,要归功于 Redis 提供的 pub/sub 机制,也就是发布/订阅机制。
    《Redis 核心技术与实战》课程学习笔记(六),微服务,数据库,redis,学习,笔记

    • 哨兵只要和主库建立起了连接,就可以在主库上发布消息了,比如说发布它自己的连接信息(IP和端口)。
    • 同时,它也可以从主库上订阅消息,获得其他哨兵发布的连接信息。
    • 当多个哨兵实例都在主库上做了发布和订阅操作后,它们之间就能知道彼此的IP地址和端口。
  • 为了区分不同应用的消息,Redis 会以频道的形式,对这些消息进行分门别类的管理。

    • 所谓的频道,实际上就是消息的类别。
    • 当消息类别相同时,它们就属于同一个频道。
    • 只有订阅了同一个频道的应用,才能通过发布的消息进行信息交换。
  • 在主从集群中,主库上有一个名为 “sentinel:hello” 的频道,不同哨兵就是通过它来相互发现,实现互相通信的。

  • 哨兵除了彼此之间建立起连接形成集群外,还需要和从库建立连接。这是因为,在哨兵的监控任务中,它需要对主从库都进行心跳判断,而且在主从库切换完成后,它还需要通知从库,让它们和新主库进行同步。

    • 哨兵是如何知道从库的 IP 地址和端口的呢?这是由哨兵向主库发送 INFO 命令来完成的。
    • 我们仍然可以依赖 pub/sub 机制,来帮助我们完成哨兵和客户端间的信息同步。

基于 pub/sub 机制的客户端事件通知

《Redis 核心技术与实战》课程学习笔记(六),微服务,数据库,redis,学习,笔记

  • 客户端读取哨兵的配置文件后,可以获得哨兵的地址和端口,和哨兵建立网络连接。
  • 然后,我们可以在客户端执行订阅命令,来获取不同的事件消息。

由哪个哨兵执行主从切换?

《Redis 核心技术与实战》课程学习笔记(六),微服务,数据库,redis,学习,笔记文章来源地址https://www.toymoban.com/news/detail-544069.html

  • 任何一个实例只要自身判断主库“主观下线”后,就会给其他实例发送 is-master-down-by-addr 命令。
    • 接着,其他实例会根据自己和主库的连接情况,做出 Y 或 N 的响应,Y 相当于赞成票,N 相当于反对票。
    • 一个哨兵获得了仲裁所需的赞成票数后,就可以标记主库为“客观下线”。
    • 这个所需的赞成票数是通过哨兵配置文件中的 quorum 配置项设定的。
    • 此时,这个哨兵就可以再给其他哨兵发送命令,表明希望由自己来执行主从切换,并让所有其他哨兵进行投票。
    • 这个投票过程称为“Leader选举”。
    • 因为最终执行主从切换的哨兵称为 Leader,投票过程就是确定 Leader。
  • 在投票过程中,任何一个想成为 Leader 的哨兵,要满足两个条件:第一,拿到半数以上的赞成票;第二,拿到的票数同时还需要大于等于哨兵配置文件中的 quorum 值。

到了这里,关于《Redis 核心技术与实战》课程学习笔记(六)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《kafka 核心技术与实战》课程学习笔记(五)

    严格来说这些配置并不单单指 Kafka 服务器端的配置,其中既有 Broker 端参数,也有主题级别的参数、JVM 端参数和操作系统级别的参数。 Broker 端参数也被称为静态参数(Static Configs): 所谓 静态参数 ,是指你必须在 Kafka 的配置文件 server.properties 中进行设置的参数 ,不管你

    2024年02月11日
    浏览(56)
  • 《kafka 核心技术与实战》课程学习笔记(十)

    Apache Kafka 的所有通信都是基于 TCP 的,而不是基于 HTTP 或其他协议。 在开发客户端时,能够利用 TCP 本身提供的一些高级功能,比如多路复用请求以及同时轮询多个连接的能力。 除了 TCP 提供的这些高级功能有可能被 Kafka 客户端的开发人员使用之外,目前已知的 HTTP 库在很多

    2024年02月11日
    浏览(65)
  • 《kafka 核心技术与实战》课程学习笔记(七)

    压缩(compression)秉承了用时间去换空间的经典 trade-off 思想,具体来说就是用 CPU 时间去换磁盘空间或网络 I/O 传输量,希望以较小的 CPU 开销带来更少的磁盘占用或更少的网络 I/O 传输。 目前 Kafka 共有两大类消息格式,社区分别称之为 V1 版本和 V2 版本。 不论是哪个版本,

    2024年02月11日
    浏览(49)
  • 《kafka 核心技术与实战》课程学习笔记(九)

    拦截器基本思想就是允许应用程序在不修改逻辑的情况下,动态地实现一组可插拔的事件处理逻辑链。 它能够在主业务操作的前后多个时间点上插入对应的“拦截”逻辑。 Spring MVC 拦截器的工作原理: Kafka 拦截器借鉴了这样的设计思路:可以在消息处理的前后多个时点动态

    2024年02月12日
    浏览(54)
  • 《kafka 核心技术与实战》课程学习笔记(八)

    Kafka 只对“已提交”的消息(committed message)做有限度的持久化保证。 第一个核心要素是“已提交的消息”。 当 Kafka 的若干个 Broker 成功地接收到一条消息并写入到日志文件后,它们会告诉生产者程序这条消息已成功提交。 可以选择只要有一个 Broker 成功保存该消息就算是已

    2024年02月16日
    浏览(43)
  • 《MySQL 实战 45 讲》课程学习笔记(四)

    索引的出现其实就是为了提高数据查询的效率,就像书的目录一样。 哈希表 哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。 哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位

    2024年02月14日
    浏览(48)
  • 《Kubernetes入门实战课》课程学习笔记(一)

    现在 Kubernetes 已经没有了实际意义上的竞争对手,它的地位就如同 Linux 一样,成为了事实上的云原生操作系统,是构建现代应用的基石。 现代应用是什么? 是微服务,是服务网格,这些统统要围绕着容器来开发、部署和运行。 使用容器就必然要用到容器编排技术,在现在只

    2024年02月17日
    浏览(74)
  • 唐宇迪机器学习实战课程笔记(全)

    机器学习模型的参数,不是直接数学求解,而是利用数据,进行迭代epoch,梯度下降优化求解。 目标:更好的拟合连续函数(分割连续样本空间的平面h(·)) ε ( i ) varepsilon^{(i)} ε ( i ) 是 真实值 y ( i ) y^{(i)} y ( i ) 与 预测值 h θ ( x ) = θ T x ( i ) h_theta (x)=theta^Tx^{(i)} h θ ​ ( x )

    2024年02月16日
    浏览(46)
  • 【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(一)

    课程地址: 黑马程序员HarmonyOS4+NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发 (本篇笔记对应课程第 1 - 2节) 开场白,HarmonyOS 的一个简介,话不多说,直接看图吧! 工欲善其事必先利其器,开发准备需要两件事:1、开发文档;2、开发工具 打开鸿蒙官方网站,

    2024年04月24日
    浏览(46)
  • 北大肖臻老师《区块链技术与应用》系列课程学习笔记[27]以太坊-反思

    目录 一、智能合约的反思         1.Is smart contract really smart?         2. Irrevocability is a double edged sword.         3. Nothing is irrevocable. 二、语言设计上的反思         1.Is solidity the right programming language?         2.编写智能合约的语言应该有什么样的表达力? 三

    2024年01月20日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包