SpringCloudAlibaba服务治理-Nacos
Nacos简介
Nacos是SpringCloudAlibaba的一个组件,主要提供服务注册发现和配置管理等服务,等效于注册中心+配置中心
Nacos安装
从官网下载Nacos-1.2.0,解压后直接运行bin目录下的startup.cmd,命令运行成功后直接访问http://localhost:8848/nacos
默认的账户名和密码都是nacos
Nacos作为注册中心
1.引入依赖
pom.xml
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.在启动类上添加@EnableDiscoveryClient
注解
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class,args);
}
}
3.配置yml
application.yml
server:
port: 8001
spring:
application:
name: sword-provider
cloud:
nacos:
discovery:
# 添加nacos的注册地址
server-addr: 127.0.0.1:8848
启动服务,刷新nacos页面
image.png
可以看到nacos服务列表中我们的微服务已经注册上去了
Nacos支持AP模式和CP模式的切换
AP:高可用和分区容忍性,如果不需要存储服务级别的信息,且服务实例都是通过nacos-client端注册,并且能够保持心跳的上报,那么选择AP模式
CP:强一致性和分区容忍性,如果需要在服务级别编辑和存储配置信息,那么CP是必须的,K8s服务和DNS服务适用于CP模式,该模式下注册实例之前必须先注册服务,如果服务不存在则报错
使用命令切换并启动nacos
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
Nacos作为配置中心
1.在pom.xml中添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.在resource文件夹下创建bootstrap.yml
原因:在项目初始化时,先要从配置中心拉取配置才能保证程序正常启动,而SpringBoot中的配置文件是有加载顺序的,bootstrap先于application
bootstrap.yml
server:
port: 8001
spring:
application:
name: sword-provider
cloud:
nacos:
discovery:
# 作为服务注册中心地址
server-addr: 127.0.0.1:8848
config:
# 作为服务配置中心地址
server-addr: 127.0.0.1:8848
# 指定文件的扩展名为yaml
file-extension: yaml
3.在application.yml中指定配置环境
application.yml
# 指定配置的环境
spring:
profiles:
active: dev
4.启动类配置
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class,args);
}
}
5.在naco的可视化界面中进行相关配置
dataId配置规则:
${pring.application.name}-${spring.profiles.active}.${file-extension}
参考如上规则,需要配置的文件名为sword-provider-dev.yaml,配置如下
image.png
点击提交即可
6.测试,我们可以在Controller中写一个方法来测试配置是否准确
其实服务能够启动成功,就说明配置应该就没有什么问题了,这里来测试能否获取到nacos中配置文件的值
ProviderController .java
@Value("${info.name}")
private String info;
@GetMapping("info")
public String getInfo(){
return info;
}
访问接口http://localhost:8001/provider/info,得到如下结果
7.服务配置的动态刷新
在上面一步中,我们已经能够获取到远程配置的值,但是此时如果更改了远程配置中的值,我们获取到的还是原来的值,说明当前情况下,我们无法获取到更新的配置,此时可以利用SpringCloud的
@RefreshScope
来实现配置自动更新
@RestController
@RequestMapping("provider")
@RefreshScope
public class ProviderController {
@Value("${info.name}")
private String info;
@GetMapping("info")
public String getInfo(){
return info;
}
}
重启服务后在nacos可视化配置界面更新info.name的值,再次访问接口,就能够及时获取到更新
image.png
Nacos中配置中心的命名空间、Group、和Data Id之间的关系
- NameSpace:NameSpace默认的命名空间是public,主要用作开发环境之间的隔离,比如现在有三个环境:开发、测试、生产,那么就可以创建三个命名空间
- Group:默认为DEFAULT_GROUP,可以把同一生产环境的不同微服务划分到一个组
- Data Id:指向具体的配置名称
- 归属应用:指定该配置归属于哪一个应用
通过NameSpace、Group、Data Id查找配置文件
1.在nacos配置中新增一个名为test
的命名空间
2.然后在test
命名空间下创建yaml配置,并且同时指定group
bootstrap.yml
server:
port: 8001
spring:
application:
name: sword-provider
cloud:
nacos:
discovery:
# 作为服务注册中心地址
server-addr: 127.0.0.1:8848
config:
# 作为服务配置中心地址
server-addr: 127.0.0.1:8848
# 指定文件的扩展名为yaml
file-extension: yaml
# 指定命名空间
namespace: 9f6bb237-906c-4fbe-8698-4af61c973951
# 指定组名
group: TEST_GROUP
application.yml
# 指定配置的环境
spring:
profiles:
active: test
再次启动服务,通过接口可以查看到对应的配置信息
Nacos集群和持久化配置
Nacos使用嵌入式数据库实现数据存储,但支持mysql的集中存储,在生产过程中常使用nacos集群部署,来保证nacos的高可用
环境准备
Nginx集群+Nacos集群+Mysql主从(生产)
这里主要演示Nacos集群的搭建,所以就不再演示Nginx集群和Mysql主从搭建了
搭建Nginx
搭建Mysql
搭建Nacos集群
1.下载安装nacos
cd /opt
# 下载
wget https://github.com/alibaba/nacos/releases/download/1.3.0/nacos-server-1.3.0.tar.gz
# 解压
tar -xvf nacos-server-1.3.0.tar.gz
2.mysql配置
去nacos/conf目录下找到nacos提供的nacos-mysql.sql文件
去mysql中执行sql脚本,完成相应的库表创建
3.application.properties配置(切换数据库)
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root
4.nacos集群配置
最好先配置主机的hostname
vi /etc/hostname
编辑nacos/conf目录下的cluster.conf文件
192.168.10.251 8845
192.168.10.251 8846
192.168.10.251 8847
5.编辑启动脚本,使其可以根据不同的端口启动
进入到到nacos/bin目录下,编辑startup.sh,添加条件
调整内存大小
image.png
启动时设置端口
image.png
启动时通过
-q
参数指定端口
./startup.sh -q 8845
./startup.sh -q 8846
./startup.sh -q 8847
6.nginx负载均衡配置
更改完成后重启nginx
访问:http://192.168.10.251:8848/nacos/#/login
image.png
能够访问,说明Nacos集群搭建成功