-
Notifications
You must be signed in to change notification settings - Fork 1.2k
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
1.3.9 jraft 下2个节点时无法选主 #810
Comments
这日志很明显了
网络问题 |
你可以看下ip,都是一台机器,降级到1.3.7或以下就没问题 |
这是我自己故意kill leader触发重选举,不止一个用户出现这种情况了,五群里有个哥们跟我一样 |
这是你的所有日志了? 目前给出的日志说明不了什么。 另外在 windows 上的行为,我们不保证正确性啊,没有在 windows 系统验证。 |
我看日志是 192.168.31.181:9091 先挂,然后选举出来是 192.168.31.181:9093,接下来 192.168.31.181:9093 也失去连接了,当然选不出来了,因为 2/3 都挂了。 |
没有都挂,或者2台,日志很明显就是已经选出主了,结果又说达不到可用的数量,1.3.7就没问题,要不要录个视频给你?windows不保证正确性?raft下跟平台有什么关系,raft算法的结果应该是具备一致性的,你看sofastack五群吧,没必要给你整个莫须有的问题出来 |
另外将electionTimeoutMs拉长可以缓解,怀疑高版本下是升级了什么依赖,或者你们改动了什么,导致轻微网络抖动就出现重选举,或心跳断开,我本机其实本身就不存在什么网络问题,如果你觉得是我写的有问题,不妨自己在高版本下跑一下官方的计数器那个demo |
@killme2008 #781 老哥,是不是这个issue的问题引发的? |
raft 算法跟平台没关系,但是实现是有关系的,我们这个实现只在 linux/mac 下做过正确性验证(jepsen), windows 上由于一些文件 api 语义的差异(比如日志里那个 warn 你也看到了),我们是不保证的。 其次,目前单纯从你发过来的日志,只能看到就是网络断开了,至于为什么,需要你提供更多日志或者自行分析 最后,跟 #781 可能有关系,如果你有日志佐证后续心跳没有发了的话。 |
看了下 release note,从 1.3.7 到 1.3.9 并没有什么特别大的修改,跟网络相关的可能是 bolt 做了升级,你可以单纯在 1.3.9 降级下 bolt 看看。 |
手动下线leader节点
7093端口日志
7092:
|
升级1.3.10.bugfix无效,降级1.3.7后恢复正常 |
猜测跟 bolt 1.6.4 对超时的改进有关系,你可以降级 bolt 到 1.6.4 以下的版本(通过 maven exclusions), jraft 保持 1.3.9 或者 1.3.10 看看。 通过你的描述调大 electionTimeoutMs 能解决,大概率是这个问题。 |
@a364176773 感谢提供日志,我也来看下 |
大概有了一些线索,你既然是本地,就把 ip 地址换成 127.0.0.1(本地环回接口和外网 ip 是不同的通信方式) ,这个问题就不会再现了,所以基本可以得出结论是网络问题 如果你用对外的 ip,那么你降级 bolt 到 1.6.2(jraft 1.3.7 版本引用的 bolt 版本为 1.6.2) 也可以解决问题(问题得到缓解,但偶尔也会切主,这个估计还是因为 1.6.2 bolt 建连有阻塞),这个有点奇怪,我还不知道 bolt 做了啥,后续可能要继续查一下 |
好的,谢谢二位,我将会试一下直接使用127.0.0.1下是否会改善,届时将继续反馈到此issue |
我晚上又试了一下,1.3.10.bugfix版本,还是不行,只要是两个节点,就选不出来主,第三个节点启动后,才能选出主 |
这次把rpcconnectiontimeout和electiontimeout设置成了3秒都不行 |
这个尝试是说将 ip 修改为 127.0.0.1 的环路地址,还是说降级了 bolt ? |
大概找到原因了,我先简单说下,bolt 的建连超时与 jraft 的 ET 相同时(在 jraft 中 ET 同时也是 rpcTimeout ),会触发一个 bug,大概可以描述为: 顺便可以解答以下几个问题:
|
将 ip 修改为 127.0.0.1 的环路地址 |
家纯老师找到原因了就好,太强了 |
Describe the bug
A clear and concise description of what the bug is.
Expected behavior
Actual behavior
Steps to reproduce
Minimal yet complete reproducer code (or GitHub URL to code)
Environment
java -version
): 1.8uname -a
): windowsThe text was updated successfully, but these errors were encountered: