使用Apache Zookeeper+Curator进行缓慢的领导选举

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();
2个回答

7
我发现了这个问题:ZooKeeper 的会话超时时间为 30 秒,在此期间它不会删除临时节点。这就是为什么没有选举出新的领导者(因为没有选出领导者节点)。此外,这也可以防止在所有节点关闭并在上一个领导者超时结束之前再次启动时选举出领导者。
为避免这种情况,您需要使用“close”方法手动关闭 curator,这样会话会立即终止。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接