Nacos

概述

Nacos(Naming and Configuration Service)是一个开源的动态服务发现、配置管理和服务管理平台,由阿里巴巴开发并开源,广泛应用于云原生应用和微服务环境中。

核心功能

  • 服务发现与健康检查:支持 DNS 和 RPC 方式的服务注册与发现,提供心跳检测和健康检查机制
  • 动态配置管理:支持配置的版本管理、回滚、灰度发布和热更新
  • 动态 DNS 服务:支持权重路由、流量管理和负载均衡策略
  • 服务元数据管理:支持服务的细粒度管理和路由策略配置

典型应用场景

  • Spring Cloud / Dubbo 微服务架构的服务注册中心
  • 分布式系统的配置中心
  • Kubernetes 环境中服务的接入与管理

部署准备

1. 系统要求

项目 最低配置 推荐配置
CPU 1 核 2 核+
内存 1 GB 2 GB+
硬盘 5 GB 20 GB+
Docker 18.06+ 最新版

2. 创建 Docker Compose 编排文件

docker-compose.yaml

services:
  nacos:
    image: nacos/nacos-server:2.0.0
    container_name: nacos
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - MODE=standalone
      - JVM_XMX=1g
      - JVM_XMS=1g
      - JVM_XMN=512m
      - JVM_MS=256m
    ports:
      - "8848:8848"
      - "9848:9848"
    volumes:
      - nacos_data:/home/nacos
    deploy:
      resources:
        limits:
          cpus: "1"
          memory: "2G"
volumes:
  nacos_data:

3. 环境变量说明

变量 说明
MODE=standalone 单机模式运行
JVM_XMX=1g 最大堆内存
JVM_XMS=1g 初始堆内存
JVM_XMN=512m 新生代堆内存
JVM_MS=256m 元空间初始内存

说明:Nacos 2.0 版本新增 9848 端口用于 gRPC 通信,用于服务间同步和集群通信,部署时需确认防火墙已放行。


启动服务

docker compose up -d

查看启动日志:

docker logs nacos -f --tail=50

验证访问

curl http://127.0.0.1:8848/nacos

在浏览器中打开 http://<服务器IP>:8848/nacos 即可访问 Nacos。

默认登录信息

  • 用户名:nacos
  • 密码:nacos

重要:首次登录后请立即修改默认密码。


常用管理命令

操作 命令
启动 Nacos docker compose up -d
停止 Nacos docker compose stop
重启 Nacos docker compose restart
查看状态 docker compose ps
查看日志 docker logs nacos -f --tail=100
进入容器 docker exec -it nacos /bin/bash

配置 MySQL 数据库存储

默认使用内置 Derby 数据库(仅适合单机测试),生产环境建议使用 MySQL:

1. 创建数据库

CREATE DATABASE nacos_config CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

2. 初始化表结构

执行 Nacos 提供的 nacos-mysql.sql 脚本(可从 GitHub 或安装包中获取)。

3. 修改环境变量

services:
  nacos:
    image: nacos/nacos-server:2.0.0
    container_name: nacos
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - MODE=standalone
      - SPRING_DATASOURCE_PLATFORM=mysql
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_DB_NAME=nacos_config
      - MYSQL_SERVICE_PORT=3306
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=nacos
      - JVM_XMX=1g
      - JVM_XMS=1g
    ports:
      - "8848:8848"
      - "9848:9848"
    volumes:
      - nacos_data:/home/nacos
    depends_on:
      - mysql

  mysql:
    image: mysql:8.0
    container_name: nacos-mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root123
      - MYSQL_DATABASE=nacos_config
      - MYSQL_USER=nacos
      - MYSQL_PASSWORD=nacos
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - 3306:3306

volumes:
  nacos_data:
  mysql_data:

集群模式部署

生产环境推荐使用集群模式,需修改 docker-compose.yaml

services:
  nacos1:
    image: nacos/nacos-server:2.0.0
    container_name: nacos1
    restart: always
    environment:
      - MODE=cluster
      - NACOS_SERVERS=nacos1:8848,nacos2:8848,nacos3:8848
      - MYSQL_SERVICE_HOST=mysql
      - MYSQL_SERVICE_DB_NAME=nacos_config
      - MYSQL_SERVICE_USER=nacos
      - MYSQL_SERVICE_PASSWORD=nacos
    ports:
      - "8848:8848"
    volumes:
      - nacos1_data:/home/nacos

  nacos2:
    # 类似配置,端口映射改为 8849:8848
    # ...

  nacos3:
    # 类似配置,端口映射改为 8850:8848
    # ...

常见问题

Q:访问 Nacos 报 403 或无法登录?

  1. 确认用户名密码是否正确(默认 nacos/nacos)
  2. 检查防火墙是否放行 8848 端口
  3. 如使用 MySQL,确认数据库表已正确初始化

Q:服务注册失败或无法发现?

  1. 确认 9848 端口(gRPC)是否开放
  2. 检查服务端和客户端的 Nacos 版本是否兼容
  3. 查看日志排查具体错误:
docker logs nacos --tail=100 | grep ERROR

Q:Nacos 内存不足导致 OOM?

根据实际内存调整 JVM 参数:

environment:
  - JVM_XMX=512m
  - JVM_XMS=512m
  - JVM_XMN=256m
  - JVM_MS=128m

Q:如何备份 Nacos 配置?

# 通过 API 导出配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=example&group=DEFAULT_GROUP" > config_backup.yml

# 或备份 MySQL 数据库
mysqldump -u nacos -p nacos_config > nacos_config_backup.sql

Q:如何重置 Nacos 密码?

进入容器执行:

docker exec -it nacos /bin/bash
# 修改 MySQL 中的用户密码
mysql -h mysql -u root -p
USE nacos_config;
UPDATE users SET password='$2a$10$your_hashed_password' WHERE username='nacos';

注意:密码需使用 BCrypt 加密。


参考链接