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