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逻辑上区分两个目标对象。

nacos 如何指定namespace nacos namespace group_nacos 如何指定namespace


默认情况

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来是不同环境下读取不同的配置

  1. 新建命名空间
  2. 通过spring.profile.active属性就能进行多环境下配置文件的读取

application.yml

spring:
  profiles:
    active: dev #开发环境
#    active: test #测试环境

1.2.2 Group方案

通过切换分组

  1. 新建Group
  2. 完成以上配置以后,接下来就需要通过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
  1. 测试

在TEST_GROUP 下

nacos 如何指定namespace nacos namespace group_java_02

在DEV_GROUP

nacos 如何指定namespace nacos namespace group_数据库_03

1.2.2 NameSpace方案

我们已经把DataID方案和Group方案完成了,然后接下来我们来看一下Namespace(命名空间)方案,默认此方案为public,此方案不能删除,我们现在来新建两个命名空间方案

  1. 新建dev/test的Namespace

nacos 如何指定namespace nacos namespace group_微服务_04


nacos 如何指定namespace nacos namespace group_微服务_05


2. 按照域名配置(Namespace+Group+DataId)编写

nacos 如何指定namespace nacos namespace group_数据库_06


nacos 如何指定namespace nacos namespace group_java_07


nacos 如何指定namespace nacos namespace group_数据库_08


nacos 如何指定namespace nacos namespace group_java_09


3. 通过配置bootstrap.yml的namespace来确认使用命名空间

nacos 如何指定namespace nacos namespace group_数据库_10

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
  1. 测试 访问http://localhost:3377/config/info

2.Nacos集群

官网地址:https://nacos.io/zh-cn/docs/deployment.html

2.1 Nacos支持三种部署模式

  • 单机模式 - 用于测试和单机试用
  • 集群模式 - 用于生产环境,确保高可用
  • 多集群模式 - 用于多数据中心场景
    图解

nacos 如何指定namespace nacos namespace group_Group_11


预备环境

默认Nacos使用嵌入式数据库实现数据的存储,所以,如果启动多个默认配置下的Nacos节点,数据储存存在一致性问题,为了解决这个问题,Nacos采用了集中存储方式来支持集群化部署,目前仅支持MySql的存储。

  1. 推荐使用Linux
  2. 可以使用内部数据源或者外部数据源(推荐使用外部)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

  1. 首先创建好数据库,并使用
CREATE DATABASE nacos_config;
USE nacos_config;
  1. 导入nacos-mysql.sql

windows在nacos/conf/nacos-mysql.sql

nacos 如何指定namespace nacos namespace group_nacos 如何指定namespace_12


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 如何指定namespace nacos namespace group_数据库_13


nacos 如何指定namespace nacos namespace group_数据库_14

Nacos集群配置

更改Nacos启动命令配置原理

我们现在知道,想要启动Naocs只需要启动startup.sh命令即可,但是如果启动3个Nacos那?所以如果我们需要启动多个Nacos,其实Nacos本身默认启动就是集群模式。

注意点:如果是linux虚拟机,需要分配至少4g以上内存

具体配置

Linux服务器上MySql数据库配置

  1. 在Linux系统上执行SQL脚本,具体位置在nacos目录下的conf中,这里的操作和之前是一样的,我们可以直接打开这个文件然后拷贝到数据库中执行,当然也是要创建数据库使用数据库然后在复制脚本内容,执行即可
create database nacos_config;
use nacos_config;

nacos 如何指定namespace nacos namespace group_微服务_15

  1. 修改application.properties配置文件,但是修改之前我们最好做一个备份。
cp application.properties application.properties.init
  1. 这里的修改和我们之间的在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
  1. 还要注意一点,这个文件中的两个服务的端口号也要对应修改
#*************** Spring Boot Related Configurations ***************#
### Default web context path:
server.servlet.contextPath=/nacos
### Default web server port:
server.port=8888/8868

Linux服务器上Nacos的集群配置cluter.conf

  1. 这里开始正式配置集群,首先我们要更改cluter.conf这个配置文件,当然我们也需要备份,但是这里它的原始名称为:cluster.conf.example,我们需要把它保留同时复制出一个cluster.conf来进行更改
cp cluster.conf.example cluster.conf

nacos 如何指定namespace nacos namespace group_nacos 如何指定namespace_16

  1. 具体配置内容,这里我们在配置集群的时候不能直接写127.0.0.1这样,这样分不清楚,所以我们需要知道具体的IP地址,我们可以通过:
ip a #查看具体ip

nacos 如何指定namespace nacos namespace group_Group_17

具体需修改内容,这里注意,我们在修改端口的时候一定要有一定的偏移量,因为Nacos2.0本身新增了占用端口,所以我们在设置端口号的时候注意要避开,不要占用端口,以下是官网截图:

# 格式: ip地址:端口号
192.168.189.129:8848
192.168.189.129:8868
192.168.189.129:8888

启动三个阶段的Nacos测试

当上方配置完成之后,我们此时就可以启动三个节点的Nacos进行测试,启动方式和Win上区别不大:

  1. 但是要注意一点,因为我们要开放端口测试,所以我们在启动nacos之前,要进行关闭防火墙操作:
// 关闭防火墙服务-但是开启还会自动启动
systemctl stop firewalld
// 彻底关闭-开机不会启动防火墙
systemctl disable firewalld
  1. 启动三个nacos节点,分别进入到三个Nacos节点的bin目录中进行启动:

nacos 如何指定namespace nacos namespace group_nacos 如何指定namespace_18

sh startup.sh //启动命令
  1. 启动完成以后,我们可以分别看一下启动日志,防止启动出现问题,启动路径:

nacos 如何指定namespace nacos namespace group_Group_19

  1. 这里我们可以通过cat命令或者tail -f命令
cat /home/msb/opt/nacos3/logs/start.out
tail -f /home/msb/opt/nacos3/logs/start.out

nacos 如何指定namespace nacos namespace group_java_20

  1. 通过浏览器分别访问三个阶段的Nacos,测试是否成功启动

在看到所有服务都启动成功之后,我们通过浏览器访问对应地址,就可以进入到对应节点的Nacos控制台上,然后我们可以查看集群管理,节点列表

nacos 如何指定namespace nacos namespace group_nacos 如何指定namespace_21

Nginx配置

  1. 我们需要找到Nginx的配置文件,然后做备份
cd /usr/local/nginx
cp nginx.conf nginx.conf.bk

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PElDBsO1-1656642223916)(image-20210929211042606.png)]

  1. 修改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;
     }
}

测试启动

  1. 首先进入到Nginx目录下,启动Nginx,同时要带着我们设置过得配置文件启动
cd /usr/local/nginx/sbin
./nginx
  1. 通过访问Nginx来测试是否能够访问到Nacos,在win系统浏览器网址上输入:
http://192.168.189.129:81/nacos/

nacos 如何指定namespace nacos namespace group_微服务_22

  1. 使用账号密码nacos,nacos成功登录就表示此时已经完成全部配置

nacos 如何指定namespace nacos namespace group_Group_23

添加配置

  1. 在Nacos平台上添加配置
  2. nacos 如何指定namespace nacos namespace group_java_24

  3. 在数据库中检查是否有这一条配置,如果有表示成功添加
  4. nacos 如何指定namespace nacos namespace group_java_25

配置微服务为Linux版Nacos集群并注册进Nacos

  1. 我们以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: '*'
  1. 配置完成启动服务,我们就可以在Naocs平台上看见对应的微服务了,此时表示服务注册成功

nacos 如何指定namespace nacos namespace group_nacos 如何指定namespace_26

总结

nacos 如何指定namespace nacos namespace group_java_27