7

我正在使用 LeaderLatch 进行领导者选举。在本地安装 ZooKeeper 后,当只有一个实例时,我有大约 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方法手动关闭 curator,在这种情况下会话会立即终止。

于 2014-08-12T13:35:06.243 回答
1

您可以减少 zookeeper 配置文件中的“ticktime”参数。并重新启动所有服务器。

于 2014-08-14T06:53:33.347 回答