# 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集群状态,确保至少两个实际节点正常运行