zookeeperのleader選挙過程


リーダー選挙の流れ
リーダー選挙は、分散的なデータの整合性を保証する重要なポイントです。Zookeeperクラスタ内のサーバーが次の2つの状況になった時、リーダー選挙に入る必要があります。
1.          。 
2.            Leader    。
二つの場合の解析
  • クラスタサーバ起動時のリーダー選挙
  • リーダー選挙を行うなら、少なくとも2台のマシンが必要です。ここで3台のマシンからなるサーバークラスタを選択します。クラスタ初期化段階において、サーバServer 1が起動された時に、単独でリーダー選挙を行うことができず、2台目のサーバServer 2が起動されると、2台のマシンは互いに通信でき、各マシンはLeaderを見つけようとして、Leader選挙のプロセスに入る。選挙過程は5段階に分けられます。
    
       :
    	  Server      。       ,Server1 Server2       Leader        ,
    	               myid ZXID,  (myid, ZXID)   ,  Server1    (1, 0),
    	Server2    (2, 0),                  。
    	
       :
    	            。             ,           ,          、
    	    LOOKING      。
    
       :
    	    。       ,                    PK,PK    
        1.     ZXID。ZXID           Leader。
        2.   ZXID  ,     myid。myid        Leader   。
         Server1  ,     (1, 0),  Server2    (2, 0),        ZXID,  0,
          myid,  Server2 myid  ,          (2, 0),      ,  Server2  ,
                 ,                       。
    
       :
           。     ,           ,                     ,
         Server1、Server2  ,                 (2, 0)     ,       
          Leader。
    
       :
              。     Leader,              ,   Follower,      
       FOLLOWING,   Leader,    LEADING。
    
  • サーバ実行時のリーダー選挙
  • Zookeeperが実行している間、リーダーと非Leaderサーバがそれぞれ役割を果たしています。Leaderサーバのあたごがある場合でも、新たに加入した場合は、リーダーに影響はありませんが、Leaderサーバがインストールされると、クラスタ全体は外部サービスを停止し、新たなLeader選挙に入ります。その過程と起動時期のLeader選挙過程はほぼ一致します。Server 1、Server 2、Server 3のサーバーが実行されていると仮定して、現在のLeaderはServer 2です。いつかLeaderがかかったら、Leader選挙が始まります。選挙過程は6段階に分けられます。
       :
    	    。Leader  ,    Observer                 LOOKING,      
    	Leader    。
    
       :
        Server       。     ,       ZXID    ,    Server1 ZXID 123,
      Server3 ZXID 122;       ,Server1 Server3     ,    (1, 123)(3, 122),
                       。
    
       :
                   。             ,           ,          、
    	    LOOKING      。
    
       :
    	    。       ,                    PK,PK    
        1.     ZXID。ZXID           Leader。
        2.   ZXID  ,     myid。myid        Leader   。
         Server1  ,     (1, 123),  Server3    (3, 122),        ZXID,  
       Server1  Server3,  Server1         ,                       ,
         Server3  ,              ZXID Server1  ,            (1, 123),
                  ,              Server1    Leader。
    
       :
      	    。     ,           ,                     ,
         Server1、Server3  ,                 (1, 123)     ,       
          Leader。
       :
       Leader   ,              。     Leader,              ,   
      Follower,      FOLLOWING,   Leader,    LEADING。
    
    リーダー選挙アルゴリズム分析
    Zookeeper 3.4.0以降のバージョンはTCPバージョンのFastLeaderElectionの選挙アルゴリズムだけを残しています。一つのマシンがリーダーの選挙に入ると、現在のクラスタは以下の二つの状態になります。
    	1.        Leader。
    	2.       Leader。
    
    クラスタ内に既にリーダーが存在する場合、通常はあるマシンの起動が遅くなり、その起動前にクラスタが正常に動作している場合、このマシンがリーダーを選挙しようとすると、現在のサーバのリーダー情報が通知されます。このマシンにとっては、リーダーマシンと接続を確立し、状態同期を行うだけで良いです。クラスタ内にリーダーが存在しない場合は比較的複雑であり、そのステップは以下の通りである。
       :
    	     。        Leader  ,                 Leader   , LOOKING
    	  ,LOOKING              ,       。      SID(        ) ZXID
    	(  ID),(SID, ZXID)           。  Zookeeper 5     ,SID   12345,ZXID   99988,    SID 2    Leader  ,    ,12        ,  
    	      Leader  。       ,               ,  SID 345      
    	    (3, 9)(4, 8)(5, 8):
    	     。         ,           ,                        ,
    	                  ,        Leader         ,        :
    	 
        1. vote_sid:          Leader    SID。
        2. vote_zxid:          Leader    ZXID。
        3. self_sid:        SID。
        4. self_zxid:        ZXID。
    
                  ,   (vote_sid, vote_zxid) (self_sid, self_zxid)     。
    
           :  vote_zxid  self_zxid,          ,           。
           :  vote_zxid  self_zxid,         ,      。
           :  vote_zxid  self_zxid,        SID,  vote_sid  self_sid,     
        		        ,           。
           :  vote_zxid  self_zxid,  vote_sid  self_sid,               。
    
            ,           。
    
       :
    	  Leader。        ,                      ,        ,    
    	              ,         SID    Leader。  Server3   Leader。
    	
           ,             (ZXID   ),   Leader      ,          
      。  ZXID  , SID      。
    
    リーダー選挙実現の詳細
  • サーバ状態
  •            ,   LOOKING、FOLLOWING、LEADING、OBSERVING。
    
      LOOKING:  Leader  。          ,           Leader,
            Leader    。
    
      FOLLOWING:     。          Follower。
    
      LEADING:     。          Leader。
    
      OBSERVING:     。          Observer。
    
  • 投票データ構造
  • 	                ,       SID ZXID,  (Vote) Zookeeper       
    
      id:    Leader SID。
    
      zxid:    Leader  ID。
    
      electionEpoch:    ,                   ,             ,
                 ,        1  。
    
      peerEpoch:    Leader epoch。
    
      state:        。
    
  • QuorumCnxManager:ネットワークI/O
  • 	            ,     QuorumPeerManager,            Leader      
    	    。
    
    (1)     。QuorumCnxManager           ,        、              ,
             ,       SID        ,            33   
                ,    。
    
        · recvQueue:      ,                  。
    
        · queueSendMap:      ,            ,  SID    。
    
        · senderWorkerMap:     ,  SenderWorker     ,       Zookeeper   ,
               ,   SID    。
    
        · lastMessageSent:        ,   SID            。
    
    (2)     。        ,Zookeeper                    。QuorumCnxManager
               ServerSocket   Leader       (   3888)。     ,Zookeeper   
                         ,          TCP     ,     。        
             TCP  ,Zookeeper   SID                ,      。      
           ,                SID            ,            SID 
       ,         ,                。      ,          SID    
             SendWorker      RecvWorker,   。
    
    (3)        。    :      RecvWorker  ,  Zookeeper              
        RecvWorker,  ,  RecvWorker         TCP       ,      recvQueue 
        。    :  Zookeeper                SendWorker,  ,  SendWorker  
                                ,         lastMessageSent 。
       SendWorker ,  Zookeeper                  ,       lastMessageSent
                          ,                            , 
                。  ,Zookeeper             ,             。
    
    4.FastLeaderElection:選挙アルゴリズムの核心
       ·     :            。
    
      ·     :          。
    
      ·     :Zookeeper   Leader     , logicalclock。
    
      · PK:                           。
    
    
    (1)     
    
      · sendqueue:      ,          。
    
      · recvqueue:      ,            。
    
      · WorkerReceiver:     。      QuorumCnxManager               ,    
            ,     recvqueue ,        ,                      , 
              ,             。
    
      · WorkerSender:     ,    sendqueue         ,        QuorumCnxManager 。
    
    
    
    (2)     
    
           FastLeaderElection          I/O     。Leader         
    
      1.       。Zookeeper                  ,         ,    
      logicalclock      。
    
      2.      。            ,               ,        ,      
             Leader。
    
      3.        。         ,            。Zookeeper             
      sendqueue ,    WorkerSender      。
    
      4.       。          recvqueue         。                
        ,                             ,      ,       ,  
             ,              。
    
      5.       。           ,          。        ,          
           。
    
        ·                。                             ,  
                     (logicalclock),             ,             
        PK           。            。
    
        ·                。                         ,  
        Zookeeper           ,      ,     4。
    
        ·                。          PK。
    
      6.   PK。     PK ,               。
    
        ·          Leader              ,        。
    
        ·        ,        ZXID,      ZXID ,        。
    
        ·     ZXID  ,        SID,      SID ,         。
    
      7.     。  PK ,              ,       ,                 
        ,     ,                 。
    
      8.     。         ,                    recvset     。recvset 
                   Leader            (      SID  , {(1, vote1), (2, vote2)...})。
    
      9.     。       ,         ,                           
            ,                  ,     。      4。
    
      10.        。           ,            ,                
              Leader        ,    ,             LEADING,   ,    
               FOLLOWING  OBSERVING。
    
        10     FastLeaderElection   ,    4-9       ,   Leader    。