redis——哨兵机制

news/2024/10/7 18:12:40 标签: redis, 数据库, 缓存, 哨兵, 主从复制

redis中提供了哨兵(Sentinel)机制来实现主从集群的自动故障恢复。
主从复制是实现redis高可用性的基石,从节点宕机时我们仍然可以将请求发送给主节点或者其他从节点,而当主节点宕机的时候,无法执行写操作,无法自动选择一个Slave节点切换成Master节点,也就是无法做到自动故障切换,这个时候就需要用到我们的哨兵机制。
在这里插入图片描述
哨兵的作用如下:

  • 监控:Sentinel 会不断检查您的master和slave是否按预期工作
  • 自动故障恢复:如果master故障,Sentinel会将一个slave提升为master。当故障实例恢复后也以新的master为主
  • 通知:Sentinel充当Redis客户端的服务发现来源,当集群发生故障转移时,会将最新信息推送给Redis的客户端

集群监控原理

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

  • 主观下线:如果某sentinel节点发现某实例未在规定时间响应,则认为该实例主观下线

  • 客观下线:若超过指定数量(quorum)的sentinel都认为该实例主观下线,则该实例客观下线。quorum值最好超过Sentinel实例数量的一半。
    在这里插入图片描述

集群故障恢复原理

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

  • 首先会判断slave节点与master节点断开时间长短,如果超过指定值(down-after-milliseconds * 10)则会排除该slave节点
  • 然后判断slave节点的slave-priority值,越小优先级越高,如果是0则永不参与选举
  • 如果slave-prority一样,则判断slave节点的offset值,越大说明数据越新,优先级越高
  • 最后是判断slave节点的运行id大小,越小优先级越高。

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

流程如下:

  • sentinel给备选的slave1节点发送slaveof no one命令,让该节点成为master
  • sentinel给所有其它slave发送slaveof [ip地址] [slave1端口号]命令,让这些slave成为新master的从节点,开始从新的master上同步数据。
  • 最后,sentinel将故障节点标记为slave,当故障节点恢复后会自动成为新的master的slave节点

http://www.niftyadmin.cn/n/5693177.html

相关文章

如何在 SQL 中更新表中的记录?

当你需要修改数据库中已存在的数据时,UPDATE 语句是你的首选工具。 这允许你更改表中一条或多条记录的特定字段值。 下面我将详细介绍如何使用 UPDATE 语句,并提供一些开发建议和注意事项。 基础用法 假设我们有一个名为 employees 的表,…

SQL第12课挑战题

1. 返回customers表中的顾客名称(cust_name)和Orders表中的相关订单号(order_num),并按顾客名称再按订单号对结果进行排序。实际上是尝试两次,一次使用简单的等联结语法,一次使用inner join. 2. 让上一题变得更有用一些…

如何加入优质微信群:解锁微信社交的指南

在信息爆炸的时代,微信群作为连接人与人之间的重要桥梁,不仅承载着日常交流的功能,更成为了学习新知、拓展人脉、分享生活的多元平台。一个优质的微信群,就像是一座宝藏,能够让你在信息的海洋中找到有价值的珍珠&#…

力扣203.移除链表元素

题目链接:203. 移除链表元素 - 力扣(LeetCode) 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6…

Python | 第九章 | 排序和查找

P90 集合课堂练习 2024/9/28 一、集合生成式 集合生成式就是"生成集合的公式"基本语法: {集合元素的表达式for 自定义变量 in 可迭代对象}实例(set_create.py)说明: { ele * 2 for ele in range(1,5)}>得到集合含有2,4,6,8这四个元素, 但…

FineReport 11 在线学习

文章目录 学习路线图FineReport 11 在线学习资源链接分享帆软report 特点 学习路线图 学习生态 自测题 FineReport 11 在线学习资源链接分享 帮助中心https://help.fanruan.com/finereport/ FineReport 入门学习路径https://edu.fanruan.com/guide/finereport 普通报表…

【Python】正则表达式及其在Python中的应用

【Python】正则表达式及其在Python中的应用 1.正则表达式基本格式 1. 字符匹配 普通字符:直接匹配字符本身,如 a 匹配字符 a。特殊字符:需要转义,如 \. 匹配点号 .。 2. 量词 \*:匹配前面的字符零次或多次&#x…

Maven 和 NetBeans:集成与使用

Maven 和 NetBeans:集成与使用 Maven 和 NetBeans 是两款强大的工具,常用于Java开发。Maven是一个项目管理工具,它能够帮助管理项目的构建、报告和文档。NetBeans是一个集成开发环境(IDE),它为Java开发提供了丰富的功能和友好的用户界面。将Maven集成到NetBeans中,可以…