主从复制的优点和问题
优点:
- 从节点是主节点的一个备份,能在主节点宕机之后作为备份。
- 能够读写分离减轻主节点的压力。
问题:
如果主节点宕机需要手动进行故障转移。如果使用脚本也无法周密的考虑所有情况,例如:怎样判断主节点宕机?设置哪个从节点作为主节点?
Redis Sentinel是官方提供的监控并自动故障转移的组件。
Redis Sentinel架构简介
redis集群
对应redis集群来说还是主从复制的结构。
sentinel集群
每个sentinel节点可以看做是一个redis进程,但是它并不负责存储数据。它主要的工作是对redis集群的故障判断和故障转移,通知客户端的过程。sentinel需要是一个集群的架构。这样也能实现高可用,并且能对redis节点故障做一个公平的判断。
客户端
客户端只会连接sentinel,记录sentinel的地址,应为sentinel会知道哪个节点是真正的master,故障转移是也会将最新master的地址告诉客户端。
Sentinel故障转移流程步骤
1、多个sentinel发现并确认master有问题。
2、选举出一个sentinel作为领导。
3、选举出一个slave作为master。
4、通知其余slave成为新的master的slave。
5、通知客户端的主从变化。
6、等待老的master复活成为新master的slave。
客户端的基本原理
1、获取所有sentinel节点,找得到其中一个可用的节点,通过masterName获取master的地址。
2、客户端对获取到的master节点进行一次验证,验证其是否是master节点。
3、如果master发生故障转移,sentinel会通知客户端。实现原理是客户端通过订阅一个channel,当master节点变化,sentinel会发出消息。
三个定时任务
1、每10秒每个sentinel对master和slave执行info
- 发现slave节点
- 确认主从关系
2、每2秒每个sentinel通过master节点的channel交换信息(pub/sub)
- 通过_sentinel_:hello频道交互
- 交互对节点的看法和自身信息,提供一个信息交互的平台,像实现故障判断和领导者选举。
3、每1秒每个sentinel对其他sentinel和redis执行ping
- 心跳检测,失败判定依据
主观下线和客观下线
建议sentinel节点数为基数并且三个以上。主观线下是sentinel每秒进行对节点的ping操作,如果超过配置的时间还是没有收到回复,认为该节点已经不可用,这时会通过channel发表主观下线的消息,并向其他节点询问观点。当收到同意的消息大于配置的参数时,代表达成共识,进行客观下线。
领导者选举
故障转移