Skip to content

Nacos配置

1. 概述

Nacos(Dynamic Naming and Configuration Service)是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。在梵医云系统中,Nacos 作为服务注册中心和配置中心,负责微服务的注册、发现和配置管理。本文档介绍如何部署和配置 Nacos。

2. Nacos 基础知识

2.1 什么是 Nacos

Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它提供以下核心功能:

  • 服务发现和服务健康监测:支持基于 DNS 和基于 RPC 的服务发现
  • 动态配置服务:动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置
  • 动态 DNS 服务:动态 DNS 服务支持权重路由,更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单 DNS 解析服务
  • 服务及其元数据管理:支持从微服务平台建设的视角管理数据中心的所有服务及元数据

2.2 Nacos 架构

Nacos 采用三层架构:

  • 接入层:负责处理客户端请求,包括服务注册、配置获取等
  • 服务层:负责核心业务逻辑,包括服务注册、配置管理等
  • 存储层:负责数据持久化,支持 MySQL、Derby 等数据库

2.3 Nacos 核心概念

  • 命名空间(Namespace):用于进行租户粒度的配置隔离
  • 分组(Group):不同的组可以区分相同的配置
  • 配置集(Data ID):一个配置集的标识
  • 配置项:配置集中包含的具体配置内容

3. 环境要求

3.1 硬件要求

组件最低配置推荐配置
CPU2 核4 核及以上
内存4 GB8 GB 及以上
硬盘20 GB50 GB 及以上
网络100 Mbps1 Gbps

3.2 软件要求

软件版本要求说明
操作系统CentOS 7+ / Ubuntu 20.04+Linux 发行版
JDK8+Java 运行环境
MySQL5.7+ / 8.0+数据库
Maven3.6+源码编译

4. 安装 Nacos

4.1 下载 Nacos

bash
# 创建目录
cd /opt
mkdir nacos
cd nacos

# 下载 Nacos
wget https://github.com/alibaba/nacos/releases/download/2.2.3/nacos-server-2.2.3.tar.gz

# 解压
tar -zxvf nacos-server-2.2.3.tar.gz
mv nacos nacos-2.2.3

4.2 单机模式安装

4.2.1 启动单机模式

bash
cd /opt/nacos/nacos-2.2.3

# 启动单机模式
sh bin/startup.sh -m standalone

4.2.2 访问 Nacos 控制台

打开浏览器访问:

http://your-server-ip:8848/nacos

默认账号密码:

  • 用户名:nacos
  • 密码:nacos

4.3 集群模式安装

4.3.1 配置数据库

创建数据库:

sql
CREATE DATABASE nacos DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

导入 SQL 脚本:

bash
mysql -u root -p nacos < /opt/nacos/nacos-2.2.3/conf/mysql-schema.sql

4.3.2 配置 application.properties

编辑 /opt/nacos/nacos-2.2.3/conf/application.properties

properties
# 数据库配置
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&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=your_password

### 认证配置
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey01234567890123456789012345678901234567890123456789

4.3.3 配置集群

编辑 /opt/nacos/nacos-2.2.3/conf/cluster.conf

192.168.1.10:8848
192.168.1.11:8848
192.168.1.12:8848

4.3.4 启动集群

在每个节点上执行:

bash
cd /opt/nacos/nacos-2.2.3
sh bin/startup.sh

4.4 Docker 安装 Nacos

4.4.1 单机模式

bash
# 拉取镜像
docker pull nacos/nacos-server:v2.2.3

# 运行容器
docker run -d \
  --name nacos \
  -e MODE=standalone \
  -p 8848:8848 \
  -p 9848:9848 \
  -p 9849:9849 \
  --restart=always \
  nacos/nacos-server:v2.2.3

4.4.2 集群模式

创建 docker-compose.yml

yaml
version: '3.6'

services:
  nacos1:
    image: nacos/nacos-server:v2.2.3
    container_name: nacos1
    environment:
      - MODE=cluster
      - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=your_password
      - NACOS_AUTH_ENABLE=true
      - NACOS_AUTH_TOKEN_SECRET_KEY=SecretKey01234567890123456789012345678901234567890123456789
      - NACOS_AUTH_IDENTITY_KEY=serverIdentity
      - NACOS_AUTH_IDENTITY_VALUE=security
    ports:
      - "8848:8848"
      - "9848:9848"
      - "9849:9849"
    depends_on:
      - mysql
    restart: always

  nacos2:
    image: nacos/nacos-server:v2.2.3
    container_name: nacos2
    environment:
      - MODE=cluster
      - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=your_password
      - NACOS_AUTH_ENABLE=true
      - NACOS_AUTH_TOKEN_SECRET_KEY=SecretKey01234567890123456789012345678901234567890123456789
      - NACOS_AUTH_IDENTITY_KEY=serverIdentity
      - NACOS_AUTH_IDENTITY_VALUE=security
    ports:
      - "8849:8848"
      - "9849:9848"
      - "9850:9849"
    depends_on:
      - mysql
    restart: always

  nacos3:
    image: nacos/nacos-server:v2.2.3
    container_name: nacos3
    environment:
      - MODE=cluster
      - NACOS_SERVERS=nacos1:8848 nacos2:8848 nacos3:8848
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_DB_NAME=nacos
      - MYSQL_SERVICE_USER=root
      - MYSQL_SERVICE_PASSWORD=your_password
      - NACOS_AUTH_ENABLE=true
      - NACOS_AUTH_TOKEN_SECRET_KEY=SecretKey01234567890123456789012345678901234567890123456789
      - NACOS_AUTH_IDENTITY_KEY=serverIdentity
      - NACOS_AUTH_IDENTITY_VALUE=security
    ports:
      - "8850:8848"
      - "9850:9848"
      - "9851:9849"
    depends_on:
      - mysql
    restart: always

  mysql:
    image: mysql:8.0
    container_name: nacos-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=your_password
      - MYSQL_DATABASE=nacos
    volumes:
      - ./mysql-data:/var/lib/mysql
      - ./nacos-mysql.sql:/docker-entrypoint-initdb.d/nacos-mysql.sql
    ports:
      - "3306:3306"
    restart: always

networks:
  default:
    name: nacos_default

启动集群:

bash
docker-compose up -d

5. Nacos 配置管理

5.1 创建命名空间

  1. 登录 Nacos 控制台
  2. 进入"命名空间"
  3. 点击"新建命名空间"
  4. 填写命名空间信息:
    • 命名空间 ID:dev(开发环境)
    • 命名空间名称:开发环境
    • 描述:开发环境配置
  5. 点击"确定"

5.2 创建公共配置

  1. 进入"配置管理"
  2. 选择命名空间:dev
  3. 点击"+"创建配置
  4. 填写配置信息:
    • Data ID:common.yaml
    • Group:DEFAULT_GROUP
    • 配置格式:YAML
    • 配置内容:
    yaml
    spring:
      datasource:
        dynamic:
          primary: master
          datasource:
            master:
              url: jdbc:mysql://localhost:3306/db-fanyi-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
              driver-class-name: com.mysql.cj.jdbc.Driver
              username: root
              password: your_password
    
      data:
        redis:
          host: 127.0.0.1
          port: 6379
          database: 0
          password: 
          timeout: 10s
          lettuce:
            pool:
              min-idle: 0
              max-idle: 8
              max-active: 8
              max-wait: -1ms
  5. 点击"发布"

5.3 创建服务配置

5.3.1 Gateway 配置

创建 gateway-server.yaml

yaml
server:
  port: 48080

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
          lower-case-service-id: true

knife4j:
  gateway:
    enabled: true
    routes:
      - name: system-server
        service-name: system-server
        url: /admin-api/system/v3/api-docs
      - name: infra-server
        service-name: infra-server
        url: /admin-api/infra/v3/api-docs
      - name: member-server
        service-name: member-server
        url: /admin-api/member/v3/api-docs
      - name: pay-server
        service-name: pay-server
        url: /admin-api/pay/v3/api-docs
      - name: trade-server
        service-name: trade-server
        url: /admin-api/trade/v3/api-docs

5.3.2 System 配置

创建 system-server.yaml

yaml
server:
  port: 48081

spring:
  servlet:
    multipart:
      max-file-size: 16MB
      max-request-size: 32MB

fanyi:
  web:
    admin-ui:
      url: http://dashboard.fanyi.iocoder.cn
  swagger:
    title: 管理后台
    description: 提供管理员管理的所有功能
    version: 1.0.0
  tenant:
    enable: true

5.3.3 Member 配置

创建 member-server.yaml

yaml
server:
  port: 48087

fanyi:
  swagger:
    title: 会员中心
    description: 提供会员管理功能
    version: 1.0.0

5.3.4 Trade 配置

创建 trade-server.yaml

yaml
server:
  port: 48090

fanyi:
  swagger:
    title: 交易中心
    description: 提供交易管理功能
    version: 1.0.0

6. 梵医云系统 Nacos 配置

6.1 主配置文件

编辑 application.yaml

yaml
--- #################### 注册中心 + 配置中心相关配置 ####################

spring:
  profiles:
    active: dev
  cloud:
    nacos:
      server-addr: 192.168.31.10:8848
      username: nacos
      password: dWTenQzIEcMWDCzOwaRQNUVRXCqJl3f5
      config:
        namespace: dev
        group: DEFAULT_GROUP
        refresh:
          enabled: false
      discovery:
        group: DEFAULT_GROUP
        metadata:
          version: 1.0.0

6.2 Gateway 配置

编辑 fanyi-gateway/src/main/resources/application.yaml

yaml
spring:
  application:
    name: gateway-server

  config:
    import:
    - optional:file://application.yaml
    - optional:nacos:common.yaml
    - optional:nacos:${spring.application.name}.yaml

  cloud:
    gateway:
      routes:
        - id: system-admin-api
          uri: grayLb://system-server
          predicates:
            - Path=/admin-api/system/**
          filters:
              - RewritePath=/admin-api/system/v3/api-docs, /v3/api-docs
        - id: member-admin-api
          uri: grayLb://member-server
          predicates:
            - Path=/admin-api/member/**
          filters:
            - RewritePath=/admin-api/member/v3/api-docs, /v3/api-docs
        - id: trade-admin-api
          uri: grayLb://trade-server
          predicates:
            - Path=/admin-api/trade/**
          filters:
            - RewritePath=/admin-api/trade/v3/api-docs, /v3/api-docs
        # ... 其他路由配置

server:
  port: 48080

6.3 System 配置

编辑 fanyi-module-system/fanyi-module-system-biz/src/main/resources/application.yaml

yaml
spring:
  application:
    name: system-server

  config:
    import:
    - optional:file://application.yaml
    - optional:nacos:common.yaml
    - optional:nacos:${spring.application.name}.yaml

server:
  port: 48081

7. 服务注册和发现

7.1 服务注册

微服务启动后,会自动注册到 Nacos。可以通过以下方式查看:

  1. 登录 Nacos 控制台
  2. 进入"服务管理"
  3. 选择命名空间:dev
  4. 查看已注册的服务列表

7.2 服务发现

微服务之间通过服务名进行调用,Nacos 会自动进行服务发现和负载均衡。

示例:

java
@FeignClient(name = "system-server")
public interface SystemUserApi {
    @GetMapping("/admin-api/system/user/get")
    UserDO getUser(@RequestParam("id") Long id);
}

7.3 健康检查

Nacos 会定期检查服务的健康状态,如果服务不可用,会自动从服务列表中移除。

8. 配置管理

8.1 配置导入

微服务启动时,会从 Nacos 加载配置:

yaml
spring:
  config:
    import:
    - optional:file://application.yaml
    - optional:nacos:common.yaml
    - optional:nacos:${spring.application.name}.yaml

8.2 配置刷新

修改 Nacos 配置后,可以通过以下方式刷新配置:

8.2.1 手动刷新

在需要刷新的类上添加 @RefreshScope 注解:

java
@RefreshScope
@RestController
public class TestController {
    @Value("${test.value}")
    private String value;
    
    @GetMapping("/test")
    public String test() {
        return value;
    }
}

8.2.2 自动刷新

配置 spring.cloud.nacos.config.refresh.enabled=true 可以实现配置自动刷新。

8.3 配置版本管理

Nacos 支持配置版本管理,可以查看历史配置和回滚。

9. Nacos 集群配置

9.1 集群规划

建议至少部署 3 个 Nacos 节点,形成高可用集群。

节点IP端口
nacos1192.168.1.108848
nacos2192.168.1.118848
nacos3192.168.1.128848

9.2 负载均衡配置

使用 Nginx 作为 Nacos 集群的负载均衡器:

编辑 /etc/nginx/conf.d/nacos.conf

nginx
upstream nacos_cluster {
    server 192.168.1.10:8848;
    server 192.168.1.11:8848;
    server 192.168.1.12:8848;
}

server {
    listen 80;
    server_name nacos.fanyi.example.com;

    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;
    }
}

10. 监控和日志

10.1 查看日志

bash
# 查看 Nacos 日志
tail -f /opt/nacos/nacos-2.2.3/logs/nacos.log

# 查看 Nacos 启动日志
tail -f /opt/nacos/nacos-2.2.3/logs/start.out

10.2 监控指标

Nacos 提供 Prometheus 监控指标,可以通过以下方式访问:

http://your-server-ip:8848/nacos/actuator/prometheus

10.3 告警配置

配置 Nacos 告警,及时发现服务异常。

11. 常见问题

11.1 Nacos 启动失败

问题:Nacos 无法启动

解决方案

  1. 检查 JDK 版本是否正确
  2. 检查端口是否被占用
  3. 检查数据库连接是否正常
  4. 查看启动日志

11.2 服务注册失败

问题:服务无法注册到 Nacos

解决方案

  1. 检查 Nacos 地址是否正确
  2. 检查网络连接是否正常
  3. 检查 Nacos 用户名密码是否正确
  4. 检查命名空间是否正确

11.3 配置加载失败

问题:服务无法加载 Nacos 配置

解决方案

  1. 检查配置 Data ID 是否正确
  2. 检查 Group 是否正确
  3. 检查命名空间是否正确
  4. 检查配置格式是否正确

11.4 集群节点无法通信

问题:Nacos 集群节点无法通信

解决方案

  1. 检查集群配置是否正确
  2. 检查防火墙是否开放端口
  3. 检查网络连接是否正常
  4. 检查数据库连接是否正常

11.5 配置刷新不生效

问题:修改 Nacos 配置后,服务未生效

解决方案

  1. 检查是否添加 @RefreshScope 注解
  2. 检查配置刷新是否启用
  3. 重启服务
  4. 检查配置格式是否正确

12. 性能优化

12.1 JVM 参数优化

编辑 bin/startup.sh,修改 JVM 参数:

bash
JAVA_OPT="${JAVA_OPT} -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

12.2 数据库优化

优化 MySQL 配置:

sql
-- 增加 Nacos 数据库连接池大小
-- 修改配置文件中的 db.pool.config.connectionSize 参数

12.3 网络优化

优化网络参数:

bash
# 增加文件描述符限制
ulimit -n 65535

# 优化 TCP 参数
echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 1024" >> /etc/sysctl.conf
sysctl -p

13. 安全配置

13.1 启用认证

编辑 application.properties

properties
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=serverIdentity
nacos.core.auth.server.identity.value=security
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey01234567890123456789012345678901234567890123456789

13.2 配置防火墙

开放 Nacos 端口:

bash
# 开放 8848 端口
firewall-cmd --zone=public --add-port=8848/tcp --permanent
firewall-cmd --reload

# 开放 9848 端口(gRPC)
firewall-cmd --zone=public --add-port=9848/tcp --permanent
firewall-cmd --reload

13.3 配置 HTTPS

使用 Nginx 配置 HTTPS 访问 Nacos。

14. 备份和恢复

14.1 备份配置

  1. 登录 Nacos 控制台
  2. 进入"配置管理"
  3. 选择要备份的配置
  4. 点击"导出配置"
  5. 保存导出的配置文件

14.2 恢复配置

  1. 登录 Nacos 控制台
  2. 进入"配置管理"
  3. 点击"导入配置"
  4. 选择配置文件
  5. 点击"导入"

14.3 数据库备份

bash
# 备份 Nacos 数据库
mysqldump -u root -p nacos > nacos_backup_$(date +%Y%m%d).sql

15. 注意事项

  1. 环境隔离:使用命名空间隔离不同环境的配置
  2. 配置版本:定期备份配置,便于回滚
  3. 监控告警:配置监控和告警,及时发现异常
  4. 集群部署:生产环境建议部署集群,保证高可用
  5. 安全配置:启用认证,配置防火墙
  6. 性能优化:根据实际情况优化 JVM 参数
  7. 日志管理:定期清理日志文件,避免磁盘空间不足
  8. 版本管理:记录 Nacos 版本,便于升级和回滚

16. 相关文档