Nacos的使用
demo
Nacos 组件
Nacos 组件 (Nacos是简写)
Nacos = Name + Configuration(配置中心) + Service(服务注册中心)
作用: 服务注册中心 统一配置中心
- nacos.io/zh-cn/index...
- Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
总结: Nacos就是微服务架构中服务注册中心以及统一配置中心,用来替换原来的(eureka,consul)以及config组件
使用nacos组件 ===> Nacos软件 服务注册中心
- 访问Nacos官方网站
nacos.io/zh-cn/index... - 仓库地址
github.com/alibaba/nac... - 下载地址
github.com/alibaba/nac... 在linux中安装
- 上传nacos安装包到linux操作系统
-
装jdk 要求最好8.0+ 以后版本
-
解压缩nacos安装包
tar -zxvf nacos-server-1.4.1.tar.gz
-
查看nacos目录结构
drwxr-xr-x. 2 root root  82 4月  21 17:29 bin
启动关闭nacos脚本目录
drwxr-xr-x. 2 502 games  168 7月  10 2020 conf
配置nacos配置文件目录
drwxr-xr-x. 2 root root  30 4月  21 17:29 target
nacos-server 核心jar包 -
启动nacos服务 注意:默认nacos启动以集群模式启动, 必须满足多个节点
单机启动: 在bin目录中
./startup.sh -m standalone
(集群启动:
./nacos01/bin/startup.sh
./nacos02/bin/startup.sh
./nacos03/bin/startup.sh) 查看日志:
tail -f logs/nacos.log
注意:关闭防火墙
systemctl stop firewalld
systemctl status firewalld
地址: http://192.168.175.128:8848/nacos 用户名 和 密码都是nacos
nacos server 服务注册中心细节
-
安装并启动nacos server
默认监听web端口 :8848
访问web界面: http://192.168.80.128:8848/nacos 用户名密码都是nacos
-
开发微服务进行服务注册
a. 创建独立springboot 应用
b. 引入依赖
springcloud-strater-alibaba-nacos-discovey
java
<!--引入nacos client的依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
c. 编写配置
nacos 地址分为服务注册中心地址和配置地址
java
server.port=8001
# 代表微服务服务名 唯一 推荐 大写
spring.application.name=NACOSCLIENT
# nacos server 总地址
spring.cloud.nacos.server-addr=192.168.175.128:8848
# 作为nacos client注册地址 (有默认配置了,所以可以不写)
spring.cloud.nacos.discovery.server-addr=${spring.cloud.nacos.server-addr}
# 指定向nacos server注册服务名称 (有默认配置了,所以可以不写)
spring.cloud.nacos.discovery.service=${spring.application.name}
management.endpoints.web.exposure.include=* #暴露所有web端点
-
加入启动服务注册注解 [注意:][新版本之后这步可以省略不写]
-
查看nacos的服务列表
服务间通信
- 服务间通信
两种方式: a.Http Rest推荐
b.RPC- 使用Rest方式实现服务间通信
1.RestTemplate
2.RestTemplate + Ribbon
3.OpenFeign方式调用推荐
nacos 统一配置中心使用
- 启动nacos server
nacos 作为统一配置中心:
- 他管理配置文件方式是在自己所在服务器上形成一个版本库, 因此不需要再创建远程版本库
- nacos 作为统一配置中心管理配置文件时,同样也是存在版本控制
- 开发微服务作为统一配置中心客户端将配置交给nacos进行管理
a. 开发config client微服务 独立springboot应用
b. 将自身配置交给远端nacos config 进行管理
c. 自身项目中引入nacos config client 依赖
新建配置
nacos 配置中心细节
@RefreshScope //允许远端配置修改自动刷新
- 统一配置中心 nacos dataId细节: (一旦写了就不能改了,只能删除) 代表完整配置文件名称 ===>
spring.cloud.nacos.config.name=configclient-prod
完整配置文件名称 = prefix(前缀) + (env)环境 + file-extension(后缀)
-
dataId = spring.cloud.nacos.config.name + spring.cloud.nacos.config.file-extension
-
dataId =
$
{prefix} +$
{spring.profile.active} +$
{file-extension}
- 微服务拉取配置
a. 第一种获取配置方式
java
#从这个组中拉取哪个配置文件
spring.cloud.nacos.config.name=configclient-prod
#拉取这个配置那个后缀的配置文件
spring.cloud.nacos.config.file-extension=properties
b. 第二种获取配置文件方式dataId = prefix + env + file-extension
java
# 第二种获取配置文件方式 dataId = prefix + env + file-extension
spring.cloud.nacos.config.prefix=configclient
spring.profiles.active=prod
spring.cloud.nacos.config.file-extension=properties
- 统一配置中心 nacos 三个重要概念
- 命名空间 : namespace
默认nacos安装完成之后会有一个默认命名空间这个命名空间名字为 public
作用: 站在项目中角度隔离每一个项目配置文件
新建命名空间
:
java
#告诉从哪个命名空间获取配置
spring.cloud.nacos.config.namespace=7e0db002-bd5c-4f24-a003-83e23cba8d30
-
组 : 默认nacos中在管理配置文件时不显示执行group名称之默认的组名称为 DEFAULT GROUP
作用: 站在项目中每个服务角度,隔离同一个项目中不同服务的配置 -
文件名 : dataId
获取一个配置文件唯一标识
1. 从nacos获取配置
- 创建项目并引入nacons配置中心依赖
java
<!--引入nacos client 依赖-->
<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>
- 配置配置中心地址 application.properties
java
#告诉config server地址
spring.cloud.nacos.config.server-addr=192.168.175.128:8848
#告诉从哪个组进行配置获取
spring.cloud.nacos.config.group=DEFAULT_GROUP
#从这个组拉取哪个配置文件
spring.cloud.nacos.config.name=configclient-prod
#拉取这个配置那个后缀的配置文件
spring.cloud.nacos.config.file-extension=properties
直接启动项目出现错误,发现当前项目在启动时,并不会等待拉取配置完成之后再启动,因此直接报错,
解决方案 :让当前项目在启动时预先拉取配置,在当前项目在启动时预先拉取配置,在已拉取的配置信息启动
修改项目 application.properties为bootstrap.properties
- 在nacos中创建配置
- 编写控制器测试配置读取情况
java
@RestController
@Slf4j
public class HelloController {
//注入配置
@Value("${user.name}")
private String username;
@GetMapping("/hello/config")
public String config(){
log.info("用户名: [{}]",username);
return username;
}
}
- 启动项目方式测试配置读取
2. DataId
- DataId
- 用来读取远程配置中心的中具体配置文件其完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
a. prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
b. spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
c. file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
d. 配置配置文件
java
#告诉config server地址
spring.cloud.nacos.config.server-addr=192.168.175.129:8848
#告诉从哪个组进行配置获取
spring.cloud.nacos.config.group=DEFAULT_GROUP
#从这个组中拉取那个配置文件
spring.cloud.nacos.config.name=configclient-prod
#拉取这个配置那个后缀的配置文件
spring.cloud.nacos.config.file-extension=properties
e. 直接启动项目出现错误, 发现当前项目在启动时,并不会等待取配置完成之后在启动, 因此直接报错,
解决方案: 让当前项目在启动时预先拉取配置, 再以拉取的配置信息启动
修改项目 application.pEorties为bootstrap.properties
3. 实现自动配置刷新
- 自动刷新
- 默认情况下nacos已经实现了自动配置刷新功能,如果需要刷新配置直接在控制器中加入@RefreshScope注解即可
java
@RestController
@Slf4j
@RefreshScope
public class HelloController {
//注入配置
@Value("${user.name}")
private String username;
@GetMapping("/hello/config")
public String config(){
log.info("用户名: [{}]",username);
return username;
}
}
4. 命名空间
- 命名空间(namespace)
- github.com/alibaba/spr...
- namespace命名空间是nacos针对于企业级开发设计用来针对于不同环境的区分, 比如正在企业开发时有测试环境, 生产环境, 等其他环境, 因此为了保证不同环境配置实现隔离, 提出了namespace的概念, 默认在nacos中存在一个public命名空间所有配置在没有指定命名空间时都在这个命名空间中获取配置, 在实际开发时可以针对于不能环境创建不同的namespace空间。 默认空间不能删除!
- 创建其他命名空间
- 每个命名空间都有一个唯一id,这个id是读取配置时指定空间的唯一标识
java
#告诉从哪个命名空间获取配置
spring.cloud.nacos.config.namespace=7e0db002-bd5c-4f24-a003-83e23cba8d30
-
在配置列表查看空间
-
在指定空间下载创建配置文件
-
项目中使用命名空间指定配置
-
测试配置
nacos持久化
- nacos 持久化
持久化:管理的配置信息持久化
注意: 默认nacos存在配置信息持久化, 默认的持化方式为内数据库debery
缺点: 无法友好的展示数据
官方建议: 在生产情况下推荐将配置存入mysql数据
注意: nacos到目前为止仅仅支持mysql- 将nacos持久化到mysql中 还没装mysql数据库
a. 在linux系统安装mysql数据库服务 安装mysql版本要求: 5.6.5+
vi /etc/yum.repos.d/mysql-community.repo
粘贴以下内容到源文件中
java
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
yum install mysql-community-server -y 3. systemctl start mysqld 启动mysql (防火墙关闭)
systemctl status mysqld
systemctl stop firewalld
- 获取临时密码 grep 'temporary password' /var/log/mysqld.log 5. 修改root用户密码 mysqladmin -u root -p password 回车 输入原始密码 在输入新的密码 6. 使用root用户以及修改之后密码登录到mysql
mysql -uroot -p'Root!Q2w' 7. 开启mysql远程连接权限
grant all privileges on *.* to 'root'@'%' identified by 'Root!Q2w' with grant option;
*.*
标示为 所有数据库.所有数据表, 也可指定具体数据库,具体数据表 databasename.datablename'root'@'%' 表示任何远程主机root账号, %可替换成具体主机地址,例如 192.168.232.2, 只允许 192.168.232.2, 以root账号远程访问。 'youpassword' root远程访问密码, 例如设置 123456 , 则以 root 123456 账号密码访问
flush privileges;
8. 如果nacos持久化到mysql数据库a. 创建一个数据库nacos, 编码一定:UTF-8
b. 在nacos库中执行 nacos-mysql.sql c. 修改nacos配置文件持久化信息到mysql中
vim application.properties
e. 关闭nacos
kill -9 1268
或
./shutdown.sh
f. tail -f logs/nacos.log
- 说明
- 在0.7版本之前,在单机模式时nacos使用嵌入式数据库(derby)实现数据的存储,不方便观察数据存储的基本情况。
0. 7版本增加了支持mysql数据源能力,具体的操作步骤:- 安装数据库,版本要求:5.6.5+
- 初始化mysql数据库,数据库初始化文件:nacos-mysql.sql
- 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
- 安装mysql数据库5.6.5+以上版本(略)
-
添加官方的yum源创建并编辑mysql-community.repo文件
vi /etc/yum.repos.d/mysql-community.repo
-
粘贴以下内容到源文件中
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=repo.mysql.com/yum/mysql-5...
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
-
安装mysql
yum install mysql-community-server -y
-
启动mysql数据库
systemctl start mysqld
-
修改mysql数据库密码
grep 'temporary password' /var/log/mysqld.log
mysqladmin -u root -p password 回车 输入原始密码 在输入新的密码
-
登录mysql
mysql -uroot -p'Root!Q2w'
-
修改远程连接
grant all privileges on . to 'root'@'%' identified by 'Root!Q2w' with grant option;
flush privileges;
- 修改配置文件
java
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
&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user=root
db.password=Root!Q2w
nacos集群搭建
集群 cluster :
同一种软件服务的多个节点对一个系统提供服务称之为这个软件服务集群 tomcat集群 mysql集群 redis集群 es集群...
集群解决问题:
- 并发访问压力
- 单节点故障问题
域名解析就是ip地址的别名
- 集群规划
nacos01 192.168.175.128:8811
nacos02 192.168.175.128:8812
nacos03 192.168.175.128:8813mysql 192.168.175.128:3306
nginx 192.168.175.128:8999
2. 搭建nacos集群注意事项
a. 数据持久化必须配置为mysql持久化
b. 要求在一个机器启动时当前虚拟机内存不能少于3G
3. 搭建nacos集群
a . 准备3个nacos节点并连接mysql数据库
cp -r nacos nacos01
cp -r nacos nacos02
cp -r nacos nacos03
b . 重新初始化mysql数据
rm -rf nacos/data/
注意:数据库中不能存在原始数据
重新导入sql文件 c . 修改nacos conf目录中cluster.conf文件添加所有集群节点vim nacos01/conf/cluster.conf
将修改后nacos复制三份
4. 修改nacos各自端口号
ls nacos01/conf
vim nacos01/conf/application.properties
vim nacos02/conf/application.properties
vim nacos03/conf/application.properties
5. 启动nacos 启动nacos
./nacos01/bin/startup.sh
./nacos02/bin/startup.sh
./nacos03/bin/startup.sh
tail -f nacos01/logs/nacos.log
tail -f nacos02/logs/nacos.log
tail -f nacos03/logs/nacos.log
查看jps
http://192.168.175.128:8845/nacos/
192.168.175.128:8811
192.168.175.128:8812
192.168.175.128:8813
配置中即使写多个地址也始终用第一个
nacos集群搭建成功
http://192.168.175.128:8811/nacos
http://192.168.175.128:8822/nacos
http://192.168.175.128:8833/nacos
nginx
通过sftp将nginx上传到Linux 安装必要依赖
yum install -y gcc pcre-devel zlib-devel
解压nginx tar -zxvf nginx-1.11.1.tar.gz
指定安装位置 ./configure --prefix=/usr/nginx
make && make install
在usr目录下查看nginx 启动ngnix
- 进入sbin目录 ./nginx
- 关闭nginx服务 ./nginx -s stop
- 查看 ps aux|grep nginx 查看nginx是否成功:ps aux|grep nginx
默认监听端口为: 80端口 http://192.168.175.128:80
查看nginx是否成功:ps aux|grep nginx
关闭nginx服务
./nginx -s stop
配置nginx (要反向代理的话要进行配置)
vim nginx.conf
a.加入如下配置:
java
upstream nacos-servers {
server 192.168.175.128:8811;
server 192.168.175.128:8822;
server 192.168.175.128:8833;
}
b.修改
java
location / {
proxy_pass http://nacos-servers/;
}
启动
进入sbin目录 ./nginx
关闭nginx服务 ./nginx -s stop
加载配置启动 ./nginx -c /usr/nginx/conf/nginx.conf
查看 ps aux|grep nginx 效果:
不需要写端口号了
现在的nginx就是一个代理服务器,再向它发请求时,它会根据默认的负载均衡在3个节点里选一个对应的节点。
引用 编程不良人