- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
?
?
《Redis设计与实现》阅读笔记11-Sentinel
?
?
15 哨兵
哨兵系统由一个或多个哨兵实例组成,可以监视任意多个主服务器及其对应的所有从服务器,并在监视的主服务器下线的时候从其对应的从服务器中选出一个作为新的主服务器,然后让剩余的从服务器去复制新的主服务器,并在旧的主服务器上线以后让其成为新的主服务器的从服务器。
15.1 启动并初始化哨兵
启动一个 Sentinel 可以使用命令:
$ redis-sentinel /path/to/your/sentinel.conf
或者命令:
$ redis-server /path/to/your/sentinel.conf --sentinel
这两个命令的效果完全相同。
当一个 Sentinel 启动时, 它需要执行以下步骤:
初始化服务器。
将普通 Redis 服务器使用的代码替换成 Sentinel 专用代码。
初始化 Sentinel 状态。
根据给定的配置文件, 初始化 Sentinel 的监视主服务器列表。
创建连向主服务器的网络连接。
15.1.1 初始化服务器
与普通的redis服务器的初始化不同,哨兵服务器有很多步骤不需要执行
功能
使用情况
数据库和键值对方面的命令, 比如 SET 、 DEL 、 FLUSHDB 。
不使用。
事务命令, 比如 MULTI 和 WATCH 。
不使用。
脚本命令,比如 EVAL 。
不使用。
RDB 持久化命令, 比如 SAVE 和 BGSAVE 。
不使用。
AOF 持久化命令, 比如 BGREWRITEAOF 。
不使用。
复制命令,比如 SLAVEOF 。
Sentinel 内部可以使用,但客户端不可以使用。
发布与订阅命令, 比如 PUBLISH 和 SUBSCRIBE 。
SUBSCRIBE 、 PSUBSCRIBE 、 UNSUBSCRIBE PUNSUBSCRIBE 四个命令在 Sentinel 内部和客户端都可以使用, 但 PUBLISH 命令只能在 Sentinel 内部使用。
文件事件处理器(负责发送命令请求、处理命令回复)。
Sentinel 内部使用, 但关联的文件事件处理器和普通 Redis 服务器不同。
时间事件处理器(负责执行 serverCron 函数)。
Sentinel 内部使用, 时间事件的处理器仍然是 serverCron 函数, serverCron 函数会调用 sentinel.c/sentinelTimer 函数, 后者包含了 Sentinel 要执行的所有操作。
15.1.2 使用哨兵专用代码
启动哨兵以后,会将普通redis服务器使用的代码替换成哨兵专用的代码,哨兵的服务器使用也使用不同的服务器,命令对应不同的实现函数。
这也解释了为什么在 Sentinel 模式下, Redis 服务器不能执行诸如 SET 、 DBSIZE 、 EVAL 等等这些命令 —— 因为服务器根本没有在命令表中载入这些命令: PING 、 SENTINEL 、 INFO 、 SUBSCRIBE 、 UNSUBSCRIBE 、 PSUBSCRIBE 和 PUNSUBSCRIBE 这七个命令就是客户端可以对 Sentinel 执行的全部命令了。
15.1.3 初始化哨兵状态
在应用了 Sentinel 的专用代码之后, 接下来, 服务器会初始化一个 sentinel.c/sentinelState 结构(后面简称“Sentinel 状态”), 这个结构保存了服务器中所有和 Sentinel 功能有关的状态 (服务器的一般状态仍然由 redis.h/redisServer 结构保存):
struct sentinelState {
// 当前纪元,用于实现故障转移
uint64_t current_epoch;
// 保存了所有被这个 sentinel 监视的主服务器
// 字典的键是主服务器的名字
// 字典的值则是一个指向 sentinelRedisInstance 结构的指针
dict *masters;
// 是否进入了 TILT 模式?
int tilt;
// 目前正在执行的脚本的数量
int running_scripts;
// 进入 TILT 模式的时间
mstime_t tilt_start_time;
// 最后一次执行时间处理器的时间
mstime_t previous_time;
// 一个 FIFO 队列,包含了所有需要执行的用户脚本
list *scripts_queue;
} sentinel;
15.1.4 初始化哨兵状
您可能关注的文档
- [UWP]浅谈按钮设计.docx
- ‘高并发系统设计详解.docx
- 《C语言程序设计》第3章-分支结构-第2篇.docx
- 《Linux内核设计与实现》-读书笔记.docx
- 《Linux内核设计与实现》第一章Linux内核简介.docx
- 《Linux内核设计与实现》第七、八章中断处理.docx
- 《Linux内核设计与实现》第三章进程管理.docx
- 《Linux内核设计与实现》第九、十章内核同步.docx
- 《Linux内核设计与实现》第五章系统调用.docx
- 《Linux内核设计与实现》第六章内核数据结构.docx
- 《Redis设计与实现》阅读笔记12-集群.docx
- 《Redis设计与实现》阅读笔记2-数据结构与对象(整数集合,压缩列表).docx
- 《Redis设计与实现》阅读笔记3-数据结构与对象(对象).docx
- 《Redis设计与实现》阅读笔记4-数据库.docx
- 《Redis设计与实现》阅读笔记5-RDB持久化.docx
- 《Redis设计与实现》阅读笔记6-AOF持久化.docx
- 《Redis设计与实现》阅读笔记7-事件.docx
- 《Redis设计与实现》阅读笔记8-客户端.docx
- 《Redis设计与实现》阅读笔记9-服务器.docx
- 《Redis设计与实现》阅读:Redis底层研究之哈希表hashtable.docx
文档评论(0)