美文网首页
SpringCloudAlibaba服务治理-Nacos

SpringCloudAlibaba服务治理-Nacos

作者: 枫之沫翊 | 来源:发表于2020-10-21 15:20 被阅读0次

    Nacos简介

    Nacos是SpringCloudAlibaba的一个组件,主要提供服务注册发现和配置管理等服务,等效于注册中心+配置中心

    Nacos安装

    从官网下载Nacos-1.2.0,解压后直接运行bin目录下的startup.cmd,命令运行成功后直接访问http://localhost:8848/nacos

    image.png
    默认的账户名和密码都是nacos

    Nacos作为注册中心

    1.引入依赖
    pom.xml

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

    2.在启动类上添加@EnableDiscoveryClient注解

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProviderApplication.class,args);
        }
    }
    

    3.配置yml
    application.yml

    server:
      port: 8001
    spring:
      application:
        name: sword-provider
      cloud:
        nacos:
          discovery:
            # 添加nacos的注册地址
            server-addr: 127.0.0.1:8848
    

    启动服务,刷新nacos页面


    image.png

    可以看到nacos服务列表中我们的微服务已经注册上去了

    Nacos支持AP模式和CP模式的切换

    AP:高可用和分区容忍性,如果不需要存储服务级别的信息,且服务实例都是通过nacos-client端注册,并且能够保持心跳的上报,那么选择AP模式
    CP:强一致性和分区容忍性,如果需要在服务级别编辑和存储配置信息,那么CP是必须的,K8s服务和DNS服务适用于CP模式,该模式下注册实例之前必须先注册服务,如果服务不存在则报错
    使用命令切换并启动nacos

    curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
    

    Nacos作为配置中心

    1.在pom.xml中添加依赖

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

    2.在resource文件夹下创建bootstrap.yml
    原因:在项目初始化时,先要从配置中心拉取配置才能保证程序正常启动,而SpringBoot中的配置文件是有加载顺序的,bootstrap先于application
    bootstrap.yml

    server:
      port: 8001
    spring:
      application:
        name: sword-provider
      cloud:
        nacos:
          discovery:
            # 作为服务注册中心地址
            server-addr: 127.0.0.1:8848
          config:
            # 作为服务配置中心地址
            server-addr: 127.0.0.1:8848
            # 指定文件的扩展名为yaml
            file-extension: yaml
    

    3.在application.yml中指定配置环境
    application.yml

    # 指定配置的环境
    spring:
      profiles:
        active: dev
    

    4.启动类配置

    @SpringBootApplication
    @EnableDiscoveryClient
    public class ProviderApplication {
        public static void main(String[] args) {
            SpringApplication.run(ProviderApplication.class,args);
        }
    }
    

    5.在naco的可视化界面中进行相关配置
    dataId配置规则:

    ${pring.application.name}-${spring.profiles.active}.${file-extension}
    

    参考如上规则,需要配置的文件名为sword-provider-dev.yaml,配置如下


    image.png

    点击提交即可
    6.测试,我们可以在Controller中写一个方法来测试配置是否准确
    其实服务能够启动成功,就说明配置应该就没有什么问题了,这里来测试能否获取到nacos中配置文件的值
    ProviderController .java

        @Value("${info.name}")
        private String info;
        @GetMapping("info")
        public String getInfo(){
            return info;
        }
    

    访问接口http://localhost:8001/provider/info,得到如下结果

    image.png
    7.服务配置的动态刷新
    在上面一步中,我们已经能够获取到远程配置的值,但是此时如果更改了远程配置中的值,我们获取到的还是原来的值,说明当前情况下,我们无法获取到更新的配置,此时可以利用SpringCloud的@RefreshScope来实现配置自动更新
    @RestController
    @RequestMapping("provider")
    @RefreshScope
    public class ProviderController {
        @Value("${info.name}")
        private String info;
        @GetMapping("info")
        public String getInfo(){
            return info;
        }
    }
    

    重启服务后在nacos可视化配置界面更新info.name的值,再次访问接口,就能够及时获取到更新


    image.png

    Nacos中配置中心的命名空间、Group、和Data Id之间的关系

    • NameSpace:NameSpace默认的命名空间是public,主要用作开发环境之间的隔离,比如现在有三个环境:开发、测试、生产,那么就可以创建三个命名空间
    • Group:默认为DEFAULT_GROUP,可以把同一生产环境的不同微服务划分到一个组
    • Data Id:指向具体的配置名称
    • 归属应用:指定该配置归属于哪一个应用

    通过NameSpace、Group、Data Id查找配置文件

    1.在nacos配置中新增一个名为test的命名空间
    2.然后在test命名空间下创建yaml配置,并且同时指定group

    image.png
    bootstrap.yml
    server:
      port: 8001
    spring:
      application:
        name: sword-provider
      cloud:
        nacos:
          discovery:
            # 作为服务注册中心地址
            server-addr: 127.0.0.1:8848
          config:
            # 作为服务配置中心地址
            server-addr: 127.0.0.1:8848
            # 指定文件的扩展名为yaml
            file-extension: yaml
            # 指定命名空间
            namespace: 9f6bb237-906c-4fbe-8698-4af61c973951
            # 指定组名
            group: TEST_GROUP
    

    application.yml

    # 指定配置的环境
    spring:
      profiles:
        active: test
    

    再次启动服务,通过接口可以查看到对应的配置信息

    Nacos集群和持久化配置

    Nacos使用嵌入式数据库实现数据存储,但支持mysql的集中存储,在生产过程中常使用nacos集群部署,来保证nacos的高可用

    环境准备

    Nginx集群+Nacos集群+Mysql主从(生产)
    这里主要演示Nacos集群的搭建,所以就不再演示Nginx集群和Mysql主从搭建了

    搭建Nginx

    参考Nginx-主备集群搭建

    搭建Mysql

    参考Mysql-主从复制

    搭建Nacos集群

    1.下载安装nacos

    cd /opt
    # 下载
    wget https://github.com/alibaba/nacos/releases/download/1.3.0/nacos-server-1.3.0.tar.gz
    # 解压
    tar -xvf nacos-server-1.3.0.tar.gz
    

    2.mysql配置
    去nacos/conf目录下找到nacos提供的nacos-mysql.sql文件
    去mysql中执行sql脚本,完成相应的库表创建

    3.application.properties配置(切换数据库)

    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
    db.user=root
    db.password=root
    

    4.nacos集群配置
    最好先配置主机的hostname

    vi /etc/hostname
    

    编辑nacos/conf目录下的cluster.conf文件

    192.168.10.251 8845
    192.168.10.251 8846
    192.168.10.251 8847
    

    5.编辑启动脚本,使其可以根据不同的端口启动
    进入到到nacos/bin目录下,编辑startup.sh,添加条件

    image.png
    调整内存大小
    image.png
    启动时设置端口
    image.png
    启动时通过-q参数指定端口
    ./startup.sh -q 8845
    ./startup.sh -q 8846
    ./startup.sh -q 8847
    

    6.nginx负载均衡配置

    image.png
    更改完成后重启nginx
    访问:http://192.168.10.251:8848/nacos/#/login
    image.png
    能够访问,说明Nacos集群搭建成功

    相关文章

      网友评论

          本文标题:SpringCloudAlibaba服务治理-Nacos

          本文链接:https://www.haomeiwen.com/subject/ttrwpktx.html