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

Nacos的集群搭建 和 服务配置中心的 使用

程序员文章站 2022-07-15 08:59:01
...

1. Nacos集群部署模式架构

Nacos的集群搭建 和 服务配置中心的 使用

Nacos的集群搭建 和 服务配置中心的 使用

在这里我们 搭建三台nacos作为nacos服务集群,一台nginx作反向代理,以及一台mysql作为集中式存储

Nacos的集群搭建 和 服务配置中心的 使用

2.搭建Nacos集群

在这里使用的是一台centos7 作为服务器

首先下载nacos linux版本,在这里我们用的是1.1.4版本

官方下载

Nacos的集群搭建 和 服务配置中心的 使用

​ 下载完解压即可

运行环境
Nacos的集群搭建 和 服务配置中心的 使用


注意!!!!! 记得把我们所用到的端口开放,虚拟机的话直接关闭防火墙也可以


2.1 配置mysql

mysql的安装 这里就不赘述了,如果未安装,自行百度。

思考一个问题,我们的三台nacos搭建的集群怎么保证数据都是一致的?

​ 没台nacos都连接一个自己的数据库?添加数据时,每个数据库都添加数据?

​ 假设此时一台nacos挂掉了,数据就无法写进他的数据库,那么数据还一致吗?

这样做,答案肯定是不一致的,好在nacos早就为我们处理好了这些可能遇到的问题,那就是上面我们提到的使用mysql集群作为集中式存储(在这里我们就使用一台mysql),此时我们的nacos集群的数据交给mysql集群即可,nacos暂时只支持Mysql数据库作为集中式存储

2.1.1Nacos 配置mysql为数据源

进入解压完的nacos 会看到这样的目录结构

Nacos的集群搭建 和 服务配置中心的 使用

我们进入conf文件夹 修改 application.properties

在下面添加 我们的mysql配置

Nacos的集群搭建 和 服务配置中心的 使用

db.url.0配置

db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai

注意 db.url中的数据库名称一定要为nacos_config

保存退出

2.1.2恢复nacos_config数据库

此时我们再conf目录下发现有个 nacos-mysql.sqlSQL脚本,这个就是我们需要恢复进我们mysql数据库的sql脚本,记住数据库名一定要为nacos_config

为什么?

我们来查看这个脚本

Nacos的集群搭建 和 服务配置中心的 使用

在sql文件中,已经给我们提示了,所以我们老老实实的按照要求来取数据库的名

下面的表名不用管,因为你恢复完数据库后发现 这张表已经存在了

2.2创建集群配置

在conf目录下,我们会看到一个cluster.conf.example文件

我们复制 一份并且重命名为 cluster.conf

因为集群环境,nacos读取的是cluster.conf文件

修改cluster.conf

Nacos的集群搭建 和 服务配置中心的 使用

在这里我们的三台nacos 端口分别是3333 4444 5555

前面不能填写127.0.0.1

前面填写的是你的hostname,在linux下输入hostname -i即可查看

Nacos的集群搭建 和 服务配置中心的 使用

2.3修改启动脚本

找到 nacos的bin目录

Nacos的集群搭建 和 服务配置中心的 使用

因为默认不支持 不同端口 同时启动(默认8848端口)

我们需要修改启动脚本,可以做到不同端口同时启动

修改 startup.sh(修改两处)

修改前1

Nacos的集群搭建 和 服务配置中心的 使用

修改后1

Nacos的集群搭建 和 服务配置中心的 使用

修改前2

Nacos的集群搭建 和 服务配置中心的 使用

修改后2

Nacos的集群搭建 和 服务配置中心的 使用

保存退出

2.4 启动集群

我们为了观察每次启动日志中的信息,我们新建复制xshell(在这里我使用的是xshell连接的centos7)会话,

找到nacos目录下的logs目录

输入命令tail -f start.out

此时,我们可以在新建的会话中观察到nacos启动时的日志

接下来我们启动 3333端口的nacos,在我们第一个会话窗口中,找到nacos的bin目录,输入命令./startup.sh -p 3333

观察两侧变化

Nacos的集群搭建 和 服务配置中心的 使用

此时我们的3333端口nacos 就启动成功了

如果没有成功可以看下上面的配置那一步配错了

我们可以访问 这个端口的nacos测试下效果

在这里我的ip为 192.168.1.103, 所以访问 http://192.168.1.103:3333/nacos/

Nacos的集群搭建 和 服务配置中心的 使用

看到这个界面表示我们的3333端口nacos创建成功

那么4444 和 5555端口也一样

分别输入命令 ./startup.sh -p 4444 ./startup.sh -p 5555 即可

等待我我们监视的日志提示成功 浏览器访问4444 5555的nacos成功 就ok啦

如果此时报错,有可能是内存分配不足,如果是在虚拟机跑的nacos 可以先关闭虚拟机,然后调大内存,我的虚拟机设置的内存是2G

此时,我们再思考一个问题:

集群搭建完毕了,但是我们的服务访问nacos时 需要根据每台nacos实例的ip来访问,这样做合理吗?

​ 答案当然是不合理,既然做了集群,我们当然要做到负载均衡

​ 所以,此时我们就可以使用nginx负载均衡啦~

2.5 配置Nginx

进入我们的nginx文件夹,找到conf文件夹中的nginx.conf文件,接下来我们就拿它开刀~

修改nginx.conf

Nacos的集群搭建 和 服务配置中心的 使用

(至于nginx负载均衡为什么这么写,学过nginx肯定知道,如果不明白就先翻阅下资料,在这里就不赘述了)

可以看到这里我们配的端口是 1111

如此,我们的nginx负载均衡搭建完毕!

接下来就是见证奇迹的时刻了,我们首先启动nginx

进入nginx的sbin目录,执行命令./nginx

在这里我的centos7 IP为 192.168.1.103

所以访问 http://192.168.1.103:1111/nacos/ 即可

Nacos的集群搭建 和 服务配置中心的 使用

看到如上页面,还不能完全确定我们搭建的nacos集群完全无误,我们登陆nacos控制台,账号密码默认都是nacos

Nacos的集群搭建 和 服务配置中心的 使用

如此,我们的nacos集群搭建正式结束~!

Nacos集群搭建好了,如何创建配置文件,其他微服务如何实时获取配置信息呢??

3.创建Nacos配置文件

Nacos的集群搭建 和 服务配置中心的 使用

这是我们的配置文件存放的地方,

我们思考两个问题:

Nacos的集群搭建 和 服务配置中心的 使用

那么我们得注意下Nacos的控制台界面了,

Nacos的集群搭建 和 服务配置中心的 使用

Nacos的集群搭建 和 服务配置中心的 使用

Nacos的集群搭建 和 服务配置中心的 使用

Namespace+group+data ID三者关系?为什么这么设计?

Nacos的集群搭建 和 服务配置中心的 使用

Nacos的集群搭建 和 服务配置中心的 使用

接下来创建我们的配置文件了,

我们假设 namespace分为 dev(开发) test(测试)

创建命名空间

Nacos的集群搭建 和 服务配置中心的 使用

此时呢,在每个namespace下存在DEV_GROUPPROD_GROUP 两个组

Nacos的集群搭建 和 服务配置中心的 使用

选择dev命名空间,点➕号创建配置文件

Nacos的集群搭建 和 服务配置中心的 使用

Nacos的集群搭建 和 服务配置中心的 使用

配置文件文件的Data-id会在下面创建服务时讲解

此时我们再创建test命名空间的 PORD_GROUP分组的配置文件

Nacos的集群搭建 和 服务配置中心的 使用

Nacos的集群搭建 和 服务配置中心的 使用

4.创建 nacos-config-client 服务

4.1 搭建项目基础

pom

在这里springcloud-alibaba使用的是2.1.0.RELEASE版本,spring-boot使用的是2.2.2.RELEASE版本

<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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

yml

特别注意 在这里我们会创建两个配置文件bootstrap.ymlapplication.yml

Nacos的集群搭建 和 服务配置中心的 使用

bootstrap.yml的优先级高于 application.yml

所以一般bootstrap.yml用来获取配置中心的数据,而application.yml配置的是该服务自己的数据

bootstrap配置

# nacos配置
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.1.103:1111 #Nacos服务注册中心地址
      config:
        server-addr: 192.168.1.103:1111 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        namespace: 16575f36-b379-4a45-9a5d-fdd87a02631e  #命名空间唯一标识符
        group: DEV_GROUP

application.yml配置

spring:
  profiles:
    active: dev  #加载配置文件的环境,这就是我们的Data-id 服务名后面跟的dev 两者相互对应

Data-id 的组成

${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
nacos-config-client-dev.yaml

主启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

/**
 * @author Xkuna
 * @date 2020/8/14 15:37.
 */
@SpringBootApplication
@EnableDiscoveryClient
public class NacosConfigClientMain3377 {
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args) ;
    }
}

4.2 创建controller

注意添加 @RefreshScope才能保证服务不重启,配置实时刷新

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author Xkuna
 * @date 2020/8/14 15:39.
 */
@RestController
@RefreshScope
public class ConfigController {
    @Value("${info}")
    private String version ;

    @GetMapping("/getConfig")
    public String getConfig() {
        return version ;
    }
}

4.3 启动

查看Nacos控制台

Nacos的集群搭建 和 服务配置中心的 使用

访问 http://localhost:3377/getConfig

Nacos的集群搭建 和 服务配置中心的 使用

成功获取到 配置

此时我们不重启服务,修改下配置文件

Nacos的集群搭建 和 服务配置中心的 使用

Nacos的集群搭建 和 服务配置中心的 使用

version修改为2,我们重新访问 http://localhost:3377/getConfig

Nacos的集群搭建 和 服务配置中心的 使用

发现配置实时刷新了,一切ok~~

此时如果想获取我们test 命名空间的PROD_GROUP组的nacos-config-client-info.yaml

  1. 修改bootstrap.yml 修改namespace 唯一标识符,修改grop为PROD_GROUP

  2. 修改application.yml

    spring:
      profiles:
        active: info
    

我们再次访问 http://localhost:3377/getConfig

Nacos的集群搭建 和 服务配置中心的 使用

成功!

到这里,Nacos集群搭建以及服务实时获取配置文件 就完成了~~ ????

5. Linux版本的Nacos单机版启动注意事项

Nacos的Windows版本和 Nacos版本单机版启动是有区别的

  1. windows版本启动默认单机版 直接启动即可 端口默认8848

  2. linux版本启动默认是集群启动,自动读取Nacos目录下conf目录中的cluster.conf文件,默认这个文件不存在,所以会文件找不到的错误,如果想单机启动,输入命令./startup.sh -m standalone 即可, 端口默认8848

6.结束语

Nacos的使用上来看,搭建和配置相比Eureka,Hystrix 以及 springcloud-config和Bus 更加的方便

默默的说一句:Ali NB!!! ????????

Nacos服务注册在这里????:Nacos服务注册