Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

集群leader选举问题 #3652

Closed
wu603772498 opened this issue Aug 20, 2020 · 11 comments
Closed

集群leader选举问题 #3652

wu603772498 opened this issue Aug 20, 2020 · 11 comments
Assignees
Labels
kind/question Category issues related to questions or problems

Comments

@wu603772498
Copy link

问题场景:五个节点ABCDE,其中A,B,C 在一个网段Net1,其中A 为leader; D,E在另外一个网段Net2;那么Net2由于某种原因,某短暂时间不能和Net1通信,导致net2 节点D,E 进行leader选举,term 任期不断加1,而此时有服务注册,使ABC 节点服务数据有新增;

那么问题来了,当Net1和Net2网络恢复正常了,此时D 发起leader选举,由于term>A,B,C ,有可能选举通过并且最后成为leader ,这样就会造成数据丢失,因为A,B,C 的数据明显多于D,最后通过心跳 会把其它节点数据保存和新leaderD一制;数据成功丢失

这是我看代码的理解,不知道会不会有这种现象,麻烦解答一下呢

@wu603772498 wu603772498 changed the title 集群leader选择问题 集群leader选举问题 Aug 20, 2020
@KomachiSion
Copy link
Collaborator

nacos的自建的raft,修改数据和发起的同步 任期是+100, 选举的任期+1。如果ABC有数据在更新, 那么选举的所加的任期是很难超过的。

@KomachiSion KomachiSion added the kind/question Category issues related to questions or problems label Aug 20, 2020
@wu603772498
Copy link
Author

nacos的自建的raft,修改数据和发起的同步 任期是+100, 选举的任期+1。如果ABC有数据在更新, 那么选举的所加的任期是很难超过的。

那我问一下,如果一开始leader 就是D ,那么A,B,C 进行选举,选出leader 为A ,这样会不会有双leader 现象呢

@chuntaojun
Copy link
Collaborator

nacos的自建的raft,修改数据和发起的同步 任期是+100, 选举的任期+1。如果ABC有数据在更新, 那么选举的所加的任期是很难超过的。

那我问一下,如果一开始leader 就是D ,那么A,B,C 进行选举,选出leader 为A ,这样会不会有双leader 现象呢

需要满足过半的要求

@wu603772498
Copy link
Author

一开始leader 就是D 呀,应该网络问题,DC 暂时和ABC 连不上,导致ABC 进行选举,A 收到了3票,已经过半了呀,这样A ,D 都是leader 了

@chuntaojun
Copy link
Collaborator

一开始leader 就是D 呀,应该网络问题,DC 暂时和ABC 连不上,导致ABC 进行选举,A 收到了3票,已经过半了呀,这样A ,D 都是leader 了

你这个属于网络分区的问题,要看最后两个leader的term以及log index,但是对于nacos自建的raft,只能比较term,跟随大的

@wu603772498
Copy link
Author

但是如果出现了双leader 不会有问题?

@chuntaojun
Copy link
Collaborator

但是如果出现了双leader 不会有问题?

对于nacos自建的raft是会有问题的,其原因在于,另一个分区中的Leader是能够处理请求

@wu603772498
Copy link
Author

对呀,我看源码也发现了会有双leader 问题,虽然只有一个leader 能个接受新服务注册,不会有数据丢失,但是如果请求发送到另一个leader 就会导致服务注册不成功

@wu603772498
Copy link
Author

这个问题后期才解决吗

@KomachiSion
Copy link
Collaborator

1.4版本计划替换成Jraft,应该就不会有问题了

@chuntaojun chuntaojun self-assigned this Aug 21, 2020
@chuntaojun chuntaojun added this to the 1.4.0 milestone Aug 21, 2020
@KomachiSion
Copy link
Collaborator

Refer to #3635

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/question Category issues related to questions or problems
Projects
None yet
Development

No branches or pull requests

3 participants