Sentinel(哨兵)是Redis的高可用性解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器,然后由新的主服务器代替已下线的主服务器继续处理命令请求;
启动并初始化:
启动一个Sentinel的命令:redis-sentinel /path/to/your/sentinel.conf 或redis-server /path/to/your/sentinel.conf --sentinel 两命令效果相同。当一个Sentinel启动时,会执行以下步骤:
- 初始化服务器 ;
- 将普通Redis服务器使用的代码替换成Sentinel专用代码;
- 初始化Sentinel状态;
- 根据给定的配置文件,初始化Sentinel的监视主服务器列表;
- 创建连向主服务器的网络连接;
- 初始化服务器:
- Sentinel的本质是运行在特殊模式下的Redis服务器,但与普通服务器在初始化时会载入RDB/AOF文件不同,Sentinel服务器不使用数据库,所以Sentinel初始化时并不会载入以上文件;
- 使用Sentinel专用代码
- 普通Redis服务器使用6379作为监听端口号;Sentinel服务器使用26379作为监听端口号;
- 根据命令表可知,Sentinel模式下的服务器没有get/set/setnx等命令,所以Sentinel模式下的服务器无法对数据库进行操作;客户端可对Sentinel执行的命令:PING、SENTINEL、INFO、SUNBSRIBE、UNSUBSCRIBE、PSUBSCRIBE、PUNSUBSCRIBE
- 初始化Sentinel状态
- 服务器会初始化一个sentinel.c/sentinelState结构(简称“Sentinel状态”),该结构保存了服务器中所有和Sentinel功能有关的状态;、
- 初始化Sentinel状态的master属性
- Sentinel状态中的masters属性是一个字典,该字典中记录了所有被Sentinel监视的主服务器的相关信息:
- 字典的键:被监视主服务器的名字;
- 字典的值:被监视主服务器对应的sentinel.c/sentinelRedisInstance结构;
- sentinelRedisInstance结构,代表一个被Sentinel监视的Redis服务器实例(简称“实例结构”),该实例既可以是主服务器也可以是从服务器或者其他Sentinel;
- 对Sentinel状态的初始化将引发对masters字典的初始化,而masters字典的初始化是根据被载入的Sentinel配置文件来进行的。
- Sentinel状态中的masters属性是一个字典,该字典中记录了所有被Sentinel监视的主服务器的相关信息:
- 创建连向主服务器的网络连接:
- 初始化的最后一步是创建连向被监视主服务器的网络连接,Sentinel将成为主服务器的客户端,它可以向主服务器发送命令,并从命