《Redis设计与实现》第十六章 Sentinel

Redis Sentinel作为高可用解决方案,监控并自动故障转移主服务器。Sentinel启动涉及初始化服务器、替换专用代码、建立主服务器连接。它周期性发送INFO命令获取主从信息,检测下线状态,并在客观下线时执行故障转移,包括选举新主服务器、修改从服务器复制目标以及将旧主转为从。Sentinel之间通过频道消息进行通信,选举算法采用Raft。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Sentinel是Redis高可用的解决方案,哨兵。HA

Sentinel 组成的sentinel系统可以监视任意多个主服务器以及主服务器属下的所有从服务器,并在被监视的主服务器进入下贱状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,继续处理请求。

-w373

也就是说当S1断线了,然后会选举S2 3 4 其中一个成为新的主服务器。
-w760

16.1 启动并初始化Sentinel

redis-sentinel /path/to/your/sentinel.conf

启动一个Sentinel时,需要执行以下步骤:
1、初始化服务器
2、将普通Redis服务器使用的状态代码换成Sentinel专用代码
3、初始化Sentinel状态
4、根据给定的配置文件,初始化Sentinel的监视主服务器列表
5、创建连接主服务器的网络连接。

那么问题来了?如果Sentinel服务器挂了怎么办?单点故障?所以还是Sentinel也要主从。

16.1.1 初始化服务器

Sentinel是特殊的redis服务器,所以要先启动redis服务器。

-w723
有点像Znode节点的一些特性。

16.1.2 使用Sentinel专用代码

启动Sentinel的第二个步骤就是将一部分普通的Redis服务器使用的代码替换成Sentinel专用代码。
-w706

16.1.3 初始化Sentinel状态

-w468

16.1.4 初始化Sentinel状态和masters属性

1、字典的键时主服务器的名字
2、值就是主服务器的对应sentinelRedisInstance实例结构
-w454
-w640
-w529

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

-w666
-w338

16.2 获取主服务器信息

Sentinel默认会以每十秒一次的频率,通过命令连接向被监视的主服务器发送INFO命令,并通过INFO命令的回复来获取当前信息。

-w318
回复slave、runid等各种信息。

-w754

16.3 获取从服务器信息

-w404

会恢复run_id\role\host\port\slave_priority\偏移量。

16.4 向主服务器和从服务器发送信息

在默认情况下sentinel会两秒一次发送hello命令检测心跳。

-w683
告诉别人自己的ip、端口
id、当前配置纪元、主服务器名字、ip端口。

16.5 接受来自主从的频道消息

-w351
-w384

16.5.1 更新sentinels字典

16.5.2 创建连向其他Sentinel的命令连接

-w275

16.6 检测主观下线状态

-w703
-w281

16.7 检测客观下线状态

-w743

16.7.1 发送SENTINEL is-master-down-by-addr

客观下线后会进行故障转移。

16.8 选举领头Sentinel

-w373

16.9 故障转移

-w758

16.9.1 选出新的主服务器

-w322

16.9.2 修改从服务器的复制目标

-w446

16.9.3 将旧的主服务器变为从服务器

-w719

16.10 重点回顾

  • sentinel只是特殊的redis服务器,与普通redis有细微的命令表差别。
  • sentinel会读入用户配置的文件创建命令连接和订阅连接。
  • sentinel发送info命令来获得信息。
  • sentinel发送info信息来获取从服务器信息。故障转移时是1秒一次。
  • 同一个主的多个sentinel会以2秒一次发送__sentinel__:hello频道消息。
  • 每个sentitnel也会接受其他sentinel的频道消息。
  • 选举算法是raft算法
  • sentinel主观下线时会看是否客观下线,足够多的客观下线就会重新选举 故障转移。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值