Nacos 注册中心与配置中心完全指南:安装、部署、集群与实战

本文基于 Nacos 1.4.1 版本,Spring Cloud Alibaba 生态,包含完整部署步骤、配置示例和集群搭建。建议收藏,方便生产环境部署查阅。

一、Nacos 核心介绍

1. 什么是 Nacos?

NacosNaming & Configuration Service)是阿里巴巴开源的一个动态服务发现、配置管理和服务管理平台

  • 名字解析Na(Naming, 服务注册与发现) + Co(Configuration, 配置管理) + S(Service, 服务管理)。

  • 核心功能

    • 注册中心:统一管理所有微服务的 IP 地址和端口号。

    • 配置中心:集中管理所有微服务的配置文件,支持动态刷新。

  • 核心启动器

    <!-- 注册中心启动器 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    <!-- 配置中心启动器 -->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>

2. Nacos 架构图

二、Nacos 安装与启动

1. 安装步骤

# 1. 上传并解压
cd /usr/upload
tar -zxvf nacos-server-1.4.1.tar.gz -C /usr/local

# 2. 启动和关闭
# 启动(单机模式)
cd /usr/local/nacos/bin
./startup.sh -m standalone

# 关闭
cd /usr/local/nacos/bin
./shutdown.sh

3. 访问测试

  • 浏览器访问http://192.168.61.132:8848/nacos

  • 默认用户名/密码nacos/nacos

三、Nacos 注册中心实战

1. 服务提供者:nacos-provider

1)pom.xml 依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2)application.yml 配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.61.132:8848  # Nacos注册中心地址
  application:
    name: nacos-provider  # 服务名,注册到Nacos的Map Key

3)启动类

@SpringBootApplication
@EnableDiscoveryClient  // 开启服务注册发现
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

2. 服务消费者:nacos-consumer

1)pom.xml 依赖(同上)

2)application.yml 配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.61.132:8848
  application:
    name: nacos-consumer

3)服务发现调用

@RestController
public class ConsumerController {
    
    @Autowired
    private DiscoveryClient discoveryClient;
    
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/user/{id}")
    public User getUserById(@PathVariable Integer id) {
        // 1. 从Nacos获取服务实例列表
        List<ServiceInstance> instances = discoveryClient.getInstances("nacos-provider");
        ServiceInstance instance = instances.get(0);
        
        // 2. 拼接URL调用
        String url = "http://" + instance.getHost() + ":" + instance.getPort() + "/provider/getUserById/" + id;
        return restTemplate.getForObject(url, User.class);
    }
}

3. 注册中心原理

四、Nacos 配置中心实战

1. 集中管理配置文件

1)pom.xml 依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2)bootstrap.yml 配置

spring:
  cloud:
    nacos:
      config:
        server-addr: 192.168.61.132:8848  # 配置中心地址
        prefix: nacos-config              # Data ID前缀,默认使用spring.application.name
        file-extension: yaml              # 配置文件扩展名,默认properties

3)Nacos 控制台发布配置

  • Data IDnacos-config.yaml(命名规则:${prefix}.${file-extension}

  • 配置格式:YAML

  • 配置内容示例

    server:
      port: 8080
    msg: "Hello Nacos Config"
    user:
      name: "张三"
      age: 25

2. 实时更新配置文件

@RefreshScope 注解

@RestController
@RefreshScope  // 关键:检测到配置文件更新后重新创建Bean实例
public class ConfigController {
    
    @Value("${msg}")
    private String msg;
    
    @RequestMapping("/getConfigInfo")
    public String getConfigInfo() {
        return "msg:" + msg;
    }
}

原理:Nacos 客户端会监听配置的 MD5 值变化,当检测到配置变更时,自动触发 Bean 刷新。

3. 配置隔离(三层架构)

维度

说明

使用场景

示例

Namespace

命名空间

环境隔离

dev、test、prod

Group

分组

项目隔离

ican-parent、jd-parent

Data ID

配置ID

应用隔离

nacos-config.yaml

配置示例

# bootstrap.yml
spring:
  cloud:
    nacos:
      config:
        namespace: dev-namespace-id    # 命名空间ID
        group: ican-parent-group       # 分组名
        prefix: nacos-config
        file-extension: yaml

五、Nacos 持久化

1. 为什么需要持久化?

  • Nacos 默认使用嵌入式数据库 Derby

  • 集群模式下,各节点的 Derby 数据库独立,数据无法共享。

  • 必须切换到外部数据库(如 MySQL)实现数据统一存储。

2. 持久化配置步骤

1)修改 application.properties

# 文件路径:/usr/local/nacos/conf/application.properties
# 取消注释并修改MySQL配置:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.20.9:3306/nacos?characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=1111

2)初始化 MySQL 数据库

-- 1. 创建nacos数据库
CREATE DATABASE nacos CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 2. 执行Nacos提供的SQL脚本
-- 脚本位置:/usr/local/nacos/conf/nacos-mysql.sql

3)测试验证

  • 重启 Nacos:./shutdown.sh然后 ./startup.sh -m standalone

  • 在 Nacos 控制台发布配置

  • 查看 MySQL 的 config_info表,确认数据已持久化

六、Nacos 集群搭建

1. 为什么需要 3 个节点?

  • 选举 Leader:Nacos 集群采用 Raft 协议选举主节点。

  • 数据同步:只有 Leader 节点处理写请求,然后同步到 Follower 节点。

  • 高可用:3 个节点可容忍 1 个节点故障(遵循半数以上原则)。

2. 集群搭建步骤

1)修改 cluster.conf

cd /usr/local/nacos/conf
cp cluster.conf.example cluster.conf
vim cluster.conf
# 添加集群节点(IP:PORT)
192.168.61.132:8851
192.168.61.132:8852
192.168.61.132:8853

2)复制 3 份 Nacos

cd /usr/local
mkdir nacos-cluster
cp -r /usr/local/nacos /usr/local/nacos-cluster/nacos-8851
cp -r /usr/local/nacos /usr/local/nacos-cluster/nacos-8852
cp -r /usr/local/nacos /usr/local/nacos-cluster/nacos-8853

3)修改各节点端口号

# 修改8851节点
vim /usr/local/nacos-cluster/nacos-8851/conf/application.properties
server.port=8851

# 修改8852节点
vim /usr/local/nacos-cluster/nacos-8852/conf/application.properties
server.port=8852

# 修改8853节点
vim /usr/local/nacos-cluster/nacos-8853/conf/application.properties
server.port=8853

4)启动集群

cd /usr/local/nacos-cluster/nacos-8851/bin
./startup.sh  # 集群模式,不指定-m参数

cd /usr/local/nacos-cluster/nacos-8852/bin
./startup.sh

cd /usr/local/nacos-cluster/nacos-8853/bin
./startup.sh

3. Nginx 负载均衡配置

1)安装 Nginx

# 1. 安装依赖
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel

# 2. 下载解压
cd /usr/upload
wget -c https://nginx.org/download/nginx-1.12.0.tar.gz
tar -zxvf nginx-1.12.0.tar.gz

# 3. 编译安装
cd nginx-1.12.0
./configure --prefix=/usr/local/nginx
make && make install

2)配置 Nginx 代理

修改 /usr/local/nginx/conf/nginx.conf

# 在http块中添加
upstream nacos-cluster {
    server 192.168.61.132:8851;
    server 192.168.61.132:8852;
    server 192.168.61.132:8853;
}

server {
    listen 80;
    server_name localhost;
    
    location / {
        proxy_pass http://nacos-cluster;
    }
}

3)启动 Nginx

cd /usr/local/nginx/sbin
./nginx  # 启动
./nginx -s stop  # 停止

4. 集群架构图

5. 客户端连接集群

spring:
  cloud:
    nacos:
      discovery:
        server-addr: http://192.168.61.132  # 连接Nginx的80端口
      config:
        server-addr: http://192.168.61.132

七、总结与最佳实践

  1. 单机测试:使用 -m standalone启动,适合开发环境。

  2. 生产环境:必须使用集群模式​ + MySQL 持久化

  3. 配置管理:合理使用 Namespace、Group 进行配置隔离。

  4. 客户端配置:通过 Nginx 代理访问集群,避免直连单个节点。

  5. 监控告警:结合 Nacos 控制台的服务管理配置管理模块,实时监控微服务状态。

版权声明:本文为 CSDN 博主原创,转载请注明出处。如有疑问,欢迎评论区交流。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐