zookeeper基本概念と原理

4593 ワード

  • zookeeperは何ですか?zookeeperは分散型で、オープンソースの分散型アプリケーション協調サービスはGoogleのChubyオープンソースの実現で、HadoopとHbaseの重要なコンポーネントです。これはクラスタの管理者です。クラスタ内の各ノードの状態を監視して、ノードのフィードバックによって次のステップの合理的な操作を行います。最終的には、簡単で使いやすいインターフェースと性能が高く、機能が安定したシステムがユーザーに提供される。
  • ZK原理コアは原子放送であり、このメカニズムは各server間の同期を保証する。このメカニズムを実現するプロトコルをzabプロトコルといいます。zabプロトコルは、それぞれ再生モード(ホスト選択)とブロードキャストモード(同期)の2つのモードがある。サービスが開始されたり、指導者が崩壊したりすると、ザブは回復モードに入り、指導者が選出され、ほとんどのserverはleaderの状態と同期した後、回復モードは終了します。状態同期は、leaderとserverが同じ状態であることを保証します。事務の順序一致を保証するために、ZKはインクリメントされたトランザクションID番号(ZXID)を用いて、事務を識別する。すべての提案は出された時zxidを加えます。zxidは64桁の数字で、32桁の高さはepochであり、leader関係が変化しているかどうかを識別するために使用されます。毎回leaderが選ばれると、新しいepochがあります。現在はそのleaderの統治時期に属しています。低い32ビットはカウントアップに使用されます。
  • ZKは何をするために使われていますか?分散式アプリケーションでよく出会うデータ管理問題、例えばクラスタ管理
  • Zookeeper                ,     Server         ,       “  ”                ,           ,           ,              。             ,          Server,      “  ”  。
    
    Zookeeper                      ,          “  ”,          ,    Zookeeper        Leader Election。
               Zookeeper       EPHEMERAL        ,     Server                    getChildren(String path,
    boolean watch)       watch   true,    EPHEMERAL     ,      Server   ,            ,   Children     ,   getChildren  
    Watch      ,     Server          Server    。   Server        。
    
    Zookeeper      Leader Election,        Master Server。         Server      EPHEMERAL     ,          SEQUENTIAL     ,      EPHEMERAL_SEQUENTIAL     。      EPHEMERAL_SEQUENTIAL     ,           Server   ,               Server   Master,          Server   ,    EPHEMERAL
      ,    Server          ,                      ,             Master。           Master,          Master            。
    
    名前統一サービス
          ,              ,                   ,                     ,                  ,          。           JNDI,   Zookeeper   Name Service   JNDI             ,                     ,   Zookeeper   Name Service            ,                  ,              ,                   。
    
    Name Service     Zookeeper      ,      Zookeeper   API     。    create                 。
    
    分散配置管理
                     ,              PC Server   ,                     ,             ,                     PC Server,            。
    
                   Zookeeper    ,         Zookeeper         ,                       ,          ,           Zookeeper    ,    Zookeeper               。
    
    分散型メッセージキュー
    Zookeeper            :
    
                ,       ,            ,       。
         FIFO            ,             。
          Zookeeper          :
    
            /synchronizing,         (Set Watch)    /synchronizing/start     ,             ,            /synchronizing/member_i        ,         / synchronizing          ,    member_i。   i             ,           /synchronizing/start    ,          /synchronizing/start。
    
    分散錠
                   ,            Server         。Zookeeper           ,             Server      EPHEMERAL_SEQUENTIAL     ,     getChildren                                   ,         ,          ,          exists(String path,
    boolean watch)       Zookeeper           ,                       ,     ,      ,                    
    
    分散式通知の調整
  • ZKの利点は、最終的に一致した信頼性であり、非依存原子性順序性を待つ
  • である。
  • ZKクラスタのキャラクター各serverは、作業中に3つの状態lookingがあります。現在serverは誰がleaderか分かりません。leadingを探しています。現在serverは選挙のために選ばれたleader following:leaderはすでに選挙されました。現在serverは同期したZookeeperクラスタと同じ時刻にLeaderだけがあります。他はForverまたはForverです。Zoo Keeperは構成が簡単で、各ノードのプロファイルは同じで、myidファイルだけが違っています。myidの値はzoo.cfgのserver.{数値}の{数値}部分でなければなりません。
  • メインフローはleaderが崩壊したり、leaderが大多数のフォロワーを失ったりした場合、zkは回復モードに入り、回復モードは新たなleaderを選出して、すべてのServerを正しい状態に戻す必要がある。Zkの選挙アルゴリズムは二つあります。一つはバックパックスに基づいて実現されるもので、もう一つはfast paxosアルゴリズムに基づいて実現されるものです。システムのデフォルトの選挙アルゴリズムはfast paxosです。まず、baic paxosの流れを紹介します。1.選挙スレッドは現在のServerが選挙を開始するスレッドが担当しています。その主な機能は投票結果を集計して、おすすめのServerを選出します。2.選挙スレッドはまず全Serverに一度問い合わせる(自分を含む)。3.選挙スレッドに返信が来たら、自分から問い合わせがあったかどうかを検証し(zxidが一致しているかを検証し)、相手のIDを取得して、現在の問い合わせ先リストに保存し、最後に相手から提案されたleader関連情報(id,zxid)を取得し、その情報を選挙の投票記録表に保存する。4すべてのServer回答を受け取ったら、zxid最大のServerを計算し、このServer関連情報を次の投票のServerに設定します。5スレッドは現在のzxid最大のServerを現在のServerが推奨するLeaderに設定し、このとき勝利したServerがn/2+1のServerの得票数を獲得した場合、現在推奨されているleaderを勝ちとするServerに設定し、勝利したServerに関する情報に基づいて自分の状態を設定します。そうでないと、leaderが選挙されるまでこのプロセスを継続します。フロー分析によって、リーダーに多数のServerのサポートを獲得するには、Server総数は奇数2 n+1でなければならず、生存するServerの数はn+1以下であってはならない。各Serverが起動したら、上記の流れを繰り返す。回復モードでは、崩壊状態から回復したばかりか、または起動したばかりのserverであれば、ディスクのスナップショットからデータとセッション情報を復元し、zkでは事務ログを記録し、定期的にスナップショットを行い、回復時に状態回復を図ることができます。


  • 参考1
    参考2