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. 相关文档 ​