本次集群部署使用的组件:
nacos-server 2.2.1
nginx 1.18.0
一、集群请求流程
一般使用nacos集群时,会在前端与后端之间采用nginx中间层作一个负载均衡,然后根据nacos集群中注册的服务,具体调用对应服务。

二、nginx安装
# 更新索引
sudo apt update
# 安装nginx
sudo apt install nginx
# 查看nginx版本
nginx -v
# 启动nginx
sudo systemctl start nginx
# 停止nginx
sudo systemctl stop nginx
# 重启nginx
sudo systemctl restart nginx
# 安装curl命令
sudo apt install curl
# 使用curl命令访问服务
curl http://127.0.0.1

三、nacos 数据源切换
nacos默认注册信息的数据是存在内存中的,为了保证集群中不同nacos实例的数据一致性,建议是使用mysql数据库作为注册信息数据源。
进入nacos配置文件目录conf/application.properties
#使用外置mysql数据源
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconn
ect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

四、nacos服务集群配置
- 重命名配置文件
cluster.conf.example为cluster.conf
mv cluster.conf.example cluster.conf
- 在
cluster.conf文件中添加集群节点信息(这里因为是单机模拟集群部署,所以需要修改端口,同时新版本的Nacos会占用四个连续的端口用于RPC调用,所以端口间隔最少为4)

- 修改
bin/startup.sh文件关于集群JVM参数,因为虚拟机分配的内存比较小,所以为了保证正常集群部署,所以改小一下配置参数,内存足够的可以忽略这一步
-Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m

- 将nacos复制为三个服务
cp -r nacos nacos8848 nacos8858 nacos8868

- 分别修改对应
conf/application.properties文件中的服务端口

- 分别启动nacos服务,观察nacos控制台,表明nacos集群部署成功

五、nginx配置
虽然nacos的集群部署已经完成,但是我们的订单服务配置文件中不可以直接配置其中一个nacos服务,这样就回到了单机模式了。所以我们需要通过一个nginx服务将订单服务的请求分发到不同nacos节点上。
- 在
/etc/nginx/nginx.conf文件中添加Nacos集群服务代理
upstream nacoscluster {
server 127.0.0.1:8848;
server 127.0.0.1:8858;
server 127.0.0.1:8868;
}
server {
listen 8847;
server_name localhost;
location /nacos/{
proxy_pass http://nacoscluster/nacos/;
}
}
由于nacos需要占用端口供gRPC调用使用,端口是基于服务端口+1000,所以还需在ngnix中将gRPC端口暴露出来
# nacos的grpc协议配置
stream {
# 负载均衡配置(TCP长连接配置)
upstream nacoscluster-tcp{
server 127.0.0.1:9848;
server 127.0.0.1:9858;
server 127.0.0.1:9868;
}
server {
listen 9847;
proxy_pass nacoscluster-tcp;
}
}

- 启动nginx服务
# 启动nginx服务
sudo systemctl start nginx
# 停止nginx服务
sudo systemctl stop nginx
# 重启nginx服务
sudo systemctl restart nginx
- 请求nginx代理的nacos服务地址,代理成功

六、微服务配置
- 订单以及库存服务
application.yml文件中server-addr修改为nginx服务地址

- 通过nginx代理地址,正常访问Nacos控制台,同时订单和库存服务均正确注册

- 请求订单服务
[http://localhost:8020/order/add](http://localhost:8020/order/add),调用库存服务正常
