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

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格式的配置

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界面的配置列表中新建一个配置

在这里插入图片描述

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

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

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

spring:
  profiles:
  # active: dev
    active: test

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值

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;

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数据库

在这里插入图片描述

4、配置集群

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

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

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

在这里插入图片描述

2、复制出cluster.conf

cp cluster.conf.example cluster.conf

在这里插入图片描述

3、查看主机的ip地址

hostname -i

在这里插入图片描述

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

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

在这里插入图片描述

5、编辑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内存溢出。

在这里插入图片描述

解决:
1、查看JVM设置

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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. 修改根目录映射

在这里插入图片描述

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

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

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

在这里插入图片描述

10、配置流程总结

在这里插入图片描述

说明:9002作为微服务提供者,然后一个微服务找到nginx,后面几个集群不管,9002只认1111端口号。再由nginx进行转发(可能是转发到8847、8848、8849),最终的数据都会写入MySQL中。
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
概述: Nacos是一个开源的分布式服务发现、配置管理和服务管理平台,支持多种语言和多种部署模式。本文将介绍如何搭建一个Nacos集群。 环境: - 操作系统:CentOS 7.6 - Nacos版本:1.4.1 - JDK版本:1.8 步骤: 1. 下载Nacos: 进入Nacos的官网(https://github.com/alibaba/nacos/releases),选择需要的版本进行下载。 下载完成后,将压缩包解压到服务器的/opt目录下。 2. 配置数据库: Nacos支持多种数据库,本文使用MySQL作为示例。 创建一个名为nacos的数据库,并创建一个名为nacos_config的表。 CREATE DATABASE nacos DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE nacos; CREATE TABLE `nacos_config` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `data_id` varchar(256) CHARACTER SET utf8mb4 NOT NULL, `group_id` varchar(128) CHARACTER SET utf8mb4 NOT NULL, `content` longtext CHARACTER SET utf8mb4 NOT NULL, `md5` varchar(32) CHARACTER SET utf8mb4 DEFAULT NULL, `gmt_create` datetime NOT NULL, `gmt_modified` datetime NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uk_data_id_group_id` (`data_id`,`group_id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; 3. 修改配置文件: 进入Nacos的conf目录,将nacos-mysql.sql改名为nacos-mysql.sql.tmp。 将nacos-mysql.sql.tmp文件复制一份,改名为nacos-mysql.sql。 修改nacos-mysql.sql文件,将其中的${db_user}、${db_password}和${db_name}替换为自己的MySQL数据库用户名、密码和数据库名。 执行以下命令创建数据表: mysql -h127.0.0.1 -uroot -p < nacos-mysql.sql 进入Nacos的conf目录,修改application.properties文件,将其中的以下配置项修改为自己的配置: spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true db.user=root db.password=123456 4. 启动Nacos: 进入Nacos的bin目录,执行以下命令启动Nacos: sh startup.sh -m standalone Nacos将在默认端口8848启动,可以通过浏览器访问http://127.0.0.1:8848/nacos/查看是否成功启动。 5. 配置集群: 将Nacos的conf目录下的cluster.conf.example文件复制为cluster.conf。 修改cluster.conf文件,将其中的IP地址改为自己的服务器IP地址,多个IP地址以逗号分隔。 例如: 192.168.1.101:8848 192.168.1.102:8848 192.168.1.103:8848 将修改后的cluster.conf文件分别复制到其他Nacos服务器的conf目录下。 6. 启动集群: 在其他Nacos服务器上执行步骤4和5,启动Nacos集群。 执行以下命令查看集群状态: curl -X GET "http://127.0.0.1:8848/nacos/v1/ns/operator/raft/peer?pretty=true" 如果返回的结果中包含多个节点的IP地址,则说明集群搭建成功。 7. 测试: 在Nacos控制台上添加一个配置,例如: Data ID:test Group:DEFAULT_GROUP Content:hello world 然后在其他Nacos服务器上查看该配置是否同步过来。 执行以下命令从其他Nacos服务器获取该配置: curl -X GET "http://192.168.1.103:8848/nacos/v1/cs/configs?dataId=test&group=DEFAULT_GROUP&tenant=&show=all" 如果返回的结果中包含hello world,则说明配置同步成功。 总结: 通过以上步骤,我们成功搭建了一个Nacos集群Nacos集群可以提高服务发现、配置管理和服务管理的可靠性和性能,并且可以支持更多的应用场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值