(二)、Redis Sentinel 架构【慕课视频笔记-第七章】

视频下载地址:慕课Redis视频教程

1、概述

Sentinel(哨兵)是Redis高可用的解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主从节点,实现故障判断、故障转移、通知客户端。

2、流程

  1. 多个sentinel发现并确认master有问题。
  2. 选举出一个sentinel作为领导。
  3. 选出一个slave作为master。
  4. 通知其余slave成为新的master的slave
  5. 通知客户端主从变化。
  6. 等待老的master复活成为新master的slave。

3、安装配置

在这里插入图片描述

Redis主节点配置:
在这里插入图片描述

Redis从节点配置:
在这里插入图片描述

Redis Sentinel配置:

  • 2表示两台sentinel对redis master 进行监控,故障发现
  • 30000毫秒如果无反应,则判断主观下线
  • 转移时间 failover-timeout

在这里插入图片描述

4、客户端连接Sentinel

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.1、Jedis代码实现

String masterName = null;
Set<String> sentinelSet = null;
GenericObjectPoolConfig poolConfig = null;
int timeout = 0;

JedisSentinelPool jedisSentinelPool = new JedisSentinelPool(masterName,sentinelSet,poolConfig,timeout);
Jedis jedis = null;

try {
    jedis = jedisSentinelPool.getResource();
    //jedis command
}catch (Exception e){
    //exception
}finally {
    if (jedis!=null){
        jedis.close();
    }
}

5、三个定时器

  1. 每10秒每个sentinel对master和slave执行info

    • 发现slave节点
    • 确认主从关系
      在这里插入图片描述
  2. 每2秒每个sentinel通过master节点的channel交换信息(pub/sub)

    • 通过_sentinel_:hello频道交互
    • 交互对节点的"看法"和自身信息
      在这里插入图片描述
  3. 每1秒每个sentinel对其他sentinel和redis执行ping

    • 心跳检测,失败判定依据
      在这里插入图片描述

6、主观下线和客观下线

quorum 法定人数,判定是否客观下线,最好是奇数,sentinel个数%2+1
在这里插入图片描述

7、领导者选举

  • 原因:只有一个sentinel节点完成故障转移
  • 选举:通过sentinel is-master-dowen-by-addr命令都希望成为领导者
  1. 每个做主观下线的Sentinel节点向其他Sentinel节点发送命令,要求将它设置为领导者
  2. 收到命令的Sentinel节点如果没有同意通过其他Sentinel节点发送的命令,那么将同意该请求,否则拒绝
  3. 如果该Sentinel节点发现自己的票数已经超过Sentinel集合半数且超过quornum,那么它将成为领导者
  4. 如果此过程有多个Sentinel节点成为了领导者,那么将等待一段时间重新进行选举。
    在这里插入图片描述

8、故障转移(sentinel领导者节点完成)

  1. 从slave节点中选出一个"合适的"节点作为新的master节点
  2. 对上面的slave节点执行slaveof no one命令让其成为master节点
  3. 向剩余的slave节点发送命令,让他们成为新master节点的slave节点,复制规则和parallel-syncs参数有关。
  4. 更新对原来master节点配置为slave,并保持着对其"关注",当其恢复后命令它去复制新的master节点。

9、选择最好的slave节点

  1. 选择slave-priority(slave节点优先级)最高的slave节点,如果存在则返回,不存在则继续
  2. 选择复制偏移量最大的slave节点(复制的最完整),如果存在则返回,不存在则继续
  3. 选择runId最小的slave节点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值