记录Spring Cloud Alibaba版本升级造成的nacos连接失败的遭遇

在升级SpringCloudAlibaba及其内置的Nacos客户端到2.2.0版本后,遇到Nacos启动报错ClientNotConnected。问题源于Nacos2.x引入的gRPC通信方式,需开放额外端口。解决方案是更新Docker容器配置,映射新端口,并在防火墙开启相应端口,确保客户端和服务端的通信畅通。

背景

今天对项目中的部分依赖进行升级,升级完后启动项目nacos一直报错Client not connected, current status:STARTING ,具体如下图:
在这里插入图片描述

一、升级过程

关键依赖升级前后版本对比情况如下表:

依赖名称升级前版本升级后版本Spring Cloud Alibaba内置nacos客户端版本服务端nacos版本
spring-boot-dependencies2.6.8未升级未涉及未涉及
spring-cloud-dependencies2021.0.12021.0.7未涉及未涉及
spring-cloud-alibaba-dependencies2021.0.1.02021.0.5.01.4.2(升级前) / 2.2.0(升级后)2.0.2(升级前) / 2.2.0(升级后)

如表所述,项目中依赖版本调整后,因为Spring Cloud Alibaba 版本由2021.0.1.0升级到2021.0.5.0版本后,内置的nacos client 版本由1.4.2升级到了2.2.0。为了避免出现兼容性问题,于是我将自己的nacos服务端的版本也由2.0.2升级到了2.2.0版本,自以为一切都欧克了,结果启动项目的时候便碰到了文章开头背景里面提到的情况。

二、问题排查

遇到问题不要慌,先百度一番:翻了几篇博文以后,大概知道了是nacos升级到2.x后新增了gRPC的通信方式,因此需要增加2个额外端口进行客户端和服务端以及服务端和服务端的gRPC通信。官网解释如下图:
在这里插入图片描述

更多解释移步官网查看:https://nacos.io/zh-cn/docs/v2/upgrading/2.0.0-compatibility.html

于是乎,大概知道了原因,因为我的nacos服务端是docker部署的,之前部署只映射了一个端口,于是删掉了旧的容器,添加了配置后重新启动了新的容器。前后配置如下图:

	修改前:
	docker run -d \
	-e PREFER_HOST_MODE=ip \
	-e MODE=standalone \
	-e SPRING_DATASOURCE_PLATFORM=mysql \
	-e MYSQL_SERVICE_HOST=42.192.***.*** \
	-e MYSQL_SERVICE_PORT=3306 \
	-e MYSQL_SERVICE_USER=root \
	-e MYSQL_SERVICE_PASSWORD=root \
	-e MYSQL_SERVICE_DB_NAME=nacos \
	-e TIME_ZONE='Asia/Shanghai' \
	-v /home/nacos/logs:/home/nacos/logs \
	-p 13214:8848 \
	--name nacos \
	--restart=always \
	nacos/nacos-server:v2.2.0

	修改后(其实就是多加了两个端口):
	docker run -d \
	-e PREFER_HOST_MODE=ip \
	-e MODE=standalone \
	-e SPRING_DATASOURCE_PLATFORM=mysql \
	-e MYSQL_SERVICE_HOST=42.192.***.** \
	-e MYSQL_SERVICE_PORT=3306 \
	-e MYSQL_SERVICE_USER=root \
	-e MYSQL_SERVICE_PASSWORD=root \
	-e MYSQL_SERVICE_DB_NAME=nacos \
	-e TIME_ZONE='Asia/Shanghai' \
	-v /home/nacos/logs:/home/nacos/logs \
	-p 13214:8848 \
	-p 14214:9848 \
	-p 14215:9849 \
	--name nacos \
	--restart=always \
	nacos/nacos-server:v2.2.0
	

因为是我自己玩的项目,用的是腾讯云部署的nacos,所以还要在防火墙开通上述端口,值得注意的是,8848端口对应的13214端口以及9848对应的14214端口是需要客户端和服务端通信的,所以13214和14214都需要在防火墙对外开放,而官网解释9849只是服务端之间进行gRPC通信才用,因此不需要在防火墙开通也是可以的。防火墙配置如下图:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值