一、 nacos 下载及安装
nacos 官网下载 nacos-server-1.2.0-beta.1.tar.gz 解压
执行 startup.cmd 命令
访问 localhost:8848/nacos
账号: nacos
密码: nacos
二、创建cloudalibaba-provider-payment9001 项目‘
1.添加 spring cloud alibaba nacos 依赖
<dependencies>
<!-- SpringCloud alibaba nacos -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.sc2020</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2.修改 application.yml 配置
server:
port: 9001
spring:
application:
name: nacos-payment-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
management:
endpoints:
web:
exposure:
include: "*"
3.启动类添加 注解:@EnableDiscoveryClient
4.消费者服务也需要注册到nacos注册中心,使用restTemplate或者feign调用接口即可
5. nacos 与 其他注册中心特性对比
6. Nacos 中 AP和CP模式的切换(NACOS支持AP和CP模式的切换)
C是 所有的节点在同一时间看到的数据是一致的,而A的定义是所有的请求都会收到响应。
何时选择使用何种模式?
一般来说,
如果不需要存储服务级别的信息且服务实例是通过nacos-client 注册,并能够保持心跳的上报,那么就可以选择AP模式。当前主流的服务如 spring cloud 和 duboo 服务,都适用于 AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。
如果在服务级别编辑或者存储配置信息,那么CP是必须,K8S服务和DNS服务则适用于CP模式,CP模式下则支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式注册实例之前必须先注册服务,如果服务不存在,则返回错误。
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
7. NACOS 作为分布式配置中心
(1)pom文件添加依赖
<dependencies>
<!-- SpringCloud alibaba nacos config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- SpringCloud alibaba nacos discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- web组件 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.sc2020</groupId>
<artifactId>cloud-api-commons</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
(2)编写 bootstrap.yml文件
# nacos 配置
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos 服务注册中心地址
config:
server-addr: localhost:8848 #nacos 服务注册中心地址
file-extension: yaml #指定yaml格式的配置
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
(3) 编写 application.yml
spring:
profiles:
active: dev #表示开发环境
(4) 服务启动类添加 @EnableDiscoveryClient
控制层controller 添加 @RefreshScope 以支持nacos的动态刷新功能
使用 @Value注解 即可读取到 nacos 配置中心的配置项内容
最后公式 : ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
nacos ui 页面创建配置项
8. 命名空间 、分组和DataID 三者关系
默认清库:
Namespace = public ,Group = DEFAULT_GROUP , 默认cluster 是 DEFAULT.
不使用默认的 group的情况下,可以在nacos 上创建 不同的 group,只需在bootstrap.yml文件中指定相应的 nacos config group
配置项即可。
不使用 nacos 的默认命名空间的情况下,可以 新建其他的命名空间,新建完成之后 会生成一个命名空间序列号。如下所示在 bootstrap.yml中配置即可。
9.nacos 的 集群介绍
(1) nacos 默认自带的是嵌入式数据库derby,可以查看 https://github.com/alibaba/nacos/blob/develop/config/pom.xml 得知引入的有apache derby 数据库依赖。
(2)derby 数据库切换到 mysql 数据库的配置步骤
nacos-server-1.1.4 /nacos/config 目录下找到sql脚本 ,执行 nacos-mysql.sql脚本 建表。
创建的数据库名称为:nacos_config
nacos-server-1.1.4/nacos/config 目录下找到application.properties ,在最后面添加 mysql相关的配置项
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=1234
配置完成之后重启 nacos 即可,此时可以看到一个全新的空记录界面,之前是数据被记录到derby中,现在是数据记录到mysql 中。
10. Linux 版本nacos 集群搭建
1个nginx + 3个nacos + 1个mysql 数据库配置
正常情况下 高可用需要 多个nginx 实例,这里为了方只配置一个nginx实例。
(1)将nacos默认的数据库derby 切换到 mysql。
下载安装linux 版本的nacos ,解压后 找到 config 目录下的nacos-mysql.sql脚本并执行建表语句,修改 application.properties ,添加 同9(nacos集群的介绍)中的mysql 相关配置项。
(2)复制 cluster.config.example 为 cluster.config 配置文件
cp cluster.config.example cluster.config
向 cluster.config 配置文件中添加如下信息用来说明以下三个nacos节点作为一个集群。
192.168.100.120:3333
192.168.100.120:4444
192.168.100.120:5555
注意: 这里的ip地址不能直接写成127.0.0.1,则应写成 linux命令hostname -i可以识别的ip地址。
(3) 复制 startup.sh 为 startup.sh.bk 作为一个备份文件,防止我们将startup.sh 修改坏了。
需要修改以下 三个地方:
添加 :p
$PORT = $OPTARG;;
-Dserver.port = ${PORT}
执行命令依次启动三个 nacos 节点:
startup -p 3333
startup -p 4444
startup -p 5555
(4) 配置 nginx
启动 nginx ,执行 nginx -c /usr/local/nginx/conf/nginx.conf
访问 http://192.168.100.120:1111/nacos/#/login 测试 通过nginx 访问nacos
执行命令 ps -ef | grep nacos | grep -v grep | wc -l 返回 3 ,说明三个nacos 节点已正常启动。
最后将 项目 的application.yml中的 nacos server-addr 修改为 nginx 的访问地址(192.168.100.120:1111)即可。