Skip to content

Nacos 部署

部署 Nacos 不只是把压缩包解压然后启动——它涉及 Java 运行环境、集群文件、MySQL 数据库、systemd 托管、鉴权配置,以及 Nacos 3.x 控制台端口和 API 端口分离造成的新入口差异。

一、部署拓扑

实验环境使用三台机器组成 Nacos 集群:

主机角色说明
192.168.10.11Nacos 节点 + MySQL控制台入口也放这里
192.168.10.12Nacos 节点纯 Nacos,连接同一 MySQL
192.168.10.13Nacos 节点纯 Nacos,连接同一 MySQL

实验里 MySQL 放在同一台机器上是为了节省机器。生产环境中 MySQL 需要独立高可用——Nacos 服务层三节点正常但数据库单点故障,配置发布、历史版本、用户权限这些操作全会受影响。

二、端口——Nacos 3.x 的关键变化

Nacos 3.2.1 用到的端口:

端口用途谁需要访问
8080新版控制台运维人员浏览器
8848HTTP API,客户端注册和配置读写业务应用、集群文件里的地址
9848客户端 gRPC 通信业务应用
9849服务端 gRPC 通信Nacos 节点之间
7848集群一致性(Raft)通信Nacos 节点之间
3306MySQL所有 Nacos 节点

Nacos 2.x 的旧资料通常直接访问 8848/nacos 登录控制台。Nacos 3.x 把控制台改到了 8080/next/8848 更偏服务端 API。访问 8848 会看到提示说控制台在 8080

防火墙只放 8080 的话控制台能打开,但业务应用连不上 88489848——注册和配置读取都会失败。

三、安装 Java 17

Nacos 3.x 要求 Java 17+。Rocky Linux 9:

bash
dnf install -y java-17-openjdk java-17-openjdk-devel
java -version     # 确认输出里有 17

如果机器上有多个 Java 版本,用 JAVA_HOME 环境变量在 systemd unit 里显式指定,避免启动脚本拿到旧版本。

四、准备 MySQL

sql
CREATE DATABASE nacos_config DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

CREATE USER 'nacos'@'%' IDENTIFIED BY 'Nacos@123456';
GRANT ALL PRIVILEGES ON nacos_config.* TO 'nacos'@'%';
FLUSH PRIVILEGES;

然后导入 Nacos 安装包自带的 MySQL schema 脚本。导入后确认核心表存在:

sql
USE nacos_config;
SHOW TABLES;    -- config_info、his_config_info、users 等

配置内容存在 config_info 表,历史版本存在 his_config_info 表,用户和权限也在数据库里。集群模式下 MySQL 不是可选组件——三台 Nacos 共享同一 MySQL,看到的才是同一套配置和权限。

五、解压和目录规划

三台机器保持一致的目录结构:

bash
mkdir -p /opt
tar xf nacos-server-3.2.1.tar.gz -C /opt
ln -sfn /opt/nacos-3.2.1 /opt/nacos     # 软链接便于后续升级切换

关键目录:

路径用途
/opt/nacos/bin启停脚本
/opt/nacos/conf配置文件、cluster.conf
/opt/nacos/logs运行日志
/opt/nacos/data本地数据目录

用软链接指向实际版本目录的好处:升级时解压新版本到 /opt/nacos-3.x.x,切换软链接指向新目录,保留旧版本备用。排错时 readlink -f /opt/nacos 一眼就能确定当前运行的是哪个版本。

六、集群文件 cluster.conf

conf/cluster.conf 写三台的 8848 API 端口地址:

text
192.168.10.11:8848
192.168.10.12:8848
192.168.10.13:8848

三台机器的文件内容必须完全一致。这里写的是 8848(服务端 API 端口),不是控制台的 8080。如果某台没写进 cluster.conf,它可能自己启动但不加入集群——控制台集群管理页面看不到它,但服务端进程在跑。

七、连接 MySQL 和鉴权配置

conf/application.properties

properties
spring.sql.init.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.10.11:3306/nacos_config?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
db.user.0=nacos
db.password.0=Nacos@123456

鉴权相关必须配置,三台保持完全一致:

properties
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=nacos-lab
nacos.core.auth.server.identity.value=nacos-lab-2026
nacos.core.auth.plugin.nacos.token.secret.key=TmFjb3NMYWJUb2tlblNlY3JldEtleTIwMjZGb3JOb3Rlcw==

token.secret.key 需要足够长度的 Base64 字符串,三台不一致会导致 A 节点签发的 token 在 B 节点校验失败。用 sed 修改 JDBC URL 时,URL 里的 & 可能被当作 sed 替换串里的特殊字符,配置行被截断——复杂 URL 手工确认或用完整配置模板覆盖比 sed 替换更可靠。

Nacos 3.x 启动脚本对鉴权配置项的检查比旧版更严。只在文件末尾追加同名配置项可能绕不过启动脚本的检查——脚本读取到原始的默认空值就直接报错。在原配置项所在位置填入有效值更稳妥。

八、systemd 管理

ini
[Unit]
Description=Nacos Server
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=root
Group=root
WorkingDirectory=/opt/nacos
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk"
Environment="CUSTOM_NACOS_MEMORY=-Xms512m -Xmx768m -Xmn256m"
ExecStart=/opt/nacos/bin/startup.sh
ExecStop=/opt/nacos/bin/shutdown.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

CUSTOM_NACOS_MEMORY 控制 JVM 堆内存,测试机内存不大时适当调低。默认 JVM 参数偏大,4G 机器上还要给 OS、MySQL 和其他服务留空间。

bash
systemctl daemon-reload
systemctl enable --now nacos
systemctl status nacos --no-pager

九、初始化密码和登录

首次访问控制台 http://192.168.10.11:8080/next/ 时,会要求初始化管理员 nacos 的密码。设置后数据写入 MySQL——后续登录不再弹出初始化页面。如果初始化页面反复出现,说明数据库里没存上用户信息,通常是 MySQL 连接异常。

实验环境管理员账号:

text
用户名: nacos
密码: nacos

真实环境弱密码和默认账号要尽早更换,并配合合适的 ACL 和网络隔离。

十、部署验证

端口检查:

bash
ss -lntp | egrep ':(8080|8848|9848|9849|7848)\b'

鉴权接口验证:

bash
curl -sS -X POST 'http://127.0.0.1:8848/nacos/v3/auth/user/login' \
  -d 'username=nacos&password=nacos'

返回 accessToken 说明登录鉴权链路通了——MySQL、Nacos 服务端、鉴权模块都正常工作。

集群节点状态:控制台集群管理页面三台节点都是 UP,节点元数据里版本一致。本机端口监听正常只说明进程起来了;节点之间端口互通、cluster.conf 一致、MySQL 连接正常,才算集群部署完成。

部署验证不是"控制台能打开就行"——控制台正常代表管理入口可用,业务侧还要后续验证配置发布、配置读取、服务注册和服务发现。