请教一个开发中的问题,关于集群选举的。

2021-12-14 17:13:32 +08:00
 liufude66

我们的程序有个核心的功能,这个功能只能在众多节点中的一个节点上跑,现在的问题是万一这个节点挂了之后,怎么让其他节点接替这个节点,接着跑这个功能。感觉这个问题可以通过 master 选举来解决,但是以我们现有的开发能力和时间要求来开发一个选举功能不太现实。现在不知道怎么弄。

1706 次点击
所在节点    Java
8 条回复
tedzhou1221
2021-12-14 17:53:20 +08:00
那就直接用 zookeeper, 我们之前有个项目也是这样。
leeraya
2021-12-14 19:29:40 +08:00
上 github 搜相关的开源项目
zifangsky
2021-12-14 20:50:27 +08:00
有两种思路可以实现:①直接使用 zk 的选主功能;②定时任务,所有节点同时执行,哪个节点本次获取到分布式锁就真正执行任务。
joesonw
2021-12-14 20:56:47 +08:00
raft 协议.
1. 当 slave 丢失 master 连接时, 向其他 slave 发送选举票
2. 其他 slave 在收到第一个选票后, 向对方发送确认.
3. 当某一个 slave 收到过半选票, 广播给其他 slave, 自己是 master
4. 如果超时没收到过半选票, 回到 1, 重新发送.
veightz
2021-12-15 02:01:18 +08:00
curator 的封装就能支持,判断 isLeader
Akiya
2021-12-15 12:59:34 +08:00
我感觉你的需求不只是做一个集群选举那么简单,选主只能保证一个任务只被执行一次,而且 master 挂掉以后,任务会发到其他节点。但是按照你的描述,任务还得支持中断恢复,这个就得从业务上面入手了,你需要给任务的每一步记录完成日志,新 leader 发现有未完成的任务就从中断的地方继续
nekoneko
2021-12-15 18:19:31 +08:00
那就 raft 算法,看看 consul 或者 nacos 的源码,自己实现一下
nekoneko
2021-12-15 18:23:05 +08:00
可以试试 JRaft

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/822175

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX