1

以下では、docker-compose.ymlファイルを見つけることができます。リーダーが死亡したときの飼育院のクラスタリーダーシップの変更

前提条件:

は私が(ドッキングウィンドウ-compose.yml、3人の飼育係)をドッキングウィンドウは、構成を使用したクラスターとして3台のZooKeeperのサーバを起動するには、その後、私は4 1 (別docker-を追加しますcompose.yml、1 zookeeper)をクラスタに追加します。 最初の3人の飼育係の1人がリーダーであり、4人が期待通りのフォロワーです。

問題:私は最初の3人の飼育係(docker-compose downによる)を停止すると

、私はリーダーを「失う」と私がリーダーシップを取る4.飼育係を期待しています。

起こる唯一のことは、飼育係がecho stat | nc localhost 52181 | grep Modeが以前にこの最後の飼育係のためのモードfollower返さ行う

WARN Cannot open channel to 3 at election address localhost/127.0.0.1:43888 
java.net.ConnectException: Connection refused 

:例えば、エラーが表示され、今は何も返さないということです。

まだrunnngのZooKeeperサーバーのみ例えば、こう述べています。

INFO Closed socket connection for client /127.0.0.1:43548 (no session established for client) (org.apache.zookeeper.server.NIOServerCnxn) 

解決方法1:

  • 時間制限を増やすには助けにはならなかった、同じ結果:

    ZOOKEEPER_TICK_TIME: 4000

    ZOOKEEPER_INIT_LIMIT: 30

    ZOOKEEPER_SYNC_LIMIT: 15

解決方法2:

  • aorund他の方法:

私はすでに実行している他の人なしに(最初は単一のZooKeeperサーバーを起動すると)、エラーメッセージを返すだけです(上記のエラーを参照してください)、明らかにrunniではありませんecho stat | nc localhost 52181 | grep Modeは何も返しません。

他の3つの動物園飼育係をクラスタに追加すると、すべてが正常に実行され、最初の動物園のサーバーはleaderになります。

最初の飼い猫を殺すと3が去り、そのうちの1つが新しいleaderです。

質問:

  • 私は、クラスタ内の単一の飼育係を残すことはそれは指導者になることを、期待しています。
  • 解決策2で説明したように(しかし、1つではありませんが、3人の飼育係が実行され、1人だけが殺されます)、「反対の方法」で動作します。
  • なぜ、問題に記載されているように動作しないのですか?単一のZookeeperをリーダーまたは単独のZookeeperサーバーとして残していますか?

ドッキングウィンドウ-compose.ymlファイル:

--- 
version: '2' 
services: 
    zookeeper_1: 
    image: confluentinc/cp-zookeeper:3.1.1 
    network_mode: host 
    environment: 
     ZOOKEEPER_SERVER_ID: 1 
     ZOOKEEPER_CLIENT_PORT: 22181 
     ZOOKEEPER_TICK_TIME: 2000 
     ZOOKEEPER_INIT_LIMIT: 5 
     ZOOKEEPER_SYNC_LIMIT: 2 
     ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888 
    zookeeper_2: 
    image: confluentinc/cp-zookeeper:3.1.1 
    network_mode: host 
    environment: 
     ZOOKEEPER_SERVER_ID: 2 
     ZOOKEEPER_CLIENT_PORT: 32181 
     ZOOKEEPER_TICK_TIME: 2000 
     ZOOKEEPER_INIT_LIMIT: 5 
     ZOOKEEPER_SYNC_LIMIT: 2 
     ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888 
    zookeeper_3: 
    image: confluentinc/cp-zookeeper:3.1.1 
    network_mode: host 
    environment: 
     ZOOKEEPER_SERVER_ID: 3 
     ZOOKEEPER_CLIENT_PORT: 42181 
     ZOOKEEPER_TICK_TIME: 2000 
     ZOOKEEPER_INIT_LIMIT: 5 
     ZOOKEEPER_SYNC_LIMIT: 2 
     ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888 

I開始:

私は、ドッキングウィンドウ-構成し、以下のドッキングウィンドウ-compose.ymlと3台のZooKeeperサーバーを起動しますa 4.同様に1つ:

--- 
version: '2' 
services: 
    zookeeper_4: 
    image: confluentinc/cp-zookeeper:3.1.1 
    network_mode: host 
    environment: 
     ZOOKEEPER_SERVER_ID: 4 
     ZOOKEEPER_CLIENT_PORT: 52181 
     ZOOKEEPER_TICK_TIME: 2000 
     ZOOKEEPER_INIT_LIMIT: 5 
     ZOOKEEPER_SYNC_LIMIT: 2 
     ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888 

答えて

2

念頭に置くべきこと:大部分のサーバーが稼動している場合にのみ、飼い犬桶が出ます。だからあなたが4台のサーバを持っていて、それらのうちの3台をダウンさせるならば、2台以上起動するならば、飼い猫だけが出ます。

どのzookeeperのバージョンをお使いですか?それが3.5より前の場合(または3.5を使用し、reconfigコマンドを使用していない場合)は、構成を変更するときにサーバーを再起動する必要があります。

+0

これは正しい方向に私を導いた、ありがとう!できるだけ早く私の質問を更新します。 – rocksteady

関連する問題