- spring cloud alibaba主要功能
- spring cloud alibaba主要组件
- spring cloud alibaba 之 Nacos
一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台.
即Nacos就是注册中心 + 配置中心的组合.
Nacos = Eureka + Config + Bus - nacos与其他注册中心对比
- nacos可以切换AP和CP
C: consistency 一致性,所有节点在同一时间看到的数据是一致的.
A: avaliable 可用性,所有的请求都会收到响应.
切换模式命令: - AP和CP何时使用何种模式
- 使用nacos需要导入的配置
<!-- nacos-config配置中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- nacos-discovery服务注册与发现-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- nacos的配置文件有两个: bootstrap.yml和application,yml
- Nacos中的dataid的组成格式及SpringBoot配置文件中的匹配规则
- 即:
- 注: yaml格式的配置文件不能写.yml,只能写.yaml.否则会报错
- nacos自带动态刷新
当修改nacos中的配置文件时,再次调用查看配置的接口,就会发现配置已经刷新. - nacos中的namespace、group、data id三者关系,以及为什么这么设计
- 最外层的namespace用于区分部署环境,主要用来实现隔离.比如有开发、测试、生产三个环境,就可以创建三个namespace,不同的namespace之间是隔离的.默认namespace=public.
- Group和DataID逻辑上区分两个目标对象,Group可以把不同的微服务划分到同一个分组中.Group默认是DEFAULT_GROUP.
- Service就是微服务,一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分.比方为了容灾,将service微服务分别部署在了杭州机房和广州机房,这时杭州机房的service微服务集群名称是HZ,广州机房的service微服务集群名称是GZ,这样还可以尽量让同一个机房的微服务相互调用,以提升性能.
- Nacos的三种部署模式
- 单机模式: 用于测试和单机使用
- 集群模式: 用于生产环境,确保高可用
- 多集群模式: 用于多数据中心场景
默认Nacos使用嵌入式数据库实现数据的存储.所以,如果启动多个默认配置下的Nacos节点,数据存储存在一致性的问题.所以Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MYSQL的存储.
- Nacos持久化配置解释及步骤
Nacos默认自带的是嵌入式数据库derby.
derby到mysql切换配置步骤:
- 打开nacos/conf/nacos-mysql.sql,可以看到提示: /* 数据库全名 = nacos_config */, 所以新建数据库nacos_config,在该数据库下新建查询,并执行nacos-mysql.sql中的语句,会创建出11张表.
- 打开nacos/conf/application.properties文件,添加下面连接数据库语句
- 启动nacos,可以看到全新的空记录界面,以前是derby默认的嵌入式数据库.
- Nacos集群配置
- 总架构
- Linux服务器上mysql数据库配置
新建nacos_config数据库,然后在该数据库下执行nacos/conf/nacos-mysql.sql中的sql语句. - 配置application.properties
在该文件下添加如下内容 - linux服务器上nacos的集群配置cluster.conf
nacos/conf下有默认配置cluster.conf.example,先拷贝重命名为cluster.conf,然后在该文件中添加ip地址:端口号.
通过ifconfig可查询出本机ip地址(linux下也可以通过hostname -i). - 注: ip地址:端口号之间不能有空格,否则虽然能启动,但是nacos.log文件会报错,并且nacos图形化界面的节点列表为空.
- 编辑Nacos的启动脚本startup.sh,使它能够接受不同的启动端口,然后保存退出
- 配置Nginx,由它作为负载均衡器
修改nginx/conf/nginx.conf(监听端口linux默认是80, mac os电脑上默认是8080) - 测试通过nginx访问nacos
在nacos/bin目录下执行sh startup.sh -p 3333 -m standalone、sh startup.sh -p 4444 -m standalone、sh startup.sh -p 5555 -m standalone 启动nacos集群.(不加-m standalone,nacos的节点列表为空,微服务也不能注册,但是加了的话节点列表只显示一个实例,刷新一次显示另一个实例,就不是集群了应该,不知道怎么回事)
启动nginx:
mac下通过如下命令启动:
nginx
linux下通过如下命令启动:
./nginx -c /usr/local/nginx/conf/nginx.conf
输入http://172.19.99.221(ip):1111(port)/nacos通过nginx访问nacos
- 微服务的application.yml文件中配置spring.cloud.nacos.discovery.server-addr
server:
port: 9002
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: 172.19.99.221:1111 # nginx的1111端口,做集群
# server-addr: localhost:8848
management:
endpoints:
web:
exposure:
include: '*'
- 启动9002微服务,并通过http://172.19.99.221(ip):1111(port)/nacos可以看到9002微服务注册进nacos.