SpringCloud源码探析(三)-Nacos集群搭建与配置管理

1.概述

上一篇文章SpringCloud源码探析(二)-Nacos注册中心分析了nacos单机版的部署以及SpringBoot整合nacos,nacos不仅仅可以作为注册中心,也可以作为配置中心。本文将在上文的基础上,进行nacos集群的搭建,同时展示nacos作为配置中心的使用。

2.集群搭建与配置管理

2.1 集群搭建

本文主要分析在centos7环境下nacos集群的搭建,官方提供的nacos集群图如下:
在这里插入图片描述
它有三个nacos节点,然后一个负载均衡器(SLB)代理三个nacos,通过一个域名暴露对外。本文选择nginx作为负载均衡器,搭建步骤如下:

2.1.1 下载安装包

下载地址如下,根据需要下载指定版本,我这里下载1.4.2版本

在这里插入图片描述

2.1.2 上传下载包到服务器

在这里插入图片描述

2.1.3 解压并修改配置

修改conf文件夹下cluster.conf.example文件名为cluster.conf,并添加所要部署集群的三台机器IP和端口号,如下:
在这里插入图片描述
由于我这里只有一台机器,因此IP是相同的,端口号不同。

2.1.4 配置数据库信息

配置数据库信息是为了方便数据持久化,更好地保持数据一致性。nacos配置文件也可以配置数据库集群信息,由于本机只部署了一台mysql,进入application.properties文件,添加如下配置:

spring.datasource.platform=mysql
#数据库数量,如果是集群配置,就写集群数量
db.num=1
#数据库连接信息,集群可配置多个
db.url.0=jdbc:mysql://124.223.181.153:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=cl123456

2.1.5 启动nacos集群

进入bin文件夹下,直接运行startup.sh文件,默认是以集群方式启动,分别启动nacos,得到如下信息(启动日志在logs文件夹下start.out文件内):
在这里插入图片描述
在这里插入图片描述
集群启动成功之后,在nacos的后台管理页面可以查看节点信息:
在这里插入图片描述

2.1.6 配置nginx反向代理

在nginx中添加如下配置:

#这里配置nacos集群地址
    upstream nacos-cluster {
    
    
      server 127.0.0.1:8848;
      server 127.0.0.1:8849;
      server 127.0.0.1:8850;
    }

    #监听80端口进行转发
    server {
    
    
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /nacos {
    
    
            proxy_pass http://nacos-cluster;
        }
      }

2.1.6 验证代理是否成功

浏览器输入nginx按照的服务器IP+/nacos,出现nacos后台登陆界面,说明代理成功:
在这里插入图片描述

2.1.7 springboot服务注册

服务注册时注册ip端口直接填nginx代理的端口,上述是80端口,可直接配置:

spring.cloud.nacos.discovery.server-addr=http://localhost:80

服务注册成功示意图:
在这里插入图片描述

2.2 配置管理

nacos作为配置中心,能够对一些数据进行热更新,简单来讲就是将一些可变配置交由nacos管理,在代码里进行一些指定注解配置,当可变配置发生变化时,无需重启服务,配置就能自动生效。

2.2.1 springboot整合nacos配置中心

1.引入配置

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

2.在配置文件中添加nacos相关配置(bootstrap.properties、application.properties均可)

#服务名称
spring.application.name=orderservice
spring.profiles.active=dev
#nacos配置中心地址
spring.cloud.nacos.server-addr=http://localhost:80

# nacos需要识别配置文件的类型
spring.cloud.nacos.config.file-extension=properties

3.在nacos新增配置
在nacos新增配置,由nacos管理,配置的命名具有一定规则,一个应用可以包含多个配置集,每个配置集都拥有特殊的含义。
配置文件的data ID一般命名规则为:

s p r i n g . c l o u d . n a c o s . c o n f i g . p r e f i x − {spring.cloud.nacos.config.prefix}- spring.cloud.nacos.config.prefix{spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
prefix:一般是服务名称,比如上述案例中的orderservice;
active:指定激活的配置文件,一般有dev、prod、test等,也就是spring中的spring.profiles.active配置项
extension:配置文件的类型,默认是 properties,可以通过spring.cloud.nacos.config.file-extension配置来指定,nacos识别xml、yaml、txt等。

按照上述规则,在nacos控制台新增的配置文件命名为:orderservice-dev.properties。
4.nacos控制台新建配置
在这里插入图片描述
新建成功之后,可以在列表中查看配置:
在这里插入图片描述
5.编写测试类

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "thread")
public class FreshProperties {
    
    
    private Integer num;
}

@Slf4j
@RestController
@RequestMapping("/order")
public class OrderController {
    
    

    @Autowired
    private FreshProperties properties;

    @GetMapping()
    public Integer get() {
    
    
        return properties.getNum();
    }
}

运行结果如下:
在这里插入图片描述
修改nacos上的thread.num=100,不用重启服务,再次请求返回100,如下所示:
在这里插入图片描述
事实上,还可以通过@RefreshScope注解来直接获取修改的配置,通过将该注解作用在要获取nacos配置的类上,如下所示:

@Slf4j
@RefreshScope
@RestController
@RequestMapping("/order")
public class OrderController {
    
    

    @Value("${thread.num}")
    private Integer threadNum;

    @GetMapping()
    public Integer get() {
    
    
        return threadNum;
    }

}

3.小结

1.nacos如果要保证高可靠性,生产中还是要使用集群,集群之前一般用nginx作负载均衡;
2.nacos作为配置中心,能够实时推送热点数据到服务中,无需重启服务,但是需要按照指定规则来命名配置。

4.参考文献

1.https://www.bilibili.com/video/BV1LQ4y127n4
2.https://juejin.cn/post/7124953993846980639

5.附录

https://gitee.com/Marinc/nacos.git

猜你喜欢

转载自blog.csdn.net/qq_33479841/article/details/129281883