redis cluster源码研究--配置一致性保证

来源:互联网 发布:产生1 n随机数 js 编辑:程序博客网 时间:2024/04/30 07:42

      redis cluster有些全局配置如节点地址、主节点所负责哈希槽、主从关系等需要各节点保持一致,redis cluster只保证配置最终一致性。

      它用以下两种措施来保证配置最终一致性:

     (1)每个节点都有EpochConfig值,用来标识该节点当前哈希槽配置(即负责哪些哈希槽);如果哈希槽配置变化,则EpochConfig值也会变化,而且是递增的,这可以保证其他节点根据EpochConfig值来同步更新为最新哈希槽配置;另外,从节点跟随主节点,自身没有哈希槽配置。

     (2)每个节点通过定时发ping协议给其他节点,ping协议包含两部分:一部分为自身节点配置信息(节点地址、名字和状态,负责哈希槽,主从关系,EpochConfig值),另一部分为其他节点信息(节点地址、名字和状态);另外,为了保证ping包不太大,每次只随机选取三个节点信息。

      通过以上两种措施,各节点就能收到足够多的信息来保证配置是最新的,而且最终一致。

      注意:(1)哈希槽的更新需要EpochConfig值的配合,如果收到的EpochConfig大于本地EpochConfig,就更新;(2)ping包里自身节点配置信息(除了负责哈希槽)用来更新其他节点里该节点的配置信息,不需要EpochConfig值配合;(3)ping包里其他节点信息(gossip部分)用来给其他节点收集信息,如果节点地址变了或是新节点则启动握手重新建立连接;状态信息则用来收集判断该节点是否达到FAIL状态。
0 0
原创粉丝点击