Spring Cloud Alibaba Nacos 进阶:配置隔离、集群、持久化与开机自启

一、Nacos 配置管理模型与隔离

1.1 Nacos 三层配置隔离模型

Nacos 使用 Namespace + Group + Data ID 定位唯一配置集,实现多环境、多项目、多服务隔离:

  • Namespace:环境隔离(开发、测试、生产)
  • Group:项目 / 业务组隔离(电商项目、支付项目)
  • Data ID:具体服务配置文件名

1.2 Namespace 环境隔离

1.2.1 创建 Namespace
  1. 打开 Nacos 控制台 → 命名空间 → 新建命名空间
  2. 填写名称(dev/test/prod)与描述,自动生成命名空间 ID
1.2.2 配置克隆(跨环境迁移)

配置列表 → 选中配置 → 克隆 → 选择目标 Namespace,快速复制配置。

1.2.3 微服务指定 Namespace 读取配置

bootstrap.yml 中配置:

复制代码
spring:
  cloud:
    nacos:
      config:
        server-addr: 192.168.209.129:8848
        file-extension: yaml
        prefix: nacos-config
        namespace: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  # 命名空间ID

1.3 Group 项目隔离

1.3.1 创建配置并指定 Group

新建配置时自定义 Group 名称,例如:ORDER_GROUP、PAY_GROUP。不同 Group 下可存在相同 Data ID,互不干扰。

1.3.2 微服务指定 Group 读取配置

复制代码
spring:
  cloud:
    nacos:
      config:
        server-addr: 192.168.209.129:8848
        file-extension: yaml
        prefix: nacos-config
        group: ORDER_GROUP  # 自定义分组

二、Nacos 服务隔离

服务隔离基于 Namespace 实现,不同 Namespace 下的服务互相不可见,避免环境互相污染。

2.1 服务指定 Namespace 注册

复制代码
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.209.129:8848
        namespace: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  # 命名空间ID
  application:
    name: nacos-provider

2.2 服务隔离测试

启动服务后,在 Nacos 控制台切换 Namespace,仅当前空间服务可见。

三、Nacos MySQL 持久化

Nacos 默认使用嵌入式 Derby 数据库,集群必须改用 MySQL 统一存储

3.1 环境要求

  • MySQL 5.6.5+
  • Nacos 1.4.x 稳定版

3.2 修改 application.properties

复制代码
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.31.19:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=123456

3.3 初始化数据库

  1. 创建数据库:nacos
  2. 执行 SQL:conf/nacos-mysql.sql

3.4 验证持久化

重启 Nacos,服务注册信息、配置信息均写入 MySQL,重启不丢失。

四、Nacos 高可用集群搭建

4.1 集群架构

  • 3 个 Nacos 节点
  • 共享同一 MySQL
  • Nginx 负载均衡

4.2 节点规划

IP 端口
192.168.209.129 8850
192.168.209.129 8851
192.168.209.129 8852

4.3 配置集群节点

  1. 复制 conf/cluster.conf.examplecluster.conf

  2. 添加节点信息:

    192.168.209.129:8850
    192.168.209.129:8851
    192.168.209.129:8852

4.4 修改端口

分别修改 3 个实例的 application.properties 端口:

复制代码
server.port=8850
server.port=8851
server.port=8852

4.5 启动集群

复制代码
./startup.sh  # 集群模式不加 -m standalone

五、Nginx 代理 Nacos 集群

5.1 安装 Nginx

复制代码
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0
./configure --prefix=/usr/local/nginx
make && make install

5.2 Nginx 配置

复制代码
upstream nacos {
  server 192.168.209.129:8850;
  server 192.168.209.129:8851;
  server 192.168.209.129:8852;
}

server {
  listen 80;
  server_name localhost;
  location / {
    proxy_pass http://nacos;
  }
}

5.3 启动 Nginx

复制代码
cd /usr/local/nginx/sbin
./nginx

5.4 微服务连接集群

复制代码
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.209.129:80

六、Nacos Linux 开机自启

6.1 创建 systemd 服务文件

复制代码
vim /lib/systemd/system/nacos.service

内容:

复制代码
[Unit]
Description=nacos
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/nacos/bin/startup.sh -m standalone
ExecReload=/usr/local/nacos/bin/shutdown.sh
ExecStop=/usr/local/nacos/bin/shutdown.sh
PrivateTmp=true

[Install]
WantedBy=multi-user.target

6.2 修改 startup.sh 指定 JDK

复制代码
[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/local/jdk1.8.0_191
# 注释以下三行
# [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java
# [ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java
# [ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME

6.3 设置开机自启

复制代码
systemctl daemon-reload
systemctl enable nacos.service
systemctl start nacos.service
systemctl status nacos.service

七、全文总结

  1. 配置隔离:Namespace(环境)+ Group(项目)+ Data ID(服务)
  2. 服务隔离:Namespace 实现环境隔离,安全可靠
  3. 持久化:Derby 切换 MySQL,集群数据统一
  4. 高可用:3 节点集群 + Nginx 负载均衡,生产标准方案
  5. 运维优化:systemd 托管开机自启,稳定省心
相关推荐
Venhoul2 小时前
@Scheduled(cron = “1 0 0 * * ?“用法介绍
java
Rabitebla2 小时前
C++类和对象(中):默认函数 + 运算符重载 + 日期类实现完整笔记
java·开发语言·javascript
Bat U2 小时前
JavaEE|多线程(一)
java·服务器·开发语言
逻辑驱动的ken2 小时前
Java高频面试考点场景题05
java·开发语言·深度学习·求职招聘·春招
SamDeepThinking2 小时前
秒杀系统需求PRD
java·后端·架构
一 乐2 小时前
咖啡商城|基于springboot + vue咖啡商城系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·咖啡商城系统
Royzst2 小时前
String方法
java·开发语言
学习使我健康2 小时前
Android 事件分发机制
android·java·前端
代码羊羊2 小时前
Rust基础类型与变量全解析
开发语言·后端·rust