这几天工作比较忙,然后哨兵/集群/副本的代码量也比较大,所以梳理花了点时间。全部展开来讲可能要10篇左右吧。因为时间不太够,就不展开来讲了。这边直接放代码,里面有详细注释,可能理解会有些偏差,但是感觉基本读懂了9成吧。副本很简单就是负责实现slave与master的数据同步,而哨兵则是监控指定的master/slave节点。检测master是否下线,并自动进行故障转移(failover),选举新的master节点。核心逻辑就是哨兵之间彼此同步信息,并与其他master/slave连接,发送心跳检活,当发现master下线后,在哨兵集群中确定一个故障转移的处理人(在多个sentinel中确定一个leader,leader在一个epoch中仅存在一个),并通知slave晋升,以及其他slave的master更替。哨兵之间通过pubsub进行感知。(当这些哨兵观测同一个slave/master时,slave/master会将哨兵发送的hello信息发布到所有订阅了自己的哨兵节点,实现动态发现) 还有client可以通过订阅的方式,接收哨兵发出的事件(如发现新的slave,master下线,slave晋升等等),这也算是redis的一个拓展点。
代码入口一般是在xxxCron中,也是以redis.serverCron作为入口。
剩下的一些redis模块都是边边角角,难度比较低,就不讲了。
github.com/a137872798/… github.com/a137872798/… github.com/a137872798/…