redis 哨兵模式的架构解析
一 redis的主从复制过程
前言: 哨兵模式作为一段时间很主流的模式,但是其需要部署sentinel集群,相对占资源,其实生产更多用的redis cluster集群,可以看我redis的单独章节有详细的解说。
通过下图,我们一起来了解redis的主从复制过程。
注意: redis也是可是设置读写分离来提高性能的
其过程如下:
- 当slave连接master认主
- 从节点发送psyn给主节点
- master执行bgsave过程,生成rbd快照(于此同时还有adf)
- slave读取rbd快捷对自己的数据进行还原
- 后续master有更新,都会转发命令给slave
二 什么是redis sentinel(哨兵)高可用集群
如下图是哨兵模式的集群架构:
途中所示,我们建立了一个成为sentinel的监控节点集群,他负责对redis的集群进行监控,保活,本身sentinel也是高可用的,具备自己的选主策略,通常我们建议至少6台sentinel节点存在。
接下来我们看当master宕机的情况下集群怎么工作的:
- 若足够多(配置,通常设置为 sentinel数量/2 + 1)的sentinel在指定时间范围(根据实际情况配置)都ping不不通当前master,即标记当前master为客观下线,准备新的选主过程
- sentinel开始剔除主观下线、短线、或者最后一次回复ping命令的时间大于5s的slave节点,剔除与失效master连接断开时长超过down-after设置时间10倍的节点
- 按同步数据的偏移量选出数据最完整的slave,偏移量相同,选id最小
- sentinel向选中的发送SLAVEOF NO ONE命令,转换其为master
- 通过发布订阅功能,将更新后的配置传输给其他的sentinel,其他sentinel自行更行
- 其余未被选中的slave向master重新建立连接,重放rbd保持数据同步,过程伴随redis实例自己的配置更新,即便重启配置也不会丢失
- 原有的master在恢复后会自动降级为slve与master建立连接