最近学习Nacos,目前很多教程都是基于Nacos1.x版本的,但其实Nacos2.x对比1.x变化较大,导致很多操作如果还是照着教程就会出错。这里总结一下。
Nacos2.x的变化
Nacos2.x最主要的变化就是新增了几个端口:
一个是Nacos主端口+1000(比如9848),该端口用于客户端gRPC请求服务端,另外两个分别是主端口+1001和-1000,都是用于服务端之间的请求。
详细参考官方文档:Nacos 2.0.0 兼容性文档
需要注意的点
根据上面的点,总共有这么几个需要注意的点。
- Nacos服务端部署时,端口至少大于1000
- Nacos集群部署时,假设是在同一网段内,端口不能连续。
比如在本机连续部署三个Nacos服务端, 端口不能为8848、8849、8850,因为服务端需要额外开启两个端口。比如第一个Nacos服务器端口为8848,它将还会占用7848和8849,这将导致第二个Nacos服务端无法启动因为8849被占用。
- 如果是要做VIP/Nginx的话,Nginx还要额外监听源端口+1000,因为客户端还需要源端口+1000用于与服务端进行gRPC请求。下面会给出详细的Nginx配置。
关于Nginx配置
假设我们现在有三个Nacos服务器,端口分别为8810、8820、8830,准备建立集群。然后希望使用Nginx做统一的转发,Nginx负责监听80端口,那么我们不仅要监听80端口,还要监听1080端口。另外根据上面给出的官方文档提到的,用于进行gRPC请求的端口应该进行TCP转发,不能使用HTTP2转发。
这一点其实也决定了无法使用Spring Cloud Gateway去做端口转发了,因为其只能做HTTP转发。
需要注意的是,Nginx做TCP转发的话,需要将版本升级到1.9.0以上。
http{
upstream nacos-cluster {
server localhost:8810;
server localhost:8820;
server localhost:8830;
}
server{
listen 80;
location / {
proxy_pass http://nacos-cluster;
}
}
}
# stream块用于做TCP转发
stream{
upstream nacos-cluster {
server localhost:9810;
server localhost:9820;
server localhost:9830;
}
server{
listen 1080;
proxy_connect_timeout 20s;
proxy_timeout 5m;
proxy_pass nacos-cluster;
}
}