欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二、Nacos做配置中心与集群搭建

程序员文章站 2022-03-23 16:24:09
...

一、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>

2、yml配置

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

bootstrap配置:

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      config:
        server-addr: 192.168.241.135:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置

application配置:

spring:
  profiles:
    active: dev

3、主启动类

@SpringBootApplication
@EnableDiscoveryClient//服务发现
public class NacosClient3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosClient3377.class,args);
    }
}

4、业务类

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

    @GetMapping("info")
    public String getConfigInfo() {
        return configInfo;
    }
}
通过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项的值

Nacos中新增配置

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

二、Nacos做配置中心与集群搭建

2、查看

二、Nacos做配置中心与集群搭建

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

二、Nacos做配置中心与集群搭建

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

二、Nacos做配置中心与集群搭建

3、分类配置

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

1、命名空间

二、Nacos做配置中心与集群搭建

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

二、Nacos做配置中心与集群搭建

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

二、Nacos做配置中心与集群搭建

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

spring:
  profiles:
  # active: dev
    active: test

3、访问接口测试

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

二、Nacos做配置中心与集群搭建

5、分类配置之Group方案

1、在Nacos上新建一个Group

二、Nacos做配置中心与集群搭建

二、Nacos做配置中心与集群搭建

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

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

spring:
  profiles:
  # active: dev
    active: test

4、启动测试

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

二、Nacos做配置中心与集群搭建

6、分组配置之Namespace方案

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

二、Nacos做配置中心与集群搭建

2、回到服务列表查看

二、Nacos做配置中心与集群搭建

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

二、Nacos做配置中心与集群搭建

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值

5、启动测试

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

二、Nacos做配置中心与集群搭建

六、Nocal集群和持久化配置

1、概述

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

二、Nacos做配置中心与集群搭建

  • 因此开源的时候推荐用户把所有服务列表放到一个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;

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

3、重启nacos

# 进入bin目录下
cd /usr/local/program/nacos/bin
# 停止nacos
./shutdown.sh
# 启动单机nacos
./startup.sh -m standalone

4、访问nacos

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

二、Nacos做配置中心与集群搭建

4、配置集群

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

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

cd /usr/local/program/nacos/conf/

二、Nacos做配置中心与集群搭建

2、复制出cluster.conf

cp cluster.conf.example cluster.conf

二、Nacos做配置中心与集群搭建

3、查看主机的ip地址

hostname -i

二、Nacos做配置中心与集群搭建

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

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

二、Nacos做配置中心与集群搭建

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

二、Nacos做配置中心与集群搭建

修改传参:

二、Nacos做配置中心与集群搭建

添加端口号:

二、Nacos做配置中心与集群搭建

保存并退出

5、启动nacos集群

# 分别启动8847/8848/8849
./startup.sh -p 8847
./startup.sh -p 8848
./startup.sh -p 8849

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

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

二、Nacos做配置中心与集群搭建

解决:
1、查看JVM设置

二、Nacos做配置中心与集群搭建

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

二、Nacos做配置中心与集群搭建

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

二、Nacos做配置中心与集群搭建

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

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

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

二、Nacos做配置中心与集群搭建

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

8、启动成功测试

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

二、Nacos做配置中心与集群搭建

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

二、Nacos做配置中心与集群搭建

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

二、Nacos做配置中心与集群搭建

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: '*'

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

二、Nacos做配置中心与集群搭建

10、配置流程总结

二、Nacos做配置中心与集群搭建

说明:9002作为微服务提供者,然后一个微服务找到nginx,后面几个集群不管,9002只认1111端口号。再由nginx进行转发(可能是转发到8847、8848、8849),最终的数据都会写入MySQL中。