Nacos1.x升级2.x后出现连接失败的问题

1,010 阅读1分钟

背景

一次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/…

发现有这么一句话:

image.png

但是我们的docker映射端口并没有按照这个偏移量设置!!!

排查源码过程:

1、首先解析主端口号的核心代码

com.alibaba.nacos.common.remote.client.RpcClient#resolveServerInfo

image.png

2、其次设置grpc端口的核心代码 com.alibaba.nacos.common.remote.client.grpc.GrpcClient#connectToServer

image.png

端口设置就是在截图圈红部分,然后从this.rpcPortOffset()我们可以发现:

image.png

由于我们并没有设置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");

重启后解决!!