使用Nacos实现分布式配置中心(详细说明单机和集群的使用)

什么是Nacos
以下部分解释摘自于Nacos官方文档:

  • Nacos 致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
  • Nacos帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
  • 其实Nacos就是第一代微服务中的注册中心Eureka和Spring Cloud Config配置中心的合体,由国内知名的Bat公司Alibaba团队开源,在第二代微服务Spring Cloud Alibaba中被广泛使用,你完全可以使用nacos替换eureka和config这两个组件。
  • Nacos可以实现分布式服务注册与发现和分布式配置中心动态管理

下载解压后,直接运行startup即可,界面如下:

使用Nacos实现分布式配置中心(详细说明单机和集群的使用)_第1张图片

知识点汇总:

Nacos默认登录地址:http://127.0.0.1:8848/nacos/
Nacos手册地址:https://nacos.io/zh-cn/docs/deployment.html
Dataid名称:默认的情况
服务名称-版本.yml|properties
版本:dev/test/pre/prd等

切换数据源之前的配置都会丢掉,切换成mysql或者本地

@RefreshScope 刷新配置文件

默认加载propertity

nacos中默认嵌入小型数据库

nacos集群到同一个mysql

Nacos、Eureka的区别
相同点:都可以实现分布式服务注册中心
不同点:Nacos从1.0版本开始支持CP/AP混合模式集群,默认AP模式保证服务可用性,CP的形式底层集群使用raft协议(选举)保证数据的一致性。在网络分区产生抖动的情况下不可以继续注册服务。AP模式仅支持服务临时注册的,注册中心列表存在内存里,不是持久化的,在网络分区产生抖动的情况下仍然可以继续注册我们的服务列表。

什么情况下选择AP和CP呢?
必须要求读取的接口的地址保证强一致性的问题,可以采用CP模式。

如何切换模式?
‘192.168.3.100:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’
‘192.168.3.100:8849/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’
‘192.168.3.100:8850/nacos/v1/ns/operator/switches?entry=serverMode&value=CP’
必须使用post

Eureka与Nacos有哪些区别
1、Eureka采用ap模式形式实现注册中心
2、Nacos默认采用Ap模式,在1.0版本之后采用ap+cp模式混合实现注册中心。

Nacos怎么做集群
通过Nginx做反向代理

默认单机模式

注册中心没有必要将数据持久化到数据库中,是持久化到本地的硬盘。
分布式配置中心,默认是将数据持久化到本地嵌入式的数据库,通常会数据源到同一个Mysql中。

Nacos在不同的版本下运行集群是不一样的:
1、在linux版本中运行的时候默认是集群模式,如果需要改为单机启动,需要修改配置
2、在Windows版本中运行的时候默认是单机模式()
3、使用命令startup.cmd -m cluster、startup.cmd -m standlone

配置集群时,nacos,conf目录下的cluster.conf文件中不能使用127.0.0.1,必须使用准确的ip地址,比如192.168.3.100

注册中心:
Eureka、nacos、consul、Zookeeper

1、分布式配置中心有哪些?
(1)spring cloud config的最大缺点是没有界面(常用),需要去github上配置
(2)Nacas属于轻量级配置中心(常用)
(3)携程阿波罗重量级(常用)
(4)disConfig

2、轻量级和重量级的区别?
(1)轻量级:部署、架构设计原理都比较简单,学习成本比较低(小项目)
(2)重量级:部署、架构设计、体量都是非常大,学习成本比较高(大项目)

3、分布式配置中心要有
视图层(门户网站)
服务器(接口)
Mysql服务器
本地应用,启动时去服务器中读取配置,缓存到jvm和本地硬盘中
使用长连接,一旦配置文件发生变化,通知本地应用,

4、怎么判断配置文件是否发生变化?
(1)版本号
(2)MD5
(3)时间戳

5、分布式配置中心实现原理
(1)本地应用读取我们云端分布式配置中心文件(第一次建立长连接)
(2)本地应用读取到配置文件之后,本地jvm和硬盘中都会缓存一份。
(3)本地应用与分布式配置中心服务器端一直保持长连接.
(4)当我们的配置文件发生变化(MD5|版本号)实现区分,将变化结果通知给我们的本地应用及时的刷新我们的配置文件。

6、注意事项
naocs-config不需要在本地配置,如果本地也配置的话,会抛nacos异常,因为它不知道要读本地的还是配置中心上的。

7、bootstrap和application的区别
(1)bootstrap是属于整个应用程序配置,最先被加载,属于整个应用程序的上下文,优先启动
(2)application是属于spring的上下文

8、nacos默认支持三种部署形式
(1)单机-用于测试和单机试用
(2)集群模式-用于生产环境,确保高可用
(3)多集群模式-用于多数据中心场景,跨网络集群比如上海和武汉(很少用)

9、nacos集群
1、使用nginx进行负载均衡
2、集群访问的是同一个Mysql,实现数据共享
 


SpringBoot2.2.0如何使用Nacos-config呢?

Maven配置:


       org.springframework.boot
       spring-boot-starter-parent
       2.2.1.RELEASE
        
 


   	org.springframework.boot
   	spring-boot-starter-web
   	${spring-boot-version}
     


   org.springframework.cloud
   spring-cloud-starter-alibaba-nacos-discovery
   0.9.0.RELEASE



   org.springframework.cloud
   spring-cloud-starter-alibaba-nacos-config
   0.9.0.RELEASE


bootstrap.yml文件配置

spring:
  application:
    ###服务的名称
    name: infosys-nacos-client
  cloud:
    nacos:
      discovery:
        ###nacos注册地址
        server-addr: 192.168.234.135:8848
        enabled: true
      config:
        ###配置中心连接地址
        server-addr: 192.168.234.135:8848
        ###分组
        group: DEFAULT_GROUP
        ###类型
        file-extension: Properties
#  profiles:
#    active: prd


代码调用直接在方法中加上注解即可@RefreshScope:

/**
 * 文件名:NacosClient.java 版权:Company Technologies Co.,Ltd.Copyright YYYY-YYYY,All
 * rights reserved 版权:Copyright (c) 2020, [email protected] All Rights
 * Reserved. 描述:<描述> 修改人:Administrator 修改时间:2020年4月11日 修改内容:<修改内容>
 */
package com.infosys.china;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * <一句话功能简述> <功能详细描述>
 * 
 * @author Jiayoubing
 * @version [版本号,2020年4月11日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
@RestController
@SpringBootApplication
@RefreshScope
public class NacosClient
{
    
    @Value("${infosys.name}")
    private String userName;

    @RequestMapping("/getConfig")
    public String getConfig() {
        return userName;
    }
    
    
    public static void main(String[] args) throws Exception
    {
        SpringApplication.run(NacosClient.class, args);
    }

}

在Nacos中增加配置项如下:

使用Nacos实现分布式配置中心(详细说明单机和集群的使用)_第2张图片

测试效果,可以读取配置文件了!

使用Nacos实现分布式配置中心(详细说明单机和集群的使用)_第3张图片


Nacos集群配置

修改nacos-server-1.2.1\nacos\conf目录下文件

application.properties:配置mysql数据库连接

#*************** Config Module Related Configurations ***************#
### If user MySQL as datasource:
# spring.datasource.platform=mysql

### Count of DB:
# db.num=1

### Connect URL of DB:
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://192.168.234.135:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=jiayoubing

cluster.conf:配置nacos集群

###ip和端口号
192.168.234.135:8848
192.168.234.135:8849
192.168.234.135:8850

配置完毕后登陆任意一台nacos可以看到集群信息

使用Nacos实现分布式配置中心(详细说明单机和集群的使用)_第4张图片

在数据库config_info表中,可以看到保存的配置信息。


client端如何使用呢?

只需要在bootstrap.yml配置如下,把cluster的信息加入即可!

spring:
  application:
    ###服务的名称
    name: infosys-nacos-client
  cloud:
    nacos:
      discovery:
        ###nacos注册地址
        server-addr: 192.168.234.135:8848,192.168.234.135:8849,192.168.234.135:8850
        enabled: true
      config:
        ###配置中心连接地址
        server-addr: 192.168.234.135:8848,192.168.234.135:8849,192.168.234.135:8850
        ###分组
        group: DEFAULT_GROUP
        ###类型
        file-extension: Properties
#  profiles:
#    active: prd


客户端的使用和单机版一样,无非就是把Server-addr都加进去即可


配置Nginx/conf/nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;

	upstream infosysnacosaddr {
		server 192.168.234.135:8848;
		server 192.168.234.135:8849;
		server 192.168.234.135:8850;
	}
    server {
        listen 80;

		server_name infosys.nacos.com;

        location / {
            proxy_pass http://infosysnacosaddr/nacos/;
        }


    }
}

配置host中的域名映射关系

在C:\Windows\System32\drivers\etc\hosts添加一条数据

127.0.0.1 infosys.nacos.com

直接在浏览器访问infosys.nacos.com即可实现Nginx负载均衡

使用Nacos实现分布式配置中心(详细说明单机和集群的使用)_第5张图片

你可能感兴趣的:(使用Nacos实现分布式配置中心(详细说明单机和集群的使用))