《Redis设计与实现》夯实之路(十二) 第十六章 SENTINEL

《Redis设计与实现》学习笔记(十二) 第十六章 SENTINEL




一. 启动并初始化Sentinel

1. 初始化服务器

  • Sentinel本质上只是特殊模式下的Redis服务器
  • Sentinel不使用RDB或AOF初始化

2. 使用Sentinel专用代码

3. 初始化Sentinel状态

  • 服务器初始化sentinelState结构

4. 初始化Sentinel状态的master属性

  • Master字典记录了所有监视的主服务器信息
  • 字典的键是主服务器的名字,值为sentinelRedisInstance实例结构

5. 创建连向主服务器的网络连接

  • Sentinel将成为主服务器的客户端,可以发送命令,接收回复
  • 会创建两个网络连接:一个命令连接,一个订阅连接

二. 获取主服务器信息

Sentinel会以10s一次向主服务器发送INFO命令


三. 获取从服务器信息

  • 创建实例结构,创建命令订阅连接
  • 同样每十秒发送一次INFO,分析回复

四. 向主服务器和从服务器发送信息

在sentinel:hello频道publish信息


五. 接收来自主服务器和从服务器的频道信息

  • 其他sentinel可以从hello频道获取发布sentinel的信息
    • 更新sentinel字典,得到其他监视着同一主服务器的sentinel信息
    • 创建连向其他sentinel的命令连接,最终形成同一服务器的多sentinel互联网络

六. 检测主观下线状态

  • 默认情况sentinel会每秒发送一次PING命令,根据回复的信息判断主服务器是否下线
  • Sentinel通过down-after-ms判断:如果在这个ms内没有返回有效回复,则将该主服务器的flags里的down标识打开,主观判定为下线

七. 检测客观下线状态

  • 当自己主观判断下线后,还需要向其他sentinel征询意见,如果半数以上也认为下线,则判定为客观下线
  • 发送is-master-down-by-addr给其他sentinel,根据回复统计数量

八. 选举领头sentinel

  • 当主服务器客观下线后,sentinel们需要选举产生一个领头sentinel进行故障转移
  • 一个配置纪元里,所有sentinel都有一次投票机会,且领头sentinel不能更改
  • 规则:先到先得,看谁先发出申请

九. 故障转移

  • 三个步骤
    1. 将一个从服务器转换为主服务器,slaveof no one
    2. 将其他从服务器复制这个新的主服务器, slave of xxx
    3. 将已下线的主服务器改为新主服务器的从服务器
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值