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

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

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

也就是说当S1断线了,然后会选举S2 3 4 其中一个成为新的主服务器。
《Redis设计与实现》第十六章 Sentinel

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服务器。

《Redis设计与实现》第十六章 Sentinel
有点像Znode节点的一些特性。

16.1.2 使用Sentinel专用代码

启动Sentinel的第二个步骤就是将一部分普通的Redis服务器使用的代码替换成Sentinel专用代码。
《Redis设计与实现》第十六章 Sentinel

16.1.3 初始化Sentinel状态

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

16.1.4 初始化Sentinel状态和masters属性

1、字典的键时主服务器的名字
2、值就是主服务器的对应sentinelRedisInstance实例结构
《Redis设计与实现》第十六章 Sentinel
《Redis设计与实现》第十六章 Sentinel
《Redis设计与实现》第十六章 Sentinel

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

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

16.2 获取主服务器信息

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

《Redis设计与实现》第十六章 Sentinel
回复slave、runid等各种信息。

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

16.3 获取从服务器信息

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

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

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

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

《Redis设计与实现》第十六章 Sentinel
告诉别人自己的ip、端口
id、当前配置纪元、主服务器名字、ip端口。

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

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

16.5.1 更新sentinels字典

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

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

16.6 检测主观下线状态

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

16.7 检测客观下线状态

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

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

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

16.8 选举领头Sentinel

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

16.9 故障转移

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

16.9.1 选出新的主服务器

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

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

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

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

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

16.10 重点回顾

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

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

相关文章:

  • 2022-01-03
  • 2021-10-28
  • 2021-10-12
  • 2022-12-23
  • 2022-12-23
  • 2021-04-11
  • 2022-12-23
猜你喜欢
  • 2021-12-12
  • 2021-12-20
  • 2021-04-17
  • 2021-10-21
  • 2021-10-19
  • 2021-08-22
  • 2021-04-28
相关资源
相似解决方案