Nginx代理Nacos集群部署

一、环境

操作系统:Centos7及以上或Mac
Nginx版本:1.21.6
Nacos版本:2.0.4
Nginx网址Nginx中文文档Nacos网址

二、Nacos集群部署
  • bin目录下的【start.sh】文件配置内容如下:
export SERVER="nacos-server"
export MODE="cluster"
export FUNCTION_MODE="all"

说明:

  1. 下载后直接解压,不需要进行调整Nacos默认就是集群启动:
  2. 如有修改单机运行的小伙伴,需要把单机启动改回集群启动
  • conf目录下的【application.properties】文件配置

集群端口配置: 由于Nacos2.x增加了gRPC的通讯且端口和服务端口不一致(详见Nacos兼容性文档说明),所有集群各服务之间的端口配置需要至少间隔1个,如:8848、8850、8852等。

#*************** Spring Boot Related Configurations ***************#
### Default web context path:
server.servlet.contextPath=/nacos
### Default web server port:
server.port=8850

数据源配置: 数据源是Nacos集群信息共享的载体。默认仅支持MySql数据,其他数据库小伙伴们可以通过源码自行实现。

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
# 数据库类型
spring.datasource.platform=mysql

### Count of DB:
# 数据源索引,nacos可以支持多数据源
db.num=1

### Connect URL of DB:
# 数据源配置
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=Root@1234

### Connection pool configuration: hikariCP
# 数据连接池配置,nacos默认使用hikariCP JDBC连接池
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
  • conf目录下的【cluster.conf】文件配置,需要将各集群节点的IP+端口配置,如下代码:
# 三个节点的集群
192.168.0.28:8850
192.168.0.28:8852
192.168.0.28:8854
  • 启动nacos集群节点服务,启动命令相对还是比较简单的,其实就是启动一个springboot的jar包服务。
&> sh /bin/start.sh
三、Nginx配置

由于Nacos2.x相比1.x新增了gRPC通信方式,因此需要增加2个端口。所有在使用VIP/nginx请求时,需要配置成TCP转发,不能配置http2转发,否则连接会被nginx断开。
在Nginx中的配置有两种方式,每种的配置方式如下:

  • 第一种配置方式,此种方式进行可访问nacos控制台,无法集成到项目中。
# tpc服务
stream {
  # tcp负载均衡
  upstream nacos-tcp-9848 {
    server 127.0.0.1:9850 weight=1;
    server 127.0.0.1:9852 weight=1;
    server 127.0.0.1:9854 weight=1;
  }
  # Nacos客户端gRPC请求服务端端口
  server {
    listen 9848;
    proxy_pass nacos-tcp;
  }
  # tcp负载均衡
  upstream nacos-tcp-9849 {
    server 127.0.0.1:9851 weight=1;
    server 127.0.0.1:9853 weight=1;
    server 127.0.0.1:9855 weight=1;
  }
  # Nacos服务端gRPC请求服务端端口
  server {
    listen 9849;
    proxy_pass nacos-tcp-9849;
  }
}
# http请求服务
http {
  ……
  # 负责均衡
  upstream nacos-cluster {
    server 127.0.0.1:8850 weight=1;
    server 127.0.0.1:8852 weight=1;
    server 127.0.0.1:8854 weight=1;
  }
  # 服务
  server {
    listen     8848;
    server_name localhost;
    # 拦截所有请求并通过负载均衡转发
    location / {
      proxy_pass http://nacos-cluster/;
    }
  }
}

nginx 转发kafak nginx转发nacos_Nacos集群

  • 第二种配置方式,此种方式配置上稍有繁琐,但可以和项目集成按照nacos原有集群方式配置
# tcp服务
stream {
  # Nacos客户端gRPC请求服务端端口 start
  upstream name-tcp-9850 {
    server 127.0.0.1:9850 weight=1;
  }
  server {
    listen 9844;
    proxy_pass name-tcp-9850;
  }
  upstream name-tcp-9852 {
    server 127.0.0.1:9852 weight=1;
  }
  server {
    listen 9846;
    proxy_pass name-tcp-9852;
  }
  upstream name-tcp-9854 {
    server 127.0.0.1:9854 weight=1;
  }
  server {
    listen 9848;
    proxy_pass name-tcp-9854;
  }
  # Nacos客户端gRPC请求服务端端口 end
  # Nacos服务端gRPC请求服务端端口 start
  upstream name-tcp-9851 {
    server 127.0.0.1:9851 weight=1;
  }
  server {
    listen 9845;
    proxy_pass name-tcp-9851;
  }
  upstream name-tcp-9853 {
    server 127.0.0.1:9853 weight=1;
  }
  server {
    listen 9847;
    proxy_pass name-tcp-9853;
  }
  upstream name-tcp-9855 {
    server 127.0.0.1:9855 weight=1;
  }
  server {
    listen 9849;
    proxy_pass name-tcp-9855;
  }
  # Nacos服务端gRPC请求服务端端口 end
}
# http请求服务
http {
  # 第一个节点服务
  server {
    listen     8844;
    server_name localhost;
    location / {
      proxy_pass http://127.0.0.1:8850/;
    }
  }
  # 第二个节点服务
  server {
    listen     8846;
    server_name localhost;
    location / {
      proxy_pass http://127.0.0.1:8852/;
    }
  }
  # 第三个节点服务
  server {
    listen     8846;
    server_name localhost;
    location / {
      proxy_pass http://127.0.0.1:8854/;
    }
  }
}

nginx 转发kafak nginx转发nacos_nginx 转发kafak_02

四、总结

通过在Nginx中配置Nacos集群的来看,2.x和1.x配置差异还是蛮大的。主要是2.x引入了gRPC通讯新增了2个端口,而且必须在naginx上要配置上这两个端口,否则无法完美集成到项目中。

  • 整体部署图如下


nginx 转发kafak nginx转发nacos_Nacos集群_03