Sentinel哨兵机制

举报
周杰伦本人 发表于 2022/06/25 17:10:50 2022/06/25
【摘要】 Sentinel哨兵机制 启动并初始化Sentinel 1. 初始化服务器 2. 将普通Redis服务器使用的代码替换成Sentinel专用代码 3. 初始化Sentinel状态 4. 根据给定的配置文件,初始化Sentinel的监视主服务器列表。 5. 创建连向主服务器的网络连接 ❤️ 感谢大家 Sentinel哨兵机制哨兵机制是Redis实现高可用的解决方案:由一个或多个Sentine...

Sentinel哨兵机制

哨兵机制是Redis实现高可用的解决方案:由一个或多个Sentinel实例组成的Sentinel系统可以监视任意多个主服务器和从服务器,如果主服务器下线,Sentinel自动将下线主服务器下的从服务器升级为新的主服务器,替代原理的主服务器继续处理命令请求,等下线的主服务器恢复后设置为新的主服务器的从服务器

启动并初始化Sentinel

当一个Sentinel启动时,需要以下步骤

1. 初始化服务器

Sentinel本质是一个运行在特殊模式下的Redis服务器,启动Sentinel第一步就是初始化一个普通Redis服务器,普通服务器在初始化时通过载入RDB文件或者AOF文件来还原数据库状态,但因为Sentinel并不使用数据库,所以初始化Sentinel并不会载入RDB文件或者AOF文件

2. 将普通Redis服务器使用的代码替换成Sentinel专用代码

普通Redis常用端口为6379,Sentinel常用端口为26379

Sentinel服务器命令表:sentinel.c的sentinelcmds

struct redisCommand sentinelcmds[] = {
    {"ping",pingCommand,1,"",0,NULL,0,0,0,0,0},
    {"sentinel",sentinelCommand,-2,"",0,NULL,0,0,0,0,0},
    {"subscribe",subscribeCommand,-2,"",0,NULL,0,0,0,0,0},
    {"unsubscribe",unsubscribeCommand,-1,"",0,NULL,0,0,0,0,0},
    {"psubscribe",psubscribeCommand,-2,"",0,NULL,0,0,0,0,0},
    {"punsubscribe",punsubscribeCommand,-1,"",0,NULL,0,0,0,0,0},
    {"info",sentinelInfoCommand,-1,"",0,NULL,0,0,0,0,0}
};

命令表只有7个命令,比普通redis服务器的命令表要少很多

3. 初始化Sentinel状态

服务器初始化sentinelState结构,这个结构保存了服务器中所有和Sentinel功能有关的状态

/* Main state. */
struct sentinelState {
    dict *masters;      /* Dictionary of master sentinelRedisInstances.
                           Key is the instance name, value is the
                           sentinelRedisInstance structure pointer. */
    int tilt;           /* Are we in TILT mode? */
    int running_scripts;    /* Number of scripts in execution right now. */
    mstime_t tilt_start_time;   /* When TITL started. */
    mstime_t previous_time;     /* Time last time we ran the time handler. */
    list *scripts_queue;    /* Queue of user scripts to execute. */
} sentinel;

4. 根据给定的配置文件,初始化Sentinel的监视主服务器列表。

Sentinel的masters字典记录所有被Sentinel监视的主服务器的相关信息,其中字典的键是被监视主服务器的名字,字典的值是被监视主服务器对应的sentinelRedisInstance结构。每个sentinelRedisInstance结构代表一个被Sentinel监视的Redis服务器实例

Sentinel的初始化引发对masters字典的初始化,masters字典的初始是根据被载入的Sentinel配置文件来进行的。

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

Sentinel会创建两个连向主服务器的异步网路连接:一个是命令连接,专门用于向主服务器发送命令,并接收命令回复,一个是订阅连接,用于订阅主服务器的_sentinel_:hello频道

Sentinel需要与多个实例创建多个网路连接,所以Sentinel使用的是异步连接。

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:

  1. 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏
  2. 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。
  3. 有不当之处欢迎批评指正。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。