Redis Sentinel 源码分析 - Sentinel的初始化

来源:华为git

做者:Wen Huigithub

转载:中间件小哥redis

Redis Sentinel 是Redis提供的高可用模型解决方案。Sentinel能够自动监测一个或多个Redis主备实例,并在主实例宕机的状况下自动实行主备倒换。本系列经过做者对Redis Sentinel源码的理解,详细说明Sentinel的代码实现方式。服务器

Sentinel使用Redis内核相同的事件驱动代码框架, 但Sentinel有本身独特的初始化步骤。在这篇文章里,做者会介绍Sentinel与Redis服务器不一样的初始化部分。框架

咱们能够经过redis-sentinel <path-to-configfile> 或者 redis-server <path-to-configfile> --sentinel这两种方式启动并运行Sentinel实例,这两种方式是等价的。在Redis server.c 的main函数中,咱们会看到Redis如何判断用户指定以Sentinel方式运行的逻辑:ide

Redis Sentinel 源码分析 - Sentinel的初始化

其中checkForSentinelMode函数会监测如下两种条件:函数

  1. 程序使用redis-sentinel可执行文件执行。

程序参数列表中有--sentinel 标志。源码分析

以上任何一种条件成立则Redis会使用Sentinel的方式运行。ui

Redis Sentinel 源码分析 - Sentinel的初始化

在Redis 判断是否以Sentinel的方式运行之后,咱们会看到以下代码段:设计

Redis Sentinel 源码分析 - Sentinel的初始化

在initSentinelConfig函数中,会使用Sentinel特定的端口(默认为26379)来替代Redis的默认端口(6379)。另外,在Sentinel模式下,须要禁用服务器运行保护模式。

Redis Sentinel 源码分析 - Sentinel的初始化

与此同时,initSentinel函数会作以下操做:

Redis Sentinel 源码分析 - Sentinel的初始化

使用Sentinel自带的命令表去替代Redis服务器原生的命令. Sentinel 支持的命令表以下:

Redis Sentinel 源码分析 - Sentinel的初始化

初始化Sentinel主状态结构,Sentinel主状态的定义及注释以下。

Redis Sentinel 源码分析 - Sentinel的初始化

其中masters字典指针中的每一个值都对应着一个Sentinel检测的主实例。

在读取配置信息后,Redis服务器主函数会调用sentinelIsRunning函数, 作如下几个工做:

  1. 检查配置文件是否被设置,而且检查程序对配置文件是否有写权限,由于若是Sentinel状态改变的话,会不断将本身当前状态记录在配置文件中。

  2. 若是在配置文件中指定运行ID,Sentinel 会使用这个ID做为运行ID,相反地,若是没有指定运行ID,Sentinel会生成一个ID用来做为Sentinel的运行ID。

  3. 对全部的Sentinel监测实例产生初始监测事件。

Redis Sentinel 源码分析 - Sentinel的初始化

参考资料:

https://github.com/antirez/redis

https://redis.io/topics/sentinel

Redis设计与实现第二版黄健宏著

相关文章
相关标签/搜索