7

LeaderLatch を使用してリーダー選挙で遊んでいます。ZooKeeper をローカルにインストールすると、インスタンスが 1 つしかないときにリーダーを選出するのに約 30 秒かかり、リーダーがダウンしたとき (プロセスを終了するとき) に新しいリーダーを選出するのにほぼ同時にかかります。これはこのように機能するはずで、速度を上げることはできますか?

次のコードを使用します。

    CuratorFramework curator = CuratorFrameworkFactory.newClient("127.0.0.1", new ExponentialBackoffRetry(100, 3));
    curator.start();
    LeaderLatch leaderLatch = new LeaderLatch(curator, "/test/t");
    leaderLatch.addListener(new LeaderLatchListener() {
        @Override
        public void isLeader() {
            System.out.println("Leader");
        }

        @Override
        public void notLeader() {
        }
    });
    leaderLatch.start();
4

2 に答える 2

7

私はこれを理解しました:ZooKeeperには、エフェメラルノードを削除しないセッションのタイムアウトが30秒あります。これが、新しいリーダーが選出されなかった理由です (リーダー ノードが選出されなかったため)。また、これにより、すべてのノードがシャットダウンされ、最後のリーダーのタイムアウトが終了する前に再起動されたときに、リーダーが選出されなくなります。

これを回避するには、closeメソッドを使用してキュレーターを手動で閉じる必要があります。この場合、セッションは即座に終了します。

于 2014-08-12T13:35:06.243 に答える
1

Zookeeper 構成ファイルの「ticktime」パラメーターを減らして、すべてのサーバーを再起動することができます。

于 2014-08-14T06:53:33.347 に答える