问题现象:
项目采用类似以下方式进行部署,共5台服务器,每台服务器分别部署一个服务,各服务器之前端口需要单独开通,client A 和client B 是不同的服务。
当时出现的现象是client A可以注册成功,但client B一直注册失败。如果把nacos服务端放到 client B的服务器上,client B又可以注册成功
。
这时候怀疑是nacos服务端的网络端口没开放给client B服务器导致注册不上去,但用telnet 试了下8848端口是通的,而nacos服务端开放给client A的端口与client B的端口是一致的。
网络端口开通情况:
1.nacos server 开放 8848端口 给 client A
2.nacos server 开放 8848端口 给 client B
原因分析与解决:
后面在排查中发现,果然还是服务器端口没开放导致的。
各服务nacos的版本:
服务 | nacos版本 |
---|---|
nacos server | 2.* |
nacos client A | 1.* |
nacos client B | 2.* |
原因就是客户端版本不一致导致出现了前面的场景,具体原因如下:
clientA由于版本是1.*的,开通8848端口就能直接注册成功
clientB由于版本是2.*的,开通8848端口还不能注册成功,还需要开通9848端口
;
在nacos服务端开放9848端口给client B后,完美解决问题。
下面看下nacos 1.* 和 nacos 2.* 部署的区别。
- nacos客户端使用2.* 版本,那nacos服务端也需要使用2.* 版本。
- nacos2.* 版本相比1.* 新增了gRPC的通信方式,因此需要增加2个端口。新增端口是在配置的主端口(server.port)基础上,进行一定偏移量自动生成。
端口 | 与主端口的偏移量 | 描述 |
---|---|---|
9848 | 1000 | 客户端gRPC请求服务端端口,用于客户端向服务端发起连接和请求 |
9849 | 1001 | 服务端gRPC请求服务端端口,用于服务间同步等 |
使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。
以下是nacos官网关于2.*版本的一张图,从图中可以看出:
- 客户端与服务端需开通8848,9848端口
- 服务端之间需要开通8848,7848,9849端口
来源地址:https://blog.csdn.net/pushen3584/article/details/129228161