Spring Cloud的注册中心和配置中心(Nacos)
Nacos 注册中心与配置中心完全指南:安装、部署、集群与实战
本文基于 Nacos 1.4.1 版本,Spring Cloud Alibaba 生态,包含完整部署步骤、配置示例和集群搭建。建议收藏,方便生产环境部署查阅。
一、Nacos 核心介绍
1. 什么是 Nacos?
Nacos(Naming & 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 ID:
nacos-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
七、总结与最佳实践
-
单机测试:使用
-m standalone启动,适合开发环境。 -
生产环境:必须使用集群模式 + MySQL 持久化。
-
配置管理:合理使用 Namespace、Group 进行配置隔离。
-
客户端配置:通过 Nginx 代理访问集群,避免直连单个节点。
-
监控告警:结合 Nacos 控制台的服务管理和配置管理模块,实时监控微服务状态。
版权声明:本文为 CSDN 博主原创,转载请注明出处。如有疑问,欢迎评论区交流。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)