gpt4 book ai didi

consul - 使用 java consul-client 进行应用程序负责人选举

转载 作者:行者123 更新时间:2023-12-04 20:35:39 25 4
gpt4 key购买 nike

我正在尝试了解如何使用 Consul 进行应用程序领导者选举。我正在使用来自 java consul-client 的 LeaderElectionUtil。

我可以选举一个领导者,并且所有节点都同意领导者,但如果领导者应用程序死亡,其他节点似乎不知道并在调用 getLeaderInfoForService 时继续获得死亡的领导者 - 即不会发生新的领导者选举。

Leader Electrion Guide (https://www.consul.io/docs/guides/leader-election.html) 提到:

“请注意,默认情况下 session 仅使用八卦故障检测器。也就是说,只要默认的 Serf 健康检查未声明节点不健康, session 就被视为由节点持有。如果需要,可以指定其他检查。 ”

所以从这里我假设我可能需要向 session 添加应用程序级别的健康检查(TTL 等),以便在应用程序失败时 session 将失效?这是正确的想法,如果是的话,有什么办法可以通过java客户端做到这一点吗?我可以放弃 LeaderElectionUtil 并编写我的代码来选举领导者,但似乎即使在 SessionClient 中也没有办法创建一个带有相关健康检查的 session ?

或者也许有更好的方法来实现这一点(领导者重新选举的应用程序级故障检测)?我有点卡住了,所以任何指针都将不胜感激。

最佳答案

所以我解决了它,以防其他人遇到这个问题。

我无法使用 LeaderElectionUtil,但我创建了自己的类来做同样的事情,但在 createSession 方法中,我添加了 10 秒的 TTL。

private String createSession(String serviceName) {
final Session session =
ImmutableSession.builder().name(serviceName).ttl("10s").build();

return client.sessionClient().createSession(session).getId();
}

为了使其工作,您需要有一个后台线程,该线程至少每 10 秒在 session 上调用一次renewSession。

关于consul - 使用 java consul-client 进行应用程序负责人选举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36417744/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com