201 lines
7.1 KiB
Markdown
201 lines
7.1 KiB
Markdown
# Nacos 部署配置
|
||||
|
|
|
|||
|
|
## Nacos 用途说明
|
|||
|
|
|
|||
|
|
Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。在项目中,Nacos 主要用于以下场景:
|
|||
|
|
|
|||
|
|
### 1. 注册中心
|
|||
|
|
|
|||
|
|
- **服务注册**:所有微服务实例启动时会自动向 Nacos 注册自己的信息,包括服务名称、IP 地址、端口号等
|
|||
|
|
- **服务健康检查**:Nacos 会定期检查注册的服务实例是否健康,自动剔除不健康的实例
|
|||
|
|
- **高可用设计**:通过集群部署确保注册中心的可用性,避免单点故障
|
|||
|
|
|
|||
|
|
### 2. 服务发现
|
|||
|
|
|
|||
|
|
- **服务消费者查找服务**:服务消费者通过 Nacos 获取所需服务的可用实例列表
|
|||
|
|
- **负载均衡**:提供服务实例的负载均衡策略,支持权重配置
|
|||
|
|
- **实时更新**:服务实例变化时,Nacos 会实时通知消费者,确保服务列表的准确性
|
|||
|
|
|
|||
|
|
### 3. Dubbo 注册中心
|
|||
|
|
|
|||
|
|
- **Dubbo 服务注册**:Dubbo 服务提供者将服务注册到 Nacos
|
|||
|
|
- **Dubbo 服务发现**:Dubbo 服务消费者从 Nacos 获取服务列表
|
|||
|
|
- **元数据管理**:Dubbo 服务的元数据信息(如接口定义、方法签名等)存储在 Nacos 中
|
|||
|
|
|
|||
|
|
### 4. 配置中心
|
|||
|
|
|
|||
|
|
- **集中式配置管理**:所有服务的配置集中存储在 Nacos 中,避免配置分散在各个服务中
|
|||
|
|
- **动态配置更新**:支持配置的动态修改,无需重启服务即可生效
|
|||
|
|
- **配置版本管理**:记录配置的历史版本,支持回滚操作
|
|||
|
|
- **配置分组与命名空间**:支持按环境、应用等维度管理配置
|
|||
|
|
|
|||
|
|
## Docker Compose 配置
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
nacos:
|
|||
|
|
image: nacos-registry.cn-hangzhou.cr.aliyuncs.com/nacos/nacos-server:v3.1.1
|
|||
|
|
container_name: nacos
|
|||
|
|
restart: always
|
|||
|
|
depends_on:
|
|||
|
|
- mysql
|
|||
|
|
deploy:
|
|||
|
|
resources:
|
|||
|
|
limits:
|
|||
|
|
memory: 2G
|
|||
|
|
replicas: 1
|
|||
|
|
placement:
|
|||
|
|
constraints:
|
|||
|
|
- node.role == manager
|
|||
|
|
ports:
|
|||
|
|
- 8848:8848
|
|||
|
|
- 8849:8080
|
|||
|
|
- 9848:9848
|
|||
|
|
- 9849:9849
|
|||
|
|
- 7848:7848
|
|||
|
|
- 6848:9080
|
|||
|
|
volumes:
|
|||
|
|
- /etc/localtime:/etc/localtime
|
|||
|
|
- /etc/timezone:/etc/timezone
|
|||
|
|
- /data/nacos/conf/application.properties:/home/nacos/conf/application.properties
|
|||
|
|
- /data/nacos/conf/cluster.conf:/home/nacos/conf/cluster.conf
|
|||
|
|
- /data/nacos/data:/home/nacos/data
|
|||
|
|
- /data/nacos/logs:/home/nacos/logs
|
|||
|
|
- /data/nacos/lib:/home/nacos/lib
|
|||
|
|
environment:
|
|||
|
|
- JAVA_OPT=-javaagent:/home/nacos/lib/jasypt-agent.jar
|
|||
|
|
- TZ=Asia/Hong_Kong
|
|||
|
|
- SPRING_DATASOURCE_PLATFORM=mysql
|
|||
|
|
- MODE=cluster
|
|||
|
|
- NACOS_AUTH_TOKEN=LldB9CGYrmmbhIQOIFlg3L3avFB1wbUw8s1E0lL6WZc=
|
|||
|
|
- NACOS_AUTH_IDENTITY_KEY=G3SF
|
|||
|
|
- NACOS_AUTH_IDENTITY_VALUE=afe123456
|
|||
|
|
- NACOS_SERVERS=192.168.3.230:8848 192.168.3.200:8848 192.168.4.250:8848
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 集群配置文件 (`/data/nacos/conf/cluster.conf`)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
#2025-12-29T09:21:31.265596226
|
|||
|
|
192.168.3.200:8848
|
|||
|
|
192.168.3.230:8848
|
|||
|
|
192.168.4.250:8848
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 应用配置文件 (`/data/nacos/conf/application.properties`)
|
|||
|
|
|
|||
|
|
```properties
|
|||
|
|
nacos.server.main.port=8848
|
|||
|
|
nacos.inetutils.prefer-hostname-over-ip=false
|
|||
|
|
### Specify local server's IP:
|
|||
|
|
nacos.inetutils.ip-address=192.168.3.230
|
|||
|
|
spring.sql.init.platform=mysql
|
|||
|
|
### Count of DB:
|
|||
|
|
db.num=1
|
|||
|
|
db.url.0=jdbc:mysql://192.168.3.233:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
|
|||
|
|
db.user=root
|
|||
|
|
db.password=afe123456
|
|||
|
|
management.metrics.export.elastic.enabled=false
|
|||
|
|
management.metrics.export.influx.enabled=false
|
|||
|
|
nacos.config.push.maxRetryTime=50
|
|||
|
|
nacos.naming.empty-service.auto-clean=true
|
|||
|
|
nacos.naming.empty-service.clean.initial-delay-ms=50000
|
|||
|
|
nacos.naming.empty-service.clean.period-time-ms=30000
|
|||
|
|
nacos.ai.mcp.registry.port=9080
|
|||
|
|
nacos.server.contextPath=/nacos
|
|||
|
|
server.tomcat.accesslog.enabled=true
|
|||
|
|
### accesslog automatic cleaning time
|
|||
|
|
server.tomcat.accesslog.max-days=30
|
|||
|
|
|
|||
|
|
### The access log pattern:
|
|||
|
|
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i
|
|||
|
|
|
|||
|
|
server.tomcat.basedir=file:.
|
|||
|
|
|
|||
|
|
#*************** API Related Configurations ***************#
|
|||
|
|
### Include message field
|
|||
|
|
server.error.include-message=ALWAYS
|
|||
|
|
#*************** Nacos Console Related Configurations ***************#
|
|||
|
|
### Nacos Console Main port
|
|||
|
|
nacos.console.port=8080
|
|||
|
|
### Nacos Server Web context path:
|
|||
|
|
nacos.console.contextPath=
|
|||
|
|
|
|||
|
|
### Nacos Server context path, which link to nacos server `nacos.server.contextPath`, works when deployment type is `console`
|
|||
|
|
nacos.console.remote.server.context-path=/nacos
|
|||
|
|
|
|||
|
|
nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/**
|
|||
|
|
|
|||
|
|
### The auth system to use, default 'nacos' and 'ldap' is supported, other type should be implemented by yourself:
|
|||
|
|
nacos.core.auth.system.type=nacos
|
|||
|
|
|
|||
|
|
### If turn on auth system:
|
|||
|
|
# Whether open nacos server API auth system
|
|||
|
|
nacos.core.auth.enabled=false
|
|||
|
|
# Whether open nacos admin API auth system
|
|||
|
|
nacos.core.auth.admin.enabled=false
|
|||
|
|
# Whether open nacos console API auth system
|
|||
|
|
nacos.core.auth.console.enabled=false
|
|||
|
|
|
|||
|
|
### Turn on/off caching of auth information. By turning on this switch, the update of auth information would have a 15 seconds delay.
|
|||
|
|
nacos.core.auth.caching.enabled=true
|
|||
|
|
nacos.core.auth.server.identity.key=
|
|||
|
|
nacos.core.auth.server.identity.value=
|
|||
|
|
|
|||
|
|
nacos.core.auth.plugin.nacos.token.cache.enable=false
|
|||
|
|
nacos.core.auth.plugin.nacos.token.expire.seconds=18000
|
|||
|
|
### The default token (Base64 string):
|
|||
|
|
#nacos.core.auth.plugin.nacos.token.secret.key=VGhpc0lzTXlDdXN0b21TZWNyZXRLZXkwMTIzNDU2Nzg=
|
|||
|
|
nacos.core.auth.plugin.nacos.token.secret.key=
|
|||
|
|
nacos.istio.mcp.server.enabled=false
|
|||
|
|
nacos.k8s.sync.enabled=false
|
|||
|
|
nacos.deployment.type=merged
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## Spring Boot 配置连接集群
|
|||
|
|
|
|||
|
|
### Spring Cloud 配置
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
spring:
|
|||
|
|
cloud:
|
|||
|
|
nacos:
|
|||
|
|
# 注册中心
|
|||
|
|
discovery:
|
|||
|
|
enabled: true
|
|||
|
|
server-addr: 192.168.3.200:8848,192.168.3.230:8848
|
|||
|
|
service: ${app.service-name}-app
|
|||
|
|
namespace: dev
|
|||
|
|
group: app-server
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Dubbo 配置
|
|||
|
|
|
|||
|
|
```yaml
|
|||
|
|
# Dubbo配置
|
|||
|
|
dubbo:
|
|||
|
|
registry:
|
|||
|
|
address: nacos://192.168.3.230:8848,192.168.3.200:8848
|
|||
|
|
metadata-report:
|
|||
|
|
address: nacos://192.168.3.230:8848,192.168.3.200:8848
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 部署说明
|
|||
|
|
|
|||
|
|
1. **当前部署情况**:
|
|||
|
|
- 实际部署了两台主机:`192.168.3.200` 和 `192.168.3.230`
|
|||
|
|
- `192.168.4.250` 是虚拟节点,用于解决集群节点显示问题
|
|||
|
|
|
|||
|
|
2. **集群显示问题**:
|
|||
|
|
- 配置3个节点(实际2个+1个虚拟)可以解决节点状态显示异常问题
|
|||
|
|
- 当只配置2个实际节点时,会出现节点互相看不到的情况
|
|||
|
|
- 添加虚拟节点后,实际节点可以正常显示在线状态
|
|||
|
|
|
|||
|
|
3. **数据同步**:
|
|||
|
|
- 配置3个节点后,数据可以在实际节点间正常同步
|
|||
|
|
- 在任一实际节点修改配置,其他实际节点可以获取到最新数据
|
|||
|
|
|
|||
|
|
4. **注意事项**:
|
|||
|
|
- 确保MySQL数据库已正确配置并可访问
|
|||
|
|
- 调整 `nacos.inetutils.ip-address` 为当前服务器的实际IP
|
|||
|
|
- 根据实际部署环境调整 volumes 映射路径
|
|||
|
|
- 监控Nacos集群状态,确保至少两个实际节点正常运行
|