liufude66
V2EX  ›  Java

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

  •  
  •   liufude66 · Dec 14, 2021 · 2795 views
    This topic created in 1794 days ago, the information mentioned may be changed or developed.

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

    8 replies  •  2021-12-15 18:23:05 +08:00
    tedzhou1221
    tedzhou1221
    Dec 14, 2021
    1
    那就直接用 zookeeper, 我们之前有个项目也是这样。
    leeraya
    leeraya
    Dec 14, 2021
    2
    上 github 搜相关的开源项目
    zifangsky
    zifangsky
    Dec 14, 2021
    3
    有两种思路可以实现:①直接使用 zk 的选主功能;②定时任务,所有节点同时执行,哪个节点本次获取到分布式锁就真正执行任务。
    joesonw
    joesonw
    Dec 14, 2021
    4
    raft 协议.
    1. 当 slave 丢失 master 连接时, 向其他 slave 发送选举票
    2. 其他 slave 在收到第一个选票后, 向对方发送确认.
    3. 当某一个 slave 收到过半选票, 广播给其他 slave, 自己是 master
    4. 如果超时没收到过半选票, 回到 1, 重新发送.
    veightz
    veightz
    Dec 15, 2021 via iPhone
    5
    curator 的封装就能支持,判断 isLeader
    Akiya
    Akiya
    Dec 15, 2021
    6
    我感觉你的需求不只是做一个集群选举那么简单,选主只能保证一个任务只被执行一次,而且 master 挂掉以后,任务会发到其他节点。但是按照你的描述,任务还得支持中断恢复,这个就得从业务上面入手了,你需要给任务的每一步记录完成日志,新 leader 发现有未完成的任务就从中断的地方继续
    nekoneko
    nekoneko
    Dec 15, 2021
    7
    那就 raft 算法,看看 consul 或者 nacos 的源码,自己实现一下
    nekoneko
    nekoneko
    Dec 15, 2021
    8
    可以试试 JRaft
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   936 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 21:58 · PVG 05:58 · LAX 13:58 · JFK 16:58
    ♥ Do have faith in what you're doing.