背景
今天对项目中的部分依赖进行升级,升级完后启动项目nacos一直报错Client not connected, current status:STARTING ,具体如下图:
一、升级过程
关键依赖升级前后版本对比情况如下表:
依赖名称 | 升级前版本 | 升级后版本 | Spring Cloud Alibaba内置nacos客户端版本 | 服务端nacos版本 |
spring-boot-dependencies | 2.6.8 | 未升级 | 未涉及 | 未涉及 |
spring-cloud-dependencies | 2021.0.1 | 2021.0.7 | 未涉及 | 未涉及 |
spring-cloud-alibaba-dependencies | 2021.0.1.0 | 2021.0.5.0 | 1.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通信才用,因此不需要在防火墙开通也是可以的。防火墙配置如下图:
声明:本站所有资源,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。