sofastack / sofa-jraft

A production-grade java implementation of RAFT consensus algorithm.
https://www.sofastack.tech/projects/sofa-jraft/
Apache License 2.0
3.52k stars 1.12k forks source link

请教个问题:有没有配置或者一种机制(比如多长时间后),对于离线的节点,leader心跳检测临时抛弃 #1088

Closed zxuanhong closed 3 months ago

zxuanhong commented 3 months ago

Your question

  1. 有么有配置或者一种机制(比如多长时间后),对于离线的节点,leader心跳检测临时抛弃。
  2. 如果离线的leader一直去处理他,感觉没啥意义。而且控制台不停的出现ERROR级别日志还不好关闭
  3. 比如设置心跳检查10分钟还是不通,那就把这个节点设置为离线,针对离线的参与者不在进行心跳检查。当离线参与者启动时,又从离线状态转变为在线状态。不知道有没有这种设置

Environment

fengjiachun commented 3 months ago

没有这种机制,只要没有走 raft 协议移除这个节点,leader 就会持续的探测这个节点,这是 raft 协议必须要做的,如果 raft 内部就可以决定临时抛弃某个节点,那么就没什么一致性可言了,这种事情要在外层做(管理控制面),raft 本身的问题,还是建议阅读论文

zxuanhong commented 3 months ago

@fengjiachun 管理层怎么做,移除节点??这合适吗??或者cli有可以停止心跳的接口??或者给个参考示例??

raft协议是这样,但是做这一切不可能原封不动,总得给用户或者真实应用场景预留可操作的接口吧?。

fengjiachun commented 3 months ago

移除节点不就调用 remove peer(CliService) 么?至于什么情况要移除,那要看管理控制面怎么监控所有节点,按照什么指标来判断

zxuanhong commented 3 months ago

@fengjiachun 但是一来就操作移除节点,这合适吗???我知道移除节点怎么操作,但是这个本不应该进行移除操作的。

协议核心是这样没问题,至少在协议基础上预留可操作接口。协议不就是也是为了实际生产应用吗?应用都不好应用,那还谈协议有啥意义了??

fengjiachun commented 3 months ago

你不移除,raft group 中的 leader 就要无限的往该 follower 节点上发心跳探测,以确保最及时的知道该节点是否回复,这是最基本的

如果预留了一个你要的接口,连一致性的保证不了,脱离了 raft 协议框架,还谈什么谈

这个话题没必要继续,我觉得还是先去了解 raft 协议本身