7

ZooKeeperは初めてです。これが私に必要なものです。

私は仲間のネットワークを持っています。

  1. t=t_1 -> [peer-1 (Leader), peer-2] ピア1はマスターであり、すべてのクライアントがこのノードに接続します。

  2. 後で、t=t_2 -> [peer-1 (Leader), peer-2, peer-3] peer-3がグループに参加します。「動的に」(つまり、peer-1でZooKeeperを再起動せずに)zookeeperサーバーのリストにpeer-3を追加することは可能ですか?

  3. t=t_3 -> [peer-3 (Leader), peer-4] しばらくすると、ピア1とピア2の両方がグループを離れます(たとえば、死ぬか、スイッチがオフになります)。ピア3とピア4をグループに動的に追加する方法があると仮定すると、ピア3がリーダーになります。そして、すべてのクライアント要求はピア3に送信されます。

ZooKeeperを使用してこのようなことを行う以外に、使用できるオプションはありますか。

ありがとう。

4

2 に答える 2

8

現時点では、再起動せずに Zookeeper クラスターの構成を動的に変更することはできません。これを修正する未解決の問題ZOOKEEPER-107があります。クラスター メンバーシップ アルゴリズムを説明している論文は非常に興味深いもので、ここで見つけることができます。

一度に 1 つのサーバー ノードを再起動することで、クラスターの構成を変更できます。たとえば、クラスターにサーバー A、B、C があり、サーバー C を D に置き換えたい場合、次のように実行できます。

  • Cを下げる
  • D を呼び出します。そのピア リストは A、B、D です
  • テイクダウンB
  • B のピア リストを A、B、D に変更する
  • Bを育てる
  • A を削除する A のピア リストを A、B、D に変更する
  • Aを立ち上げる
  • すべてのクライアントのクライアント構成を変更して、A、B、D を指すようにします。

t=t_1 では、2 つの Zookeeper ノードを持つクラスターがあります。いずれかのノードがダウンした場合、クォーラム (floor(N / 2) + 1) を確立できず、クラスターが使用できなくなるため、これは非常に脆弱です。通常、飼育係のクラスターは奇数です。

あなたが何をしようとしているのかわからない、

peer-3 がリーダーになり、すべてのクライアント要求が peer-3 に送信されます。

Zookeeper クラスター内のどのノードがリーダーであるかを指定することはできません。ノード自体がリーダーを選択し、ノードが上下するにつれてリーダーシップが変化します。同様に、通常、クライアントは常にリーダーに接続するとは限りませんが、クライアントにはクラスター内のマシンのリストが与えられ、ランダムに 1 つに接続し、接続先のサーバーがダウンした場合は再接続します。LeaderServesオプションを設定して、リーダーがクライアント接続を処理しないことを指定できます。

于 2012-07-07T13:41:15.147 に答える
1

本番環境で上記を使用することはお勧めしません。上記の解決策は、すべての変更が完了するまで ZK クォーラムを失うことに問題がない場合にのみ機能します。

理由は次のとおりです: C を下げて D を上げます。ピア リストは A、B、D です」

-> この時点で、A と B は D のことを知らない -> D は AB のことを知っている

したがって、この時点では、定足数で機能しているのは A と B だけです。次に B を削除すると、定足数を失います。

移行が完了し、クォーラムが再び復元されるまで、zk データにアクセスできなくなります。この場合、zk を使用して適切に設計されたアプリのほとんどは、読み取り専用モードにフェールオーバーし、正常に回復します。

Zookeeper-107が Zookeeper 3.5 でリリースされるまでは、賢明に毒を選択する必要があります。

その方が良い:

  1. 新しいzkアンサンブル(zkクラスター)をセットアップするだけです
  2. スナップショットから復元
  3. 古い zk アンサンブルから新しい zk アンサンブルへのアプリの移行
  4. 移行が完了したら、古い zk アンサンブルをシャットダウンします
于 2015-03-16T19:46:38.053 に答える