[redis 源码走读] - sentinel 哨兵 - 原理

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO

联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬

学习必须往深处挖,挖的越深,基础越扎实!

阶段1、深入多线程

阶段2、深入多线程设计模式

阶段3、深入juc源码解析


阶段4、深入jdk其余源码解析


阶段5、深入jvm源码解析

码哥源码部分

码哥讲源码-原理源码篇【2024年最新大厂关于线程池使用的场景题】

码哥讲源码【炸雷啦!炸雷啦!黄光头他终于跑路啦!】

码哥讲源码-【jvm课程前置知识及c/c++调试环境搭建】

​​​​​​码哥讲源码-原理源码篇【揭秘join方法的唤醒本质上决定于jvm的底层析构函数】

码哥源码-原理源码篇【Doug Lea为什么要将成员变量赋值给局部变量后再操作?】

码哥讲源码【你水不是你的错,但是你胡说八道就是你不对了!】

码哥讲源码【谁再说Spring不支持多线程事务,你给我抽他!】

终结B站没人能讲清楚红黑树的历史,不服等你来踢馆!

打脸系列【020-3小时讲解MESI协议和volatile之间的关系,那些将x86下的验证结果当作最终结果的水货们请闭嘴】

redis 有主从数据复制功能。多个实例通过读写分离,使得单进程的 redis 可以充分利用多核性能。

当某些 redis 实例出现故障怎么办,服务还能正常工作吗?这时候故障管理者 sentinel 应运而生。它负责 redis 集群管理工作:检查故障,发现故障,转移故障,从而保证集群高可用。


1. sentinel 作用

  1. 监控: 检查 redis 节点健康状况。
  2. 故障转移:当 redis 集群节点出现故障时,及时自动进行故障转移。
  3. 通知:检测到 redis 实例出现故障,通过 api 进行通知用户。
  4. 提供配置:用户可以通过命令查询当前 redis 集群相关信息。

2. 集群

2.1. 角色关系

redis 高可用集群,有三种角色:masterslavesentinel

  • slave 与 master 通信,为了数据复制。
  • sentinel 与 master / slave 通信,为了对 master / slave 进行管理:检查故障,发现故障,转移故障。
  • sentinel 节点之间通信,为了选举 leader,通过 leader 进行集群故障转移。


2.2. 节点链接

sentinel 只要配置 redis 主服务(master)信息即可与三个角色建立联系。

 
    # sentinel.conf
    # sentinel monitor <master-name> <ip> <redis-port> <quorum>
    sentinel monitor mymaster 127.0.0.1 6379 2

法定人数。作用:多个 sentinel 进行相互选举,有超过一定法定人数选举某人为领导,那么他就成为 sentinel 的领导,领导负责故障转移。这个法定人数,可以配置,一般是 sentinel 个数一半以上 (n/2 + 1) 比较合理。

 
    sentinel <--> master,sentinel <--> slave,sentinel A <--> sentinel B
  • sentinel 向 master 获取 slave 信息,与 slave 建立连接。

    master 与 slave 是主从关系,master 拥有所有 slave 的链接信息。sentinel 只要配置 master 的 ip 和 port,链接 master,并通过 info 命令就能获得 slave 的 ip 和 port 信息。这样 sentinel 就可以与 slave 建立链接。

  • 多个 sentinel 相互链接。

    通过以上步骤,sentinel 可以链接 master / slave。而多个 sentinel 通过发布/订阅 master / slave 的 __sentinel__:hello 频道进行发布和接收信息。多个 sentinel 不需要配置对方的信息,就能获得通过这个流程获得其它 sentinel 的信息并进行相互链接。


3. 故障

sentinel 监控流程:检测故障 -> 发现故障 -> 处理故障。

redis 集群三个角色 sentinel / master / slave 都可能出现故障,当 redis master 出现故障,sentinel leader 对集群进行故障转移。


3.1. 检测故障

角色节点之间建立了联系,那么 sentinel 与其它节点通过定期发送相应命令(PING / INFO / PUBLISH)进行相互通信。


3.2. 发现故障

  1. 当对方(master)命令回复异常或者长期收不到对方回复,那么 sentinel 发现了故障,暂时将该节点标记为主动下线。
  2. sentinel 向其它 sentinel 节点询问,是否同样检测到该结点出现故障。
  3. 其它节点回复确认故障,当前 sentinel 将该节点标记为客观下线。


3.3. 故障转移

  • sentinel 选举 leader。
  • sentinel leader 根据规则筛选合适的 slave 作为 master。
  • 通知其它 slave 链接新的 master。
  • 旧 master 如果重新上线,被 sentinel 设置成为新 master 的 slave。
  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值