Nacos简单实用集群创建

Nacos简单实用集群创建

  • [一、服务注册:Eureka 平滑迁移 Nacos](#一、服务注册:Eureka 平滑迁移 Nacos)
    • [1. 核心依赖引入](#1. 核心依赖引入)
    • [2. 基础配置](#2. 基础配置)
  • 二、服务分级存储模型
  • [三、负载均衡:NacosRule 同集群优先](#三、负载均衡:NacosRule 同集群优先)
  • 四、权重配置:精细化流量管控
  • [五、环境隔离:Namespace + Group 双层隔离](#五、环境隔离:Namespace + Group 双层隔离)
    • [1. Namespace 命名空间](#1. Namespace 命名空间)
    • [2. Group 分组](#2. Group 分组)
    • [3. 完整隔离配置](#3. 完整隔离配置)
  • [六、Nacos 核心原理 & Eureka 对比](#六、Nacos 核心原理 & Eureka 对比)
    • [1. 实例类型](#1. 实例类型)
    • [2. Nacos vs Eureka 核心对比](#2. Nacos vs Eureka 核心对比)
    • [3. CAP 选型](#3. CAP 选型)
  • [七、Nacos 配置中心:动态配置刷新](#七、Nacos 配置中心:动态配置刷新)
    • [1. 引入配置中心依赖](#1. 引入配置中心依赖)
    • [2. 核心配置文件](#2. 核心配置文件)
    • [3. Nacos 配置文件命名规则](#3. Nacos 配置文件命名规则)
    • [4. 配置动态刷新两种方式](#4. 配置动态刷新两种方式)
    • [5. **多环境共享配置**](#5. 多环境共享配置)
  • [八、Nacos 集群高可用搭建](#八、Nacos 集群高可用搭建)
    • [1. 集群核心架构](#1. 集群核心架构)
    • [2. 底层协议](#2. 底层协议)
    • [3. 集群搭建关键步骤](#3. 集群搭建关键步骤)
    • [4. 集群硬性规范](#4. 集群硬性规范)

一、服务注册:Eureka 平滑迁移 Nacos

1. 核心依赖引入

统一管理 Spring Cloud Alibaba 版本,避免依赖冲突,父工程统一锁定版本:

xml 复制代码
<properties>
    <spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
</properties>

<dependencyManagement>
    <dependencies>
        <!-- SpringCloudAlibaba 版本统一管理 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-dependencies</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

微服务子工程引入 Nacos 服务注册依赖,移除 Eureka 相关依赖:

xml 复制代码
<!-- Nacos 服务注册发现 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2. 基础配置

注释原有 Eureka 配置,新增 Nacos 注册地址:

yaml 复制代码
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

启动服务后,访问 Nacos 控制台,即可看到当前服务已成功注册。

二、服务分级存储模型

Nacos 采用三级分层架构,适配机房、地域部署场景:

服务 → 集群 (Cluster) → 实例

  1. 服务:如 user-service、order-service,代表一类业务服务
  2. 集群:代表机房 / 地域(杭州、上海、郑州),用于就近调用
  3. 实例:单台服务器上运行的具体服务节点

集群配置

yaml 复制代码
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        cluster-name: ZZ  # 自定义集群标识

三、负载均衡:NacosRule 同集群优先

Nacos 内置专属负载均衡策略 NacosRule,核心规则:

  1. 优先调用同集群下的服务实例,减少跨机房网络延迟
  2. 本集群无可用实例时,自动跨集群调用,并打印告警日志
  3. 同集群内采用随机算法实现负载分发

开启 NacosRule

yaml 复制代码
# 消费者服务配置
user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

四、权重配置:精细化流量管控

Nacos 控制台支持手动设置实例权重(范围 0~1),实现无损发布与流量管控:

  • 权重 = 0:下线节点,不接收任何流量,用于服务维护
  • 权重 = 1:默认值,正常接收流量
  • 权重自定义:高配机器调高权重,合理分配服务器压力

高频实战场景

  1. 灰度发布 / 平滑升级
    新节点权重置 0 → 测试验证 → 逐步调高权重 → 旧节点权重置 0,实现零停机更新。
  2. 服务临时维护
    无需停机、无需删除实例,直接置权重为 0,隔离流量排查问题。
  3. 差异化流量分配
    根据服务器配置高低,分配不同流量,避免低配机器性能瓶颈。

五、环境隔离:Namespace + Group 双层隔离

Nacos 提供多层级隔离方案,彻底解决开发、测试、生产环境配置混乱问题。

1. Namespace 命名空间

  • 作用:按环境隔离(dev / test / prod)
  • 特点:不同命名空间天然隔离,服务、配置互不互通
  • 使用:控制台创建命名空间,配置中填写命名空间唯一 ID

2. Group 分组

  • 作用:按业务线隔离(订单组、用户组、支付组)
  • 特点:同一环境下,不同业务配置、服务分组管理

3. 完整隔离配置

yaml 复制代码
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        cluster-name: ZZ
        namespace: xxxx-xxxx-xxxx  # 填写命名空间ID
        group: ORDER_GROUP         # 业务分组

六、Nacos 核心原理 & Eureka 对比

1. 实例类型

  • 临时实例(默认):客户端主动上报心跳,心跳超时自动剔除,适合普通业务
  • 非临时实例:服务端主动健康探测,断开不会自动剔除,适合核心持久化服务

手动配置非临时实例:

yaml 复制代码
spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false

2. Nacos vs Eureka 核心对比

特性 Nacos Eureka
健康检测 临时实例 (客户端心跳)、非临时实例 (服务端探测) 仅客户端心跳
数据同步 服务端主动 Push 推送 客户端定时 Pull 拉取
CAP 能力 支持 AP / CP 动态切换 仅 AP
附加能力 注册中心 + 配置中心一体化 仅注册中心

3. CAP 选型

  • 配置中心场景:CP 强一致性,保证配置数据准确不冲突
  • 服务注册场景:AP 高可用,优先保证服务可用,容忍短暂数据不一致

七、Nacos 配置中心:动态配置刷新

Nacos 兼具配置中心能力,统一管理全局配置,修改配置无需重启服务

1. 引入配置中心依赖

xml 复制代码
	<!-- Nacos 配置中心依赖 -->
	<dependency>
	    <groupId>com.alibaba.cloud</groupId>
	    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
	</dependency>

2. 核心配置文件

新建 bootstrap.yml(优先级高于 application.yml,项目启动优先加载):

yaml 复制代码
	spring:
	  application:
	    name: user-service
	  profiles:
	    active: dev
	  cloud:
 	   nacos:
  	    config:
 	       server-addr: localhost:8848
 	       file-extension: yaml

3. Nacos 配置文件命名规则

复制代码
	服务名-环境.后缀名
	例:user-service-dev.yaml

4. 配置动态刷新两种方式

方式一:@RefreshScope + @Value

java 复制代码
	@RestController
	@RefreshScope // 开启动态刷新
	public class DemoController {

  	  @Value("${user.name}")
  	  private String userName;

  	  @GetMapping("/get")
 	   public String getConfig(){
  	      return userName;
  	  }
	}

方式二:@ConfigurationProperties(推荐)

批量绑定配置,类型自动转换,代码更优雅:

java 复制代码
	@Component
	@ConfigurationProperties(prefix = "user")
	public class UserConfig {
	    private String name;
 	   private Integer age;

 	   // getter / setter 必须提供
	}

5. 多环境共享配置

配置加载优先级(从高到低):

  1. 服务名 - 环境.yaml (环境独有配置)
  2. 服务名.yaml (全局共享配置)

公共配置统一放入默认配置文件,实现多环境复用。

八、Nacos 集群高可用搭建

单机 Nacos 仅适用于本地开发,生产环境必须搭建集群,避免单点故障。

1. 集群核心架构

  1. 微服务 → Nginx 负载均衡
  2. Nginx 反向代理多个 Nacos 节点
  3. 所有 Nacos 节点共用一套 MySQL 数据
  4. 集群节点数量必须为奇数(≥3),满足Raft 选举机制

2. 底层协议

  • 配置管理:Raft 协议,CP 强一致
  • 服务注册:Distro 协议,AP 高可用

3. 集群搭建关键步骤

步骤 1:初始化数据库

执行 Nacos 自带脚本 mysql-schema.sql,创建 nacos 数据库。
步骤 2:配置集群列表

修改 conf/cluster.conf,填写所有节点地址:

复制代码
	192.168.1.100:8848
	192.168.1.101:8848
	192.168.1.102:8848

步骤 3:统一数据库配置

所有节点 application.properties 数据库配置保持一致

yaml 复制代码
	spring.datasource.platform=mysql
	db.num=1
	db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?useSSL=false&serverTimezone=UTC
	db.user=root
	db.password=123456

步骤 4:Nginx 负载均衡配置

css 复制代码
	http {
	    upstream nacos_http {
	        server 127.0.0.1:8848;
 	       server 127.0.0.2:8848;
	        server 127.0.0.3:8848;
 	   }
	    server {
	        listen 8848;
	        location /nacos/ {
	            proxy_pass http://nacos_http/nacos/;
	        }
	    }
	}

	stream {
 	   upstream nacos_grpc {
	        server 127.0.0.1:9848;
	        server 127.0.0.2:9848;
	        server 127.0.0.3:9848;
 	   }
  	  server {
	        listen 9848;
 	       proxy_pass nacos_grpc;
 	   }
	}

步骤 5:启动集群

所有节点执行启动脚本:

复制代码
	# Linux/Mac
	./startup.sh

	# Windows
	startup.cmd

4. 集群硬性规范

  1. 节点数量 ≥3 且为奇数
  2. 所有节点 Nacos 版本、JDK 版本完全一致
  3. 共用同一个 MySQL,禁用内置 Derby 数据库
  4. 集群配置文件、数据库配置全网统一
相关推荐
丑八怪大丑2 小时前
Java范型
java·开发语言
空中海2 小时前
第一篇:入门篇 — 认识 Spring Boot 与基础开发
java·spring boot·后端
我能坚持多久2 小时前
C++的Vector学习:从功能探索到底层实现
开发语言·c++·学习
她说彩礼65万2 小时前
C语言 动态内存管理
c语言·开发语言·算法
RainCity2 小时前
Java Swing 自定义组件库分享(三)
java·笔记
傻啦嘿哟2 小时前
管好PPT的“骨架”:用Python控制页面与文档属性
开发语言·javascript·c#
凤凰院凶涛QAQ2 小时前
《C++转java快速入手系列》类与对象篇
java·开发语言·c++
时空系2 小时前
第8篇:模板与实例——面向对象编程入门(上)python中文编程
开发语言·python
故事还在继续吗2 小时前
常见的导致 coredump 的原因
开发语言·gdb