1. Nacos命名空间分组和DataID三者关系
1.1 名称解释
命名空间(Namespace)
用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
配置分组(Group)
Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。
配置集 ID(Data ID)
Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。
配置集:一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。
三者关系
这三者的关系类似于Java里面的package名和类名,最外层的Namespace是可以用于区分部署环境的,Group和DataID逻辑上区分两个目标对象。
默认情况
namespace=public ,Group=DEFAULT_GROUP,默认Cluster是DEFAULT
具体情况
Nacos默认的命名空间是public,我们就可以利用Namespace来实现隔离,比如我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
Group本身就是分组的意思,它可以把不同的微服务划分到同一个分组里面去。
剩下的就是具体微服务,一个Service可以包含多个Cluster,Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比如说,将一个Service部署在北京和和杭州的机房中,北京机房的Service就可以起名为(BJ),杭州机房中的Service就可以起名为(HZ),这样就可以尽量让同一个机房的微服务互相调用,提升性能。
1.2 切换不同环境
1.2.1 DataID方案
指定spring.profile.active和配置文件中的DataID来是不同环境下读取不同的配置
- 新建命名空间
- 通过spring.profile.active属性就能进行多环境下配置文件的读取
application.yml
spring:
profiles:
active: dev #开发环境
# active: test #测试环境
1.2.2 Group方案
通过切换分组
- 新建Group
- 完成以上配置以后,接下来就需要通过bootstrap+application来配合完成,具体方式:在config下增加一条Group的配置即可,可以配置为DEV_GROUP或TEST_GROUP
bootstrap.yml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #注册中心地址
config:
server-addr: 127.0.0.1:8848 # 配置中心地址
file-extension: yaml # 配置文件后缀
group: TEST_GROUP #分组
application.yml
spring:
profiles:
# active: dev #开发环境
# active: test #测试环境
active: info
- 测试
在TEST_GROUP 下
在DEV_GROUP
1.2.2 NameSpace方案
我们已经把DataID方案和Group方案完成了,然后接下来我们来看一下Namespace(命名空间)方案,默认此方案为public,此方案不能删除,我们现在来新建两个命名空间方案
- 新建dev/test的Namespace
2. 按照域名配置(Namespace+Group+DataId)编写
3. 通过配置bootstrap.yml的namespace来确认使用命名空间
bootstrap.yml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 #注册中心地址
config:
server-addr: 127.0.0.1:8848 # 配置中心地址
file-extension: yaml # 配置文件后缀
group: DEV_GROUP #分组
namespace: 2b3331f5-5841-421d-889e-df33307acdae
application.yml
spring:
profiles:
active: dev #开发环境
# active: test #测试环境
# active: info
- 测试 访问http://localhost:3377/config/info
2.Nacos集群
官网地址:https://nacos.io/zh-cn/docs/deployment.html
2.1 Nacos支持三种部署模式
- 单机模式 - 用于测试和单机试用
- 集群模式 - 用于生产环境,确保高可用
- 多集群模式 - 用于多数据中心场景
图解
预备环境
默认Nacos使用嵌入式数据库实现数据的存储,所以,如果启动多个默认配置下的Nacos节点,数据储存存在一致性问题,为了解决这个问题,Nacos采用了集中存储方式来支持集群化部署,目前仅支持MySql的存储。
- 推荐使用Linux
- 可以使用内部数据源或者外部数据源(推荐使用外部)MySql
2.2 Nacos持久化切换配置
Nacos自带嵌入式数据源derby,每创建一个nacos实列就会有一个derby;当多个nacos节点的时候,就会出现数据一致性问题,所以nacos支持了外部数据源mysql
2.2.1 Nacos默认derby切换Mysql
具体的配置方式可以参考官网:https://nacos.io/zh-cn/docs/deployment.html
- 首先创建好数据库,并使用
CREATE DATABASE nacos_config;
USE nacos_config;
- 导入nacos-mysql.sql
windows在nacos/conf/nacos-mysql.sql
3. 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.100.30:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=UTC
db.user=root
db.password=P@ssw0rd29
注意:一个是url地址需要改,另外数据库的用户和密码也需要更改,同时还有一个是官网上在db.url.0=jdbc:mysql这个属性上少了一个属性为serverTimezone=UTC需要我们手动添加
4. 测试
重启Nacos服务,此时之前所创建的Namespace+Group+DataID将全部消失,因为这些数据是保存在之前Nacos内嵌的derby数据库中,现在使用的是本地的MySql数据库,此时我们可以添加配置测试,在查看数据库nacos_config中的config_info表,此时就会有新添加的配置内容
Nacos集群配置
更改Nacos启动命令配置原理
我们现在知道,想要启动Naocs只需要启动startup.sh命令即可,但是如果启动3个Nacos那?所以如果我们需要启动多个Nacos,其实Nacos本身默认启动就是集群模式。
注意点:如果是linux虚拟机,需要分配至少4g以上内存
具体配置
Linux服务器上MySql数据库配置
- 在Linux系统上执行SQL脚本,具体位置在nacos目录下的conf中,这里的操作和之前是一样的,我们可以直接打开这个文件然后拷贝到数据库中执行,当然也是要创建数据库使用数据库然后在复制脚本内容,执行即可
create database nacos_config;
use nacos_config;
- 修改application.properties配置文件,但是修改之前我们最好做一个备份。
cp application.properties application.properties.init
- 这里的修改和我们之间的在win上的修改是完全一样的,所以我们只要打开这个文件,加上对应的内容即可
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&serverTimezone=UTC
db.user=root
db.password=123456
- 还要注意一点,这个文件中的两个服务的端口号也要对应修改
#*************** Spring Boot Related Configurations ***************#
### Default web context path:
server.servlet.contextPath=/nacos
### Default web server port:
server.port=8888/8868
Linux服务器上Nacos的集群配置cluter.conf
- 这里开始正式配置集群,首先我们要更改cluter.conf这个配置文件,当然我们也需要备份,但是这里它的原始名称为:cluster.conf.example,我们需要把它保留同时复制出一个cluster.conf来进行更改
cp cluster.conf.example cluster.conf
- 具体配置内容,这里我们在配置集群的时候不能直接写127.0.0.1这样,这样分不清楚,所以我们需要知道具体的IP地址,我们可以通过:
ip a #查看具体ip
具体需修改内容,这里注意,我们在修改端口的时候一定要有一定的偏移量,因为Nacos2.0本身新增了占用端口,所以我们在设置端口号的时候注意要避开,不要占用端口,以下是官网截图:
# 格式: ip地址:端口号
192.168.189.129:8848
192.168.189.129:8868
192.168.189.129:8888
启动三个阶段的Nacos测试
当上方配置完成之后,我们此时就可以启动三个节点的Nacos进行测试,启动方式和Win上区别不大:
- 但是要注意一点,因为我们要开放端口测试,所以我们在启动nacos之前,要进行关闭防火墙操作:
// 关闭防火墙服务-但是开启还会自动启动
systemctl stop firewalld
// 彻底关闭-开机不会启动防火墙
systemctl disable firewalld
- 启动三个nacos节点,分别进入到三个Nacos节点的bin目录中进行启动:
sh startup.sh //启动命令
- 启动完成以后,我们可以分别看一下启动日志,防止启动出现问题,启动路径:
- 这里我们可以通过cat命令或者tail -f命令
cat /home/msb/opt/nacos3/logs/start.out
tail -f /home/msb/opt/nacos3/logs/start.out
- 通过浏览器分别访问三个阶段的Nacos,测试是否成功启动
在看到所有服务都启动成功之后,我们通过浏览器访问对应地址,就可以进入到对应节点的Nacos控制台上,然后我们可以查看集群管理,节点列表
Nginx配置
- 我们需要找到Nginx的配置文件,然后做备份
cd /usr/local/nginx
cp nginx.conf nginx.conf.bk
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PElDBsO1-1656642223916)(image-20210929211042606.png)]
- 修改nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
stream {
upstream nacos {
server 192.168.189.129:8848;
server 192.168.189.129:8868;
server 192.168.189.129:8888;
}
server {
listen 81;
proxy_pass nacos;
}
}
测试启动
- 首先进入到Nginx目录下,启动Nginx,同时要带着我们设置过得配置文件启动
cd /usr/local/nginx/sbin
./nginx
- 通过访问Nginx来测试是否能够访问到Nacos,在win系统浏览器网址上输入:
http://192.168.189.129:81/nacos/
- 使用账号密码nacos,nacos成功登录就表示此时已经完成全部配置
添加配置
- 在Nacos平台上添加配置
- 在数据库中检查是否有这一条配置,如果有表示成功添加
配置微服务为Linux版Nacos集群并注册进Nacos
- 我们以9002为例,此时我们要修改application.yaml文件,把之前的Nacos端口换成Nacos集群
server:
port: 9002
spring:
application:
name: nacos-provider
cloud:
nacos:
discovery:
# server-addr: localhost:8848
# 换成nginx的81端口,做集群
server-addr: http://192.168.189.129:81
management:
endpoint:
web:
exponsure:
include: '*'
- 配置完成启动服务,我们就可以在Naocs平台上看见对应的微服务了,此时表示服务注册成功
总结