问题描述:
部署三台nacos作集群,nacos各节点都能正常启动,并且在nacos管理台,集群节点管理都能正常显示,但是服务节点列表:只有其中一台注册上,其他两台没有注册。
nacos分别部署在:
192.168.239.132:8848
192.168.239.131:8848
192.168.239.133:8848
打开管理台页面:
192.168.239.132 能正常注册服务:
但是192.168.239.132和192.168.239.133上没有成功注册服务
怀疑:其中一个节点收到注册数据后,没有同步给其它节点
那为什么没有同步?同步机制是什么呢?
1、查看nacos.log的日志,日志没有异常信息。
2、奇怪之下,花了点时间看了一下源代码,当nacos服务收到服务注册请求时,会调用【DistroSyncChangeTask】这个类,用于向各nacos节点推送服务数据变更通知,且日志记录在protocol-distro.log中。
3、查看protocol-distro.log,发现有大量的 [DISTRO] Sync data change failed,异常信息,看来是网络配置上有问题了。
4、先官网看了一下2.0的手册 ,里面有项提示,当nacos客户端升级为2.x版本后,新增了gRPC的通信方式,新增了两个端口。这两个端口在nacos原先的端口上(默认8848),进行一定偏移量自动生成。
要保证这两个端口不被占用。
解决办法:
各个服务器分别放开9848、9849两端口,然后重启网络发现服务能正常同步注册到三台nacos上了。
开放端口命令:
sudo firewall-cmd --zone=public --add-port=9848/tcp --permanent sudo firewall-cmd --zone=public --add-port=9849/tcp --permanent
重新加载防火墙规则 :
sudo firewall-cmd --reload
检查开放的端口 :
sudo firewall-cmd --list-ports
参考资料:https://blog.csdn.net/lzzyok/article/details/118057217