当前位置:   article > 正文

二、Nacos做配置中心与集群搭建_nacos 配饰中心 集群架构

nacos 配饰中心 集群架构

一、Nacos作为配置中心

1、基础配置

1、新建一个Module

项目名:cloudalibaba-config-nacos-client3377

2、pom配置

<dependencies>
    <!--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>
    <!--web + actuator-->
    <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>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

2、yml配置

需要配置两个yml,Nacos同SpringCloud Config一样,在项目初始化时,要保证先从配置中心进行配置拉取,拉取配置之后,才能保证项目的正常运行。springboot中配置文件的加载是存在优先级顺序的,bootstrap优先级高于application

bootstrap配置:

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.241.135:8848 #服务注册中心地址
      config:
        server-addr: 192.168.241.135:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

application配置:

spring:
  profiles:
    active: dev
  • 1
  • 2
  • 3

3、主启动类

@SpringBootApplication
@EnableDiscoveryClient//服务发现
public class NacosClient3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosClient3377.class,args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

4、业务类

@RefreshScope
@RestController
@RequestMapping("config")
public class NacosClientController {
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("info")
    public String getConfigInfo() {
        return configInfo;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
通过Spring Cloud原生注解@RefreshScope实现配置自动更新

2、在Nacos中添加配置信息

1、官网说明: https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
2、Nacos中的dataid的组成格式与SpringBoot配置文件中的匹配规则
3、说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。
4、在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profiles.active}.${file-extension}
  • prefix: spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active:即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension:为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。
5、最后格式
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
# 就是Nacos管理界面配置列表的Data Id项的值
  • 1
  • 2

Nacos中新增配置

1、在Nacos界面的配置列表中新建一个配置

在这里插入图片描述

2、查看

在这里插入图片描述

3、测试
  • 启动测试前先需要查看nacos客户端-配置管理-配置管理栏目下有没有对应的yaml配置文件后再启动
  • 调用接口:http://localhost:3377/config/info,获取到配置中心配置的值

在这里插入图片描述

  • 修改配置中心配置的值,再次请求,发现能获取到修改后的值,说明nacos自带动态刷新

在这里插入图片描述

3、分类配置

多环境多项目管理,实际开发中一个系统会准备dev开发环境,test测试环境,prod生产环境

1、命名空间

在这里插入图片描述

1、Namespace、Group、Data Id之间的关系
类似package(包名)和类名,最外层的namespace是可以用于区分部署环境的,Group和Data Id逻辑上区分两个目标对象。
2、关系图

在这里插入图片描述

3、说明
  • 默认情况NameSpace是public,Group是DEFAULT_GROUP,Cluster是DEFAULT。
  • Nacos默认的命名空间是public,NameSpace主要用来实现隔离。比如开发有三个环境:开发、测试、生产,我们就可以建三个NameSpace,不同的NameSpace之间是隔离的。
  • Group默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去。
  • Service就是微服务,一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定微服务的一个虚拟划分。比如说为了容灾,将Service微服务分别部署到北京和武汉的机房,这时就可以给武汉的微服务起一个集群名称(WH),给北京的微服务也起一个集群名称(BJ),还可以让同一个机房的微服务互相调用,以提升性能。
  • Instance是每一个微服务的实例。

4、分类配置之Data Id方案

指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置

1、默认空间+默认分组+不同的Data Id,新建一个Data Id

在这里插入图片描述

2、修改application.yml切换为测试环境配置

spring:
  profiles:
  # active: dev
    active: test
  • 1
  • 2
  • 3
  • 4

3、访问接口测试

浏览器输入地址:http://localhost:3377/config/info,能正确加载测试环境配置

在这里插入图片描述

5、分类配置之Group方案

1、在Nacos上新建一个Group

在这里插入图片描述

在这里插入图片描述

2、在bootstrap.yml中配置group

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.241.135:8848 #服务注册中心地址
      config:
        server-addr: 192.168.241.135:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: TEST_GROUP # 分组默认值DEFAULT_GROUP
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3、在application.yml中切换为测试环境配置

spring:
  profiles:
  # active: dev
    active: test
  • 1
  • 2
  • 3
  • 4

4、启动测试

访问接口地址:http://localhost:3377/config/info,能够读取到TESTGROUP组中的配置信息

在这里插入图片描述

6、分组配置之Namespace方案

1、新建一个test的命名空间

在这里插入图片描述

2、回到服务列表查看

在这里插入图片描述

3、配置管理选择test新增一个配置

在这里插入图片描述

4、在bootstrap.yml中配置namespace

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.241.135:8848 #服务注册中心地址
      config:
        server-addr: 192.168.241.135:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: TEST_GROUP # 分组默认值DEFAULT_GROUP
        namespace: a175ca82-3270-4406-99ee-310408e40781 # 命名空间默认值public的命名空间ID值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

5、启动测试

访问接口地址:http://localhost:3377/config/info,能够读取到test命名空间下TESTGROUP组中的配置信息

在这里插入图片描述

二、Nocal集群和持久化配置

1、概述

1、官网说明:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html
2、集群部署架构图

在这里插入图片描述

  • 因此开源的时候推荐用户把所有服务列表放到一个vip下面,然后挂到一个域名下面。
  • http://ip1:port/openAPI 直连ip模式,机器挂则需要修改ip才可以使用。
  • http://VIP:port/openAPI 挂载VIP模式,直连vip即可,下面挂server真实ip,可读性不好。
  • http://nacos.com:port/openAPI 域名 + VIP模式,可读性好,而且换ip方便,推荐模式。
注:Nacos使用嵌入式数据库实现数据的存储,如果启动多个默认配置下的Nacos节点,数据存储是存在一致性的问题的,为了解决这个问题,Nacos采用了集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。

2、Nacos支持三种部署模式

1、单机模式:用于测试和单机试用。
2、集群模式:用于生产环境,确保高可用。
3、多集群模式:用于多数据中心场景。
说明:
单机模式支持MySQL,在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:
  1. 安装数据库,版本要求:5.6.5+
  2. 初始化mysql数据库,数据库初始化文件为nacos-mysql.sql
  3. 修改conf目录下的application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
  4. 再以单机模式启动nacos,nacos所有写嵌入式数据库的数据都写到了mysql

3、derby到mysql切换配置步骤

Nacos默认自带的是嵌入式数据库derby

1、找到nacos-mysql.sql文件

# 进入nacos安装目录下的conf中找到nacos-mysql.sql文件
cd /usr/local/program/nacos/conf
# 登陆mysql
mysql -uroot -p123456
# 新建一个数据库
CREATE DATABASE nacos_config;
# 选中数据库
use nacos_config;
# 执行脚本
source /usr/local/program/nacos/conf/nacos-mysql.sql
# 退出mysql
exit;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

2、application.properties中添加mysql数据源的url、用户名和密码

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://192.168.241.135:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

3、重启nacos

# 进入bin目录下
cd /usr/local/program/nacos/bin
# 停止nacos
./shutdown.sh
# 启动单机nacos
./startup.sh -m standalone
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

4、访问nacos

可以看到是个全新的空记录界面,以前是记录进derby,现在是存储进mysql数据库

在这里插入图片描述

4、配置集群

说明:linux下启动后默认为集群模式,要通过nginx代理才能进到nacos的登录界面。

1、进入conf目录下查看配置文件

cd /usr/local/program/nacos/conf/
  • 1

在这里插入图片描述

2、复制出cluster.conf

cp cluster.conf.example cluster.conf
  • 1

在这里插入图片描述

3、查看主机的ip地址

hostname -i
  • 1

在这里插入图片描述

4、配置cluster.conf文件,配置3台nacos,端口设置不同

vim cluster.conf
  • 1
注:ip地址是通过第三步命令查询出来的,保存并退出

在这里插入图片描述

5、编辑nacos的启动脚本,使它能够接受不同的启动端

在这里插入图片描述

修改传参:

在这里插入图片描述

添加端口号:

在这里插入图片描述

保存并退出

5、启动nacos集群

# 分别启动8847/8848/8849
./startup.sh -p 8847
./startup.sh -p 8848
./startup.sh -p 8849
  • 1
  • 2
  • 3
  • 4

6、发现问题(JVM内存溢出)

出现问题:发现只有8847可以访问,其他都不能访问,查看logs下的启动日志(start.out),发现JVM内存溢出。

在这里插入图片描述

解决:
1、查看JVM设置

在这里插入图片描述

2、调整集群的JVM参数,防止JVM报错

在这里插入图片描述

3、重启集群发现一切正常

在这里插入图片描述

4、查看集群节点启动数
ps -ef|grep nacos|grep -v grep|wc -l
  • 1

7、配置nginx作为负载均衡器

1、前提是要安装好nginx
2、进入nginx安装目录conf文件夹
cd /usr/local/nginx/conf
  • 1
3、修改nginx配置文件nginx.conf
  1. 修改监听端口
  2. 修改根目录映射

在这里插入图片描述

4、进入sbin下启动nginx
./nginx -c /usr/local/nginx/conf/nginx.conf
  • 1

8、启动成功测试

通过nginx进行转发,实现负载均衡
1、访问地址:http://192.168.241.135:1111/nacos/#/login

在这里插入图片描述

2、 新建一个配置进行测试

在这里插入图片描述

3、mysql中config_info表中新增一条数据

在这里插入图片描述

9、测试将服务注册进集群

修改9002服务提供者的配置

1、修改application.yml配置

server:
  port: 9002

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        #server-addr: 192.168.241.135:8848/ #配置Nacos地址
        # 换成nginx的1111端口,做集群
        server-addr: 192.168.241.135:1111

management:
  endpoints:
    web:
      exposure:
        include: '*'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

2、启动测试并查看nacos控制台

在这里插入图片描述

10、配置流程总结

在这里插入图片描述

说明:9002作为微服务提供者,然后一个微服务找到nginx,后面几个集群不管,9002只认1111端口号。再由nginx进行转发(可能是转发到8847、8848、8849),最终的数据都会写入MySQL中。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/589481
推荐阅读
相关标签
  

闽ICP备14008679号