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"
说明:
- 下载后直接解压,不需要进行调整Nacos默认就是集群启动:
- 如有修改单机运行的小伙伴,需要把单机启动改回集群启动
- 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/;
}
}
}
- 第二种配置方式,此种方式配置上稍有繁琐,但可以和项目集成按照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中配置Nacos集群的来看,2.x和1.x配置差异还是蛮大的。主要是2.x引入了gRPC通讯新增了2个端口,而且必须在naginx上要配置上这两个端口,否则无法完美集成到项目中。
- 整体部署图如下