-
Notifications
You must be signed in to change notification settings - Fork 311
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
rdsn coredump - add primary replica as a learner #315
Comments
现有的failure detection机制如下图所示:
replica server(worker) 周期性(3秒)给meta server(maser)发送心跳
维持现有failure detection机制正确性的关键点在于:master使用的grace lease比worker的lease稍长一点,确保worker首先发现自己与master失联,master才发现这个worker失联。 |
出现core的原因就是违背了上述前提,master发现某个worker失联,而worker并没有发现自己失联,即某个worker“假失联”。 具体来说,master在认为worker失联后,会为worker上的所有primary重新assign primary,在此期间“假失联”的worker通过心跳又被master认为alive,新primary选择这个“假失联”的replica server作为新的secondary,并且meta向它发送propose,而“假失联”的server依旧认为自己是replica的primary。我们认为replica不能从primary转化成secondary,这是一种非法的状态转化,因此产生了这个core。 在实际环境中,我们还发现出现master认为worker“假失联”,但是并没有产生core的情况。 |
通过分析日志发现,worker没有发现自己失联。第一,没有失联和切换master的log打印出来; 第二,当心跳包的error code不为ERR_OK时,pref-counter _recent_beacon_fail_count会加1,而出问题的集群该pref-counter值都为0; 第三,当master认为worker失联后,它依旧能收到worker的心跳包,并将worker重新设置为alive,因此,初步判断worker的行为是正常的。 目前我在1.11.3的代码中添加了一些log,在测试集群上运行了3周均未复现该问题,但是线上集群却不规律的出现这个bug,出现问题的集群并不是总在灌数据,出bug的时间也没有规律。 现在我计划在出现bug的集群的meta server上搭建meta节点,在测试集群上搭建replica节点,尝试先复现这个问题。 |
This bug is fixed in release 1.11.6 https://github.com/XiaoMi/pegasus/releases/tag/v1.11.6. |
Server Version
Coredump Stack
frame 3 local
The text was updated successfully, but these errors were encountered: