1. 程式人生 > >redis cluster原始碼研究--配置一致性保證

redis cluster原始碼研究--配置一致性保證

      redis cluster有些全域性配置如節點地址、主節點所負責雜湊槽、主從關係等需要各節點保持一致,redis cluster只保證配置最終一致性。

      它用以下兩種措施來保證配置最終一致性:

     (1)每個節點都有EpochConfig值,用來標識該節點當前雜湊槽配置(即負責哪些雜湊槽);如果雜湊槽配置變化,則EpochConfig值也會變化,而且是遞增的,這可以保證其他節點根據EpochConfig值來同步更新為最新雜湊槽配置;另外,從節點跟隨主節點,自身沒有雜湊槽配置。

     (2)每個節點通過定時發ping協議給其他節點,ping協議包含兩部分:一部分為自身節點配置資訊(節點地址、名字和狀態,負責雜湊槽,主從關係,EpochConfig值),另一部分為其他節點資訊(節點地址、名字和狀態);另外,為了保證ping包不太大,每次只隨機選取三個節點資訊。

      通過以上兩種措施,各節點就能收到足夠多的資訊來保證配置是最新的,而且最終一致。

      注意:(1)雜湊槽的更新需要EpochConfig值的配合,如果收到的EpochConfig大於本地EpochConfig,就更新;(2)ping包裡自身節點配置資訊(除了負責雜湊槽)用來更新其他節點裡該節點的配置資訊,不需要EpochConfig值配合;(3)ping包裡其他節點資訊(gossip部分)用來給其他節點收集資訊,如果節點地址變了或是新節點則啟動握手重新建立連線;狀態資訊則用來收集判斷該節點是否達到FAIL狀態。