Consul原理及配置

Consul简介

Consul是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册、服务发现和配置管理的功能。Consul的功能都很实用,其中包括:服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等特性。Consul本身只是一个二进制的可执行文件,所以安装和部署都非常简单,只需要从官网下载后,在执行对应的启动脚本即可。

Consul特性

  • 服务注册/发现
    为什么微服务架构下就需要做服务注册和服务发现呢?微服务的目标就是要将原来大一统的系统架构,拆分成细粒度的按功能职责分成的小系统,这样就会出现很多小的系统,部署的节点也会随之增加。试想一下,如果没有一个统一的服务组件来管理各系统间的列表,微服务架构是很难落地实现的。
    Consul提供的服务注册/发现功能在数据强一致性和分区容错性上都有非常好的保证,但在集群可用性下就会稍微差一些(相比Euerka来说)。

  • 数据强一致性保证
    Consul采用了一致性算法Raft来保证服务列表数据在数据中心中各Server下的强一致性,这样能保证同一个数据中心下不管某一台Server Down了,请求从其他Server中同样也能获取的最新的服务列表数据。数据强一致性带来的副作用是当数据在同步或者Server在选举Leader过程中,会出现集群不可用。

  • 多数据中心
    Consul支持多数据中心(Data Center),多个数据中心之间通过Gossip协议进行数据同步。多数据中心的好处是当某个数据中心出现故障时,其他数据中心可以继续提供服务,提升了可用性。

  • 健康检查
    Consul支持基本硬件资源方面的检查,如:CPU、内存、硬盘等

  • Key/Value存储
    Consul支持Key/Value存储功能,可以将Consul作为配置中心使用,可以将一些公共配置信息配置到Consul,然后通过Consul提供的 HTTP API来获取对应Key的Value。
    Consul原理及配置_第1张图片

调用过程

1、当 Producer 启动的时候,会向 Consul 发送一个 post 请求,告诉 Consul 自己的 IP 和 Port;

2、Consul 接收到 Producer 的注册后,每隔 10s(默认)会向 Producer 发送一个健康检查的请求,检验 Producer 是否健康;

3、当 Consumer 发送 GET 方式请求 /api/address 到 Producer 时,会先从 Consul 中拿到一个存储服务 IP 和 Port 的临时表,从表中拿到 Producer 的 IP 和 Port 后再发送 GET 方式请求 /api/address;

4、该临时表每隔 10s 会更新,只包含有通过了健康检查的 Producer。

Spring Cloud Consul 项目是针对 Consul 的服务治理实现。Consul 是一个分布式高可用的系统,它包含多个组件,但是作为一个整体,在微服务架构中,为我们的基础设施提供服务发现和服务配置的工具。

Consul原理及配置_第2张图片

安装与启动

打开 Consul官网根据不同的操作系统选择最新的 Consul 版本,我们这里以 macOS 操作系统为例。

cd到安装目录输入./consul agent -dev会以开发者模式启动。输入:localhost:8500就可以看到时consul管理界面了。
consul管理界面默认连接为本地机器127.0.0.1,可以在启动时输入:./consul agent -dev -client 0.0.0.0 -ui其它机器也可以访问管理页面。

配置文件

pom文件添加:

	<dependency>
		<groupId>org.springframework.cloudgroupId>
		<artifactId>spring-cloud-starter-consul-discoveryartifactId>
	dependency>

配置文件根据需要添加:


spring:
  application:
    name: consul
  cloud:
    consul:
      #配置consul服务器的host
      host: localhost
      #配置端口
      port: 8500
      config:
        #配置默认文件名
        default-context: ${spring.application.name}
        #是否启用consul配置
        enabled: true
        #配置文件格式
        format: YAML
        #配置基本文件,默认值config
        prefix: config
        #配置文件名,默认data
        data-key: data
      discovery:
        #是否启用服务发现
        enabled: true
        #配置健康检查路径
        health-check-path: /actuator/health
        #配置健康检查时间间隔
        health-check-interval: 15s
        #配置实例id
        instance-id: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
        #配置服务注册
        register: true
        deregister: true
        #表示注册时使用ip而不是hostname
        prefer-ip-address: true
        #表示指定访问服务IP
        ip-address: IP
        #健康检查失败多长时间取消注册
        health-check-critical-timeout: 30s


服务强制下线

PUT请求:ip:8500/v1/agent/service/deregister/服务实例Id(配置文件中instance-id)

不同版本服务实例Id呈现方式不一样!!!

版本一:
Consul原理及配置_第3张图片

版本二:

Consul原理及配置_第4张图片

你可能感兴趣的:(架构)