一、简介
1.1、Nacos
前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service。
1.2、是什么
一个更易于构建云原生应用的动态服务发现,配置管理和服务管理中心。
Nacos: Dynamic Naming and Configuration Service。
Nacos就是注册中心+配置中心的组合。等价于,Nacos = Eureka+Config+Bus。
1.3、作用
替代Eureka做服务注册中心。
代替COnfig做服务配置中心。
1.4、下载
https://github.com/alibaba/Nacos
官方文档:
https://nacos.io/zh-cn/index.html
https/lspring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud alibaba_nacos_discovery
1.5、各注册中心比较
二、安装运行Nacos
本地Java8+Maven环境已经OK
先从官网下载Nacos:
https://github.com/alibaba/nacos/releases/tag/1.1.4
解压安装包,直接运行bin目录下的startup.cmd
默认账号密码都是nacos
命令运行成功后直接访问http://localhost:8848/nacos
三、Nacos作为服务注册中心
全景图:
Nacos和CAP:
四、Nacos作为服务配置中心
Nacos中的匹配规则见:
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
4.1、Nacos作为配置中心-分类配置
多环境多项目管理
问题1:
实际开发中,通常一个系统会准备dev开发环境test测试环境prod生产环境。如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
问题2:
一个大型分布式微服务系统会有很多微服务子项目,
每个微服务项目又都会有相应的开发环境、测试环境、预发环境、正式环境..…那怎么对这些微服务配置进行管理呢?
配置管理:
命名空间:
4.2、Namespace+Group+Data ID三者关系
类似Java里面的package名和类名最外层的namespace是可以用于区分部署环境的, Group和DatalD逻辑上区分两个目标对象。
默认情况:
Namespace=public, Group=DEFAULT_GROUP,默认Cluster是DEFAULT
Nacos默认的命名空间是public, Namespace主要用来实现隔离。
比方说我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
Group默认是DEFAULT_GROUP, Group可以把不同的微服务划分到同一个分组里面去。
Service就是微服务;一个Service可以包含多个Cluster (集群) , Nacos默认Cluster是DEFAULT, Cluster是对指定微服务的一个虚拟划分。比方说为了容灾,将Service微服务分别部署在了杭州机房和广州机房。
这时就可以给杭州机房的Service微服务起一个集群名称(HZ)给广州机房的Service微服务起一个集群名称(GZ),还可以尽量让同一个机房的微服务互相调用,以提升性能。
最后是Instance,就是微服务的实例。
1、DataID方案
2、Group方案
3、Namespace方案
五、Nacos集群和持久化
官网架构图:
真实情况:
默认Nacos使用嵌入式数据库实现数据的存储。所以,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性问题的。为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。
Nacos支持三种部署模式
- 单机模式-用于测试和单机试用。
- 集群模式-用于生产环境,确保高可用。
- 多集群模式-用于多数据中心场景。
单机模式支持mysql
在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:
1、安装数据库,版本要求: 5.6.5+
2、初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
3、修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql) ,添加mysql数据源的url、用户名和密码。
spring.datasource.platform-mysql
db.num-1
db.url.0-jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding-utf8&connectTimeout-100edb.user=nacos_devtestdb.password=youdontknow
再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql。
高可用小总结:
评论