背景
一次Nacos升级过程中由于是跨大版本升级,直接从。1.4.x升级到2.1.0
现象
升级完成后,发现dubbo服务一直注册不上,并持续报错:
Client not connected,current status:STARTING
排查
1、首先检查了nacos-server的版本,未发现异常,都是2.1.0版本。 2、检查了服务器防火墙于端口开放问题。未发现异常。控制台可以正常访问。 3、由于我们的开发环境是docker部署。 docker-compose.yml如下:
nacos-server:
platform: linux/x86_64
image: nacos/nacos-server:v2.1.0
container_name: nacos-server
restart: always
environment:
TZ: Asia/Shanghai
PREFER_HOST_MODE: ip
MODE: standalone
SPRING_DATASOURCE_PLATFORM: mysql
# mysql信息配置
MYSQL_SERVICE_HOST: mysql
MYSQL_SERVICE_DB_NAME: nacos_dev
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_USER: root
MYSQL_SERVICE_PASSWORD: L0rfBGXhvrt9f7L8
MYSQL_SERVICE_DB_PARAM: characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true
JVM_XMS: 128m
JVM_MMS: 128m
volumes:
- ./nacos/logs/:/home/nacos/logs
ports:
- "7737:8848"
- "7738:9848"
- "7739:9849"
networks:
my_net:
ipv4_address: 172.30.0.19
查看官网: nacos.io/zh-cn/docs/…
发现有这么一句话:
但是我们的docker映射端口并没有按照这个偏移量设置!!!
排查源码过程:
1、首先解析主端口号的核心代码
com.alibaba.nacos.common.remote.client.RpcClient#resolveServerInfo
2、其次设置grpc端口的核心代码
com.alibaba.nacos.common.remote.client.grpc.GrpcClient#connectToServer
端口设置就是在截图圈红部分,然后从this.rpcPortOffset()我们可以发现:
由于我们并没有设置nacos.server.grpc.port.offset
所以默认是1000。
我们docker映射的端口偏移量不是1000.所以猜想可能是这个原因造成的。
解决
方法1:修改docker-compose.yml中的端口映射,按照文档中的偏移量生成:
ports:
- "7737:8848"
- "8737:9848"
- "8738:9849"
方法2: 启动的时候,加上(具体的数值自己定)
-Dnacos.server.grpc.port.offset=0
或者在主启动类硬编码也 可以
System.setProperty("nacos.server.grpc.port.offset","0");
重启后解决!!