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 硬件要求
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 2 核 | 4 核及以上 |
| 内存 | 4 GB | 8 GB 及以上 |
| 硬盘 | 20 GB | 50 GB 及以上 |
| 网络 | 100 Mbps | 1 Gbps |
3.2 软件要求
| 软件 | 版本要求 | 说明 |
|---|---|---|
| 操作系统 | CentOS 7+ / Ubuntu 20.04+ | Linux 发行版 |
| JDK | 8+ | Java 运行环境 |
| MySQL | 5.7+ / 8.0+ | 数据库 |
| Maven | 3.6+ | 源码编译 |
4. 安装 Nacos
4.1 下载 Nacos
# 创建目录
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.34.2 单机模式安装
4.2.1 启动单机模式
cd /opt/nacos/nacos-2.2.3
# 启动单机模式
sh bin/startup.sh -m standalone4.2.2 访问 Nacos 控制台
打开浏览器访问:
http://your-server-ip:8848/nacos默认账号密码:
- 用户名:
nacos - 密码:
nacos
4.3 集群模式安装
4.3.1 配置数据库
创建数据库:
CREATE DATABASE nacos DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;导入 SQL 脚本:
mysql -u root -p nacos < /opt/nacos/nacos-2.2.3/conf/mysql-schema.sql4.3.2 配置 application.properties
编辑 /opt/nacos/nacos-2.2.3/conf/application.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=SecretKey012345678901234567890123456789012345678901234567894.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:88484.3.4 启动集群
在每个节点上执行:
cd /opt/nacos/nacos-2.2.3
sh bin/startup.sh4.4 Docker 安装 Nacos
4.4.1 单机模式
# 拉取镜像
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.34.4.2 集群模式
创建 docker-compose.yml:
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启动集群:
docker-compose up -d5. Nacos 配置管理
5.1 创建命名空间
- 登录 Nacos 控制台
- 进入"命名空间"
- 点击"新建命名空间"
- 填写命名空间信息:
- 命名空间 ID:
dev(开发环境) - 命名空间名称:
开发环境 - 描述:
开发环境配置
- 命名空间 ID:
- 点击"确定"
5.2 创建公共配置
- 进入"配置管理"
- 选择命名空间:
dev - 点击"+"创建配置
- 填写配置信息:
- Data ID:
common.yaml - Group:
DEFAULT_GROUP - 配置格式:
YAML - 配置内容:
yamlspring: 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 - Data ID:
- 点击"发布"
5.3 创建服务配置
5.3.1 Gateway 配置
创建 gateway-server.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-docs5.3.2 System 配置
创建 system-server.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: true5.3.3 Member 配置
创建 member-server.yaml:
server:
port: 48087
fanyi:
swagger:
title: 会员中心
description: 提供会员管理功能
version: 1.0.05.3.4 Trade 配置
创建 trade-server.yaml:
server:
port: 48090
fanyi:
swagger:
title: 交易中心
description: 提供交易管理功能
version: 1.0.06. 梵医云系统 Nacos 配置
6.1 主配置文件
编辑 application.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.06.2 Gateway 配置
编辑 fanyi-gateway/src/main/resources/application.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: 480806.3 System 配置
编辑 fanyi-module-system/fanyi-module-system-biz/src/main/resources/application.yaml:
spring:
application:
name: system-server
config:
import:
- optional:file://application.yaml
- optional:nacos:common.yaml
- optional:nacos:${spring.application.name}.yaml
server:
port: 480817. 服务注册和发现
7.1 服务注册
微服务启动后,会自动注册到 Nacos。可以通过以下方式查看:
- 登录 Nacos 控制台
- 进入"服务管理"
- 选择命名空间:
dev - 查看已注册的服务列表
7.2 服务发现
微服务之间通过服务名进行调用,Nacos 会自动进行服务发现和负载均衡。
示例:
@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 加载配置:
spring:
config:
import:
- optional:file://application.yaml
- optional:nacos:common.yaml
- optional:nacos:${spring.application.name}.yaml8.2 配置刷新
修改 Nacos 配置后,可以通过以下方式刷新配置:
8.2.1 手动刷新
在需要刷新的类上添加 @RefreshScope 注解:
@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 | 端口 |
|---|---|---|
| nacos1 | 192.168.1.10 | 8848 |
| nacos2 | 192.168.1.11 | 8848 |
| nacos3 | 192.168.1.12 | 8848 |
9.2 负载均衡配置
使用 Nginx 作为 Nacos 集群的负载均衡器:
编辑 /etc/nginx/conf.d/nacos.conf:
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 查看日志
# 查看 Nacos 日志
tail -f /opt/nacos/nacos-2.2.3/logs/nacos.log
# 查看 Nacos 启动日志
tail -f /opt/nacos/nacos-2.2.3/logs/start.out10.2 监控指标
Nacos 提供 Prometheus 监控指标,可以通过以下方式访问:
http://your-server-ip:8848/nacos/actuator/prometheus10.3 告警配置
配置 Nacos 告警,及时发现服务异常。
11. 常见问题
11.1 Nacos 启动失败
问题:Nacos 无法启动
解决方案:
- 检查 JDK 版本是否正确
- 检查端口是否被占用
- 检查数据库连接是否正常
- 查看启动日志
11.2 服务注册失败
问题:服务无法注册到 Nacos
解决方案:
- 检查 Nacos 地址是否正确
- 检查网络连接是否正常
- 检查 Nacos 用户名密码是否正确
- 检查命名空间是否正确
11.3 配置加载失败
问题:服务无法加载 Nacos 配置
解决方案:
- 检查配置 Data ID 是否正确
- 检查 Group 是否正确
- 检查命名空间是否正确
- 检查配置格式是否正确
11.4 集群节点无法通信
问题:Nacos 集群节点无法通信
解决方案:
- 检查集群配置是否正确
- 检查防火墙是否开放端口
- 检查网络连接是否正常
- 检查数据库连接是否正常
11.5 配置刷新不生效
问题:修改 Nacos 配置后,服务未生效
解决方案:
- 检查是否添加
@RefreshScope注解 - 检查配置刷新是否启用
- 重启服务
- 检查配置格式是否正确
12. 性能优化
12.1 JVM 参数优化
编辑 bin/startup.sh,修改 JVM 参数:
JAVA_OPT="${JAVA_OPT} -Xms2g -Xmx2g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"12.2 数据库优化
优化 MySQL 配置:
-- 增加 Nacos 数据库连接池大小
-- 修改配置文件中的 db.pool.config.connectionSize 参数12.3 网络优化
优化网络参数:
# 增加文件描述符限制
ulimit -n 65535
# 优化 TCP 参数
echo "net.core.somaxconn = 1024" >> /etc/sysctl.conf
echo "net.ipv4.tcp_max_syn_backlog = 1024" >> /etc/sysctl.conf
sysctl -p13. 安全配置
13.1 启用认证
编辑 application.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=SecretKey0123456789012345678901234567890123456789012345678913.2 配置防火墙
开放 Nacos 端口:
# 开放 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 --reload13.3 配置 HTTPS
使用 Nginx 配置 HTTPS 访问 Nacos。
14. 备份和恢复
14.1 备份配置
- 登录 Nacos 控制台
- 进入"配置管理"
- 选择要备份的配置
- 点击"导出配置"
- 保存导出的配置文件
14.2 恢复配置
- 登录 Nacos 控制台
- 进入"配置管理"
- 点击"导入配置"
- 选择配置文件
- 点击"导入"
14.3 数据库备份
# 备份 Nacos 数据库
mysqldump -u root -p nacos > nacos_backup_$(date +%Y%m%d).sql15. 注意事项
- 环境隔离:使用命名空间隔离不同环境的配置
- 配置版本:定期备份配置,便于回滚
- 监控告警:配置监控和告警,及时发现异常
- 集群部署:生产环境建议部署集群,保证高可用
- 安全配置:启用认证,配置防火墙
- 性能优化:根据实际情况优化 JVM 参数
- 日志管理:定期清理日志文件,避免磁盘空间不足
- 版本管理:记录 Nacos 版本,便于升级和回滚
