sofastack / sofa-jraft

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

Q:why need the preVote #995

Closed dajitui closed 1 year ago

dajitui commented 1 year ago

Your question

按照raft算法,只需要一次投票即可,对框架里面的preVote我不太理解它的作用是什么

shihuili1218 commented 1 year ago

总结就是,保证正常的工作的leader,继续正常工作。

在没有prevote的情况下,发生对称网络分区{a,b,c,d}和{e},e会一直尝试选举,使其拥有很大的term,等e回复后,因为e的term很大会导致集群现有的leader下线,重新选举。

然后选举期间,服务是不可用的。应该尽量避免这种情况,所以增加prevote来规避。

前任一哭,现任也不能输!!!

chenzhanpeng commented 1 year ago

主节点挂了,客户端用的GRPC,GRPC此时是连在主节点上的,主节点一挂,服务就不可用,即便这个时候已经选举成功了,也是不可用,除非你做重试

dajitui commented 1 year ago

主节点挂了,客户端用的GRPC,GRPC此时是连在主节点上的,主节点一挂,服务就不可用,即便这个时候已经选举成功了,也是不可用,除非你做重试

这个跟prevote没有什么关系