以下では、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
これは正しい方向に私を導いた、ありがとう!できるだけ早く私の質問を更新します。 – rocksteady