最近自己的集群在扩缩容的时候出现了这个问题 : unable to find local peer: ip:port, all peers: []
逛社区发现很多同学都碰到了类似的场景,后面自己解决了,记录一下经验,如果能帮助到通过这个异常检索这个issue的同学就再好不过了。
异常的背景:肯定是集群的raft协议通信有问题,正确的raft集群没有建立起来,所以第一个要排查的就是集群的7848端口是否可以正常通信( 主端口 - 1000 ),如果端口正常再往下排查。
问题的出现:我构建了一个由A、B、C三个机器组成的集群。某天机器C挂了,将机器C从集群中移除,新增机器D加入集群,同时修改机器A、B的cluster.conf文件,移除机器C的地址,新增机器D的地址。机器B在重启之后,nacos.log就频繁出现上面的异常了。
寻因的过程:这条异常所在的文件是RaftPeerSet.java,这个类已经被申明Deprecated了,将来应该会被remove掉,只不过现阶段出现这个异常看起来糟心。异常的直接原因是该类的peers成员值为空,那就直接去搜更改peers的日志 。
Loggers.RAFT.info("raft peers changed: " + members);
去机器B的项目目录的logs文件夹下执行命令less naming-raft.log | grep "raft peers changed"
看到最近的一条日志,现在机器B内存里记录的members里面,关于机器A的extendInfo中的 term = -1,那就猜想跟机器A的通信异常。
去机器A的logs目录执行同样的命令,果然发现日志记录关于机器B的extendInfo中的 term = -1.
解决的办法:重启大法好。不过重启之前删掉data目录是一个比较好的做法。
最后删除机器A的data目录,然后重启,问题就解决了。
猜想:社区里其他同学碰到类似的问题本质上应该都跟地址的变动导致集群raft构建失败有关,无论这个地址是ip还是域名。我试过重启机器B并删掉data目录,但是并不能奏效,说明应该还是要找跟机器B通信失败的节点。
时间和水平有限,未能深入理解学习raft协议的源码,暂时只能记录一个解决办法了。
如果大佬们有更多的见解,有劳多多指教。
暂无答案!
目前还没有任何答案,快来回答吧!