我使用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();
答案 0 :(得分:7)
我认为这一点:ZooKeeper会话超时30秒,在此期间它不会删除短暂的节点。这就是新领导人没有当选的原因(因为领导者节点没有当选)。此外,当所有节点都关闭并在最后一个领导者超时完成之前再次启动时,这会阻止选举领导者。
为了避免这种情况,您需要使用close
方法手动关闭策展人,在这种情况下,会话会立即终止。
答案 1 :(得分:1)
你可以减少"滴答时间" zookeeper配置文件中的参数。并重新启动所有服务器。