高可用微服务架构实战:Nacos集群+Nginx负载均衡,Spring Cloud无缝对接
"当你的注册中心挂了,整个微服务就变成了无头苍蝇。" 这是我在生产环境踩坑后最痛的领悟。今天,我将分享如何用Nacos集群+Nginx搭建坚如磐石的注册中心,让你的微服务永不迷路!
在 Windows 环境下配置 Nacos 集群,核心步骤与 Linux 类似,主要是配置持久化数据库(推荐 MySQL)、设置集群节点列表、修改配置文件并分别启动各个 Nacos 实例。
为什么你的微服务需要这个方案?
在分布式系统中,注册中心就是微服务的地图导航。一旦它宕机:
-
服务发现机制崩溃 😱
-
配置更新全面停滞 ⚠️
-
整个系统陷入瘫痪 💥
传统单点部署的Nacos就像走钢丝,而我们的方案提供:
-
✅ 99.99%高可用性 - 集群自动故障转移
-
✅ 动态扩展能力 - 随时添加新节点
-
✅ 零感知升级 - 逐个节点滚动更新
-
✅ 智能流量分配 - Nginx负载均衡策略
前置准备
-
安装 JDK 8+
-
下载 Oracle JDK 或 OpenJDK
-
安装并配置环境变量:
-
JAVA_HOME
= JDK 安装路径(如C:\Program Files\Java\jdk-17
) -
在
Path
中添加%JAVA_HOME%\bin
-
-
验证:打开 CMD,执行
java -version
,输出版本信息即成功。
-
-
下载 Nacos Server
-
访问 Nacos GitHub Releases
-
下载最新稳定版
nacos-server-x.x.x.zip
(如nacos-server-2.2.3.zip
) -
解压到 三个独立目录(模拟三节点集群):
-
D:\nacos-cluster\node1
-
D:\nacos-cluster\node2
-
D:\nacos-cluster\node3
-
-
-
安装 MySQL 数据库
-
下载 MySQL Installer
-
安装 MySQL Server 5.7+(推荐 8.0)
-
记住设置的
root
密码 -
创建 Nacos 专用数据库:
CREATE DATABASE nacos_config CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-
执行初始化脚本:
-
找到 Nacos 目录下的
conf/nacos-mysql.sql
-
在 MySQL 命令行或工具中执行:
mysql -u root -p nacos_config < D:\nacos-cluster\node1\conf\nacos-mysql.sql
-
-
配置 Nacos 集群节点
1. 配置数据库连接(每个节点)
-
打开
node1/conf/application.properties
-
修改以下配置(取消注释并填写真实信息):
# 启用 MySQL 数据源
spring.datasource.platform=mysql# 数据库数量(单库填1)
db.num=1# 数据库连接(重点修改以下三行!)
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=your_mysql_password # 替换为你的密码
-
重复操作:对
node2
、node3
的application.properties
做相同修改。
2. 配置集群节点列表(每个节点)
-
在
node1/conf/
目录下 新建文件cluster.conf
(若存在则编辑) -
添加以下内容(单机模拟需用不同端口,生产环境用不同IP):
-
# 格式:真实IP:端口(同一机器必须不同端口) 127.0.0.1:8848 127.0.0.1:8849 127.0.0.1:8850
-
复制文件:将
cluster.conf
复制到node2/conf/
和node3/conf/
目录(确保三节点内容完全一致)。
3. 修改节点端口(单机模拟必做)
-
Node1 端口:
打开node1/conf/application.properties
,修改:server.port=8848
-
Node2 端口:
打开node2/conf/application.properties
,修改:server.port=8849
-
Node3 端口:
打开node3/conf/application.properties
,修改:server.port=8850
启动 Nacos 集群
1. 启动命令(每个节点独立窗口)
-
Node1 启动:
cd D:\nacos-cluster\node1\bin startup.cmd -m cluster
-
Node2 启动:
cd D:\nacos-cluster\node2\bin startup.cmd -m cluster
-
Node3 启动:
cd D:\nacos-cluster\node3\bin startup.cmd -m cluster
2. 验证启动日志
-
观察每个 CMD 窗口输出:
-
出现
Nacos started successfully in cluster mode
表示启动成功。
-
访问Nacos
1. 安装 Nginx
-
下载 Windows 版 Nginx: nginx.org/en/download.html
-
解压到目录(如
D:\nginx
) -
验证安装:CMD 执行
D:\nginx\nginx.exe
,访问http://localhost
看到欢迎页
2. 配置 Nginx 负载均衡
编辑 D:\nginx\conf\nginx.conf
,在 http {}
块内添加:
# 配置 Nacos 集群负载均衡
upstream nacos-cluster {# 负载均衡策略(可选:weight轮询/IP_hash/least_conn)least_conn; # 使用最少连接数策略# Nacos 集群节点(IP:端口)server 127.0.0.1:8848 max_fails=3 fail_timeout=30s; # 节点1server 127.0.0.1:8849 max_fails=3 fail_timeout=30s; # 节点2server 127.0.0.1:8850 max_fails=3 fail_timeout=30s; # 节点3# 健康检查(需安装额外模块,或使用商业版)# keepalive 32; # 保持连接数
}server {listen 80; # 监听端口server_name nacos.lb; # 域名(本地需配hosts)# Nacos API 路由location / {proxy_pass http://nacos-cluster; # 指向上游proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;# 重要:超时设置proxy_connect_timeout 5s;proxy_read_timeout 60s;proxy_send_timeout 30s;}# Nacos 控制台路由location /nacos/ {proxy_pass http://nacos-cluster/nacos/;# 保持相同配置...}
}
3. 本地域名解析(可选)
编辑 C:\Windows\System32\drivers\etc\hosts
添加:
127.0.0.1 nacos.lb
4. 启动 Nginx
cd D:\nginx
nginx.exe -t # 验证配置
nginx.exe -s reload # 重新加载配置
5. 验证负载均衡
访问 http://nacos.lb/nacos
应能轮询访问到不同 Nacos 节点(查看节点列表中的访问 IP)
二、Spring Cloud 配置通过 Nginx 访问
1. 修改 Spring Cloud 配置文件
在 application.yml
或 bootstrap.yml
中配置:
spring:cloud:nacos:# 统一使用 Nginx 入口地址discovery:server-addr: nacos.lb:80 # 服务发现地址config:server-addr: nacos.lb:80 # 配置中心地址file-extension: yaml # 配置文件格式# 高级配置(可选)username: nacospassword: nacosnamespace: public # 命名空间group: DEFAULT_GROUP # 配置组
2. 关键参数说明
参数 | 说明 |
---|---|
server-addr | Nginx 地址(域名/IP + 端口) |
file-extension | 配置文件后缀(yaml/properties) |
namespace | 对应 Nacos 的命名空间 ID |
group | 配置分组名 |
3. 添加 Maven 依赖
确保包含最新 Nacos 客户端:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2022.0.0.0</version>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2022.0.0.0</version>
</dependency>
三、全流程验证
1. 启动顺序
-
启动 MySQL 数据库
-
启动 Nacos 集群(三个节点)
-
启动 Nginx
-
启动 Spring Cloud 应用