Redis原理篇——哨兵机制

2024-06-09 19:28
文章标签 redis 哨兵 机制 原理篇

本文主要是介绍Redis原理篇——哨兵机制,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Redis原理篇——哨兵机制

    • 1.Redis哨兵
    • 2.哨兵工作原理
      • 2.1.哨兵作用
      • 2.2.状态监控
      • 2.3.选举leader
      • 2.4.failover

1.Redis哨兵

主从结构中master节点的作用非常重要,一旦故障就会导致集群不可用。那么有什么办法能保证主从集群的高可用性呢?

2.哨兵工作原理

Redis提供了哨兵(Sentinel)机制来监控主从集群监控状态,确保集群的高可用性。

2.1.哨兵作用

哨兵集群作用原理图:

在这里插入图片描述

哨兵的作用如下:

  • 状态监控Sentinel 会不断检查你的 masterslave 是否按预期工作
  • 故障恢复(failover):如果 master 故障,Sentinel 会将一个 slave 提升为 master 。当故障实例恢复后会成为 slave
  • 状态通知Sentinel 充当 Redis 客户端的服务发现来源,当集群发生 failover 时,会将最新集群信息推送给 Redis 的客户端

那么问题来了, Sentinel 怎么知道一个 Redis 节点是否宕机呢?

2.2.状态监控

官方文档:

High availability with Redis Sentinel

Sentinel 基于心跳机制监测服务状态,每隔1秒向集群的每个节点发送ping命令,并通过实例的响应结果来做出判断:

  • 主观下线(sdown):如果某sentinel节点发现某Redis节点未在规定时间响应,则认为该节点主观下线。
  • 客观下线(odown):若超过指定数量(通过 quorum 设置)的sentinel都认为该节点主观下线,则该节点客观下线。quorum值最好超过Sentinel节点数量的一半,Sentinel节点数量至少3台。

如图:

在这里插入图片描述
一旦发现master故障,sentinel需要在salve中选择一个作为新的master,选择依据是这样的:

  • 首先会判断 slave 节点与 master 节点断开时间长短,如果超过 down-after-milliseconds * 10 则会排除该slave节点
  • 然后判断 slave 节点的 slave-priority值,越小优先级越高,如果是 0 则永不参与选举(默认都是1)。
  • 如果 slave-prority 一样,则判断 slave 节点的 offset 值,越大说明数据越新,优先级越高
  • 最后是判断 slave 节点的 run_id 大小,越小优先级越高(通过 info server 可以查看 run_id )。

问题来了,当选出一个新的master后,该如何实现身份切换呢?
大概分为两步:

  • 在多个 sentinel 中选举一个 leader
  • leader 执行 failover

2.3.选举leader

首先,Sentinel 集群要选出一个执行 failoverSentinel 节点,可以成为 leader 。要成为 leader 要满足两个条件:

  • 最先获得超过半数的投票
  • 获得的投票数不小于 quorum
    sentinel 投票的原则有两条:
  • 优先投票给目前得票最多的
  • 如果目前没有任何节点的票,就投给自己
    比如有3个 sentinel 节点,s1s2s3 ,假如 s2 先投票:
  • 此时发现没有任何人在投票,那就投给自己。s2 得 1 票
  • 接着 s1s3 开始投票,发现目前 s2 票最多,于是也投给 s2s2 得 3 票
  • s2 称为 leader ,开始故障转移
    不难看出,谁先投票,谁就会称为 leader ,那什么时候会触发投票呢?
    答案是 第一个确认 master 客观下线的人会立刻发起投票,一定会成为 leader

OK,sentinel找到 leader 以后,该如何完成 failover 呢?

2.4.failover

我们举个例子,有一个集群,初始状态下 7001 为 master ,7002 和 7003 为 slave

在这里插入图片描述

假如 master 发生故障,slave1 当选。则故障转移的流程如下:

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

在这里插入图片描述

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

在这里插入图片描述

  1. 最后,当故障节点恢复后会接收到哨兵信号,执行 slaveof 192.168.150.101 7002 命令,成为 slave

在这里插入图片描述

参考:

https://www.bilibili.com/video/BV1S142197x7?p=145&vd_source=f586bbf89de5904ba5a05a8c1d18f1c4

这篇关于Redis原理篇——哨兵机制的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

Redis Cluster模式配置

《RedisCluster模式配置》:本文主要介绍RedisCluster模式配置,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录分片 一、分片的本质与核心价值二、分片实现方案对比 ‌三、分片算法详解1. ‌范围分片(顺序分片)‌2. ‌哈希分片3. ‌虚

Maven 配置中的 <mirror>绕过 HTTP 阻断机制的方法

《Maven配置中的<mirror>绕过HTTP阻断机制的方法》:本文主要介绍Maven配置中的<mirror>绕过HTTP阻断机制的方法,本文给大家分享问题原因及解决方案,感兴趣的朋友一... 目录一、问题场景:升级 Maven 后构建失败二、解决方案:通过 <mirror> 配置覆盖默认行为1. 配置示

Springboot整合Redis主从实践

《Springboot整合Redis主从实践》:本文主要介绍Springboot整合Redis主从的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言原配置现配置测试LettuceConnectionFactory.setShareNativeConnect

Redis过期删除机制与内存淘汰策略的解析指南

《Redis过期删除机制与内存淘汰策略的解析指南》在使用Redis构建缓存系统时,很多开发者只设置了EXPIRE但却忽略了背后Redis的过期删除机制与内存淘汰策略,下面小编就来和大家详细介绍一下... 目录1、简述2、Redis http://www.chinasem.cn的过期删除策略(Key Expir

Go语言中Recover机制的使用

《Go语言中Recover机制的使用》Go语言的recover机制通过defer函数捕获panic,实现异常恢复与程序稳定性,具有一定的参考价值,感兴趣的可以了解一下... 目录引言Recover 的基本概念基本代码示例简单的 Recover 示例嵌套函数中的 Recover项目场景中的应用Web 服务器中

Redis指南及6.2.x版本安装过程

《Redis指南及6.2.x版本安装过程》Redis是完全开源免费的,遵守BSD协议,是一个高性能(NOSQL)的key-value数据库,Redis是一个开源的使用ANSIC语言编写、支持网络、... 目录概述Redis特点Redis应用场景缓存缓存分布式会话分布式锁社交网络最新列表Redis各版本介绍旧

Java如何从Redis中批量读取数据

《Java如何从Redis中批量读取数据》:本文主要介绍Java如何从Redis中批量读取数据的情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一.背景概述二.分析与实现三.发现问题与屡次改进3.1.QPS过高而且波动很大3.2.程序中断,抛异常3.3.内存消

Redis中的Lettuce使用详解

《Redis中的Lettuce使用详解》Lettuce是一个高级的、线程安全的Redis客户端,用于与Redis数据库交互,Lettuce是一个功能强大、使用方便的Redis客户端,适用于各种规模的J... 目录简介特点连接池连接池特点连接池管理连接池优势连接池配置参数监控常用监控工具通过JMX监控通过Pr

Jvm sandbox mock机制的实践过程

《Jvmsandboxmock机制的实践过程》:本文主要介绍Jvmsandboxmock机制的实践过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、背景二、定义一个损坏的钟1、 Springboot工程中创建一个Clock类2、 添加一个Controller