Consul功能简介

栏目: 后端 · 发布时间: 6年前

内容简介:Consul 是 HashiCorp 公司的一个用于实现分布式系统的服务发现与配置工具。Consul内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案。由于出现得晚些,Consul具有功能完善、部署简单、使用方便等特点。Consul由Go语言开发,因此也继承了Go语言跨平台,易安装的特点。可以在其官网这里以Windows平台为例,我这里下载的是64位版本,解压后就一个exe程序,直接以如下命令启动:

Consul 是 HashiCorp 公司的一个用于实现分布式系统的服务发现与配置工具。Consul内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案。由于出现得晚些,Consul具有功能完善、部署简单、使用方便等特点。

安装consul:

Consul由 Go 语言开发,因此也继承了Go语言跨平台,易安装的特点。可以在其官网 https://www.consul.io/downloads.html 下载,各个平台的安装包都提供了。基本解压就可以使用。

这里以Windows平台为例,我这里下载的是64位版本,解压后就一个exe程序,直接以如下命令启动:

consul agent -dev

这里有两个参数: agent表面启动了一个服务实例, -dev则是以快速开发的方式启动这个实例。这个参数包含了大多数常用的功能,可以比较方便我们演示后面的功能,但它不对服务进行序列化,因此是不能应用于生产环境的。

启动后,可以看到如下提示信息:

> consul agent dev
==> Starting Consul agent .. .
==> Consul agent running !
Version : 'v1.4.0'
Node ID : 'e59c9885-c8df-608a-f870-dab9078f5c0d'
Node name : 'Develop-PC1'
Datacenter : 'dc1' ( Segment : '<all>' )
Server : true ( Bootstrap : false )
Client Addr : [ 127.0.0.1 ] ( HTTP : 8500 , HTTPS : -1 , gRPC : 8502 , DNS : 8600 )
Cluster Addr : 127.0.0.1 ( LAN : 8301 , WAN : 8302 )
Encrypt : Gossip : false , TLS - Outgoing : false , TLS - Incoming : false

Web界面:

Consul自带一个界面美观,功能强大的,开箱即用的Web界面。通过该界面我们可以查看所有的服务以及节点,查看所有的健康监测及其当前的状态,以及读取和设置键/值数据。

该界面被映射到/ui上,和HTTP API使用相同的端口。默认就是http://localhost:8500/ui。

Consul功能简介

如果你要在其它机器上访问该Web界面,可以加上-client参数指定绑定的IP。

consul agent - dev - bind = 192.168.2.210 - client 0.0.0.0

静态配置服务

consul支持配置文件的方式静态配置服务,首先我们定义一个json格式的配置文件:

{

"service"

: {

    
"name" : "web"

,

    
"tags"

: [

    

"rails"

    

],

"port" :

80

    

}

}

配置文件主要指定的是服务名称,地址,端口等信息。

然后用-config-dir指定配置文件目录启动consul,consul会自动加载该目录下的所有json文件,每个文件作为一个静态配置服务。

> consul agent - dev - bind = 192.168.0.211 - config - dir ./services

==> Starting Consul agent ...
==> Consul agent running !
...
2018 / 12 / 05 11 : 43 : 23 [DEBUG] agent: Node info in sync
2018 / 12 / 05 11 : 43 : 23 [DEBUG] agent: Service "web" in sync
2018 / 12 / 05 11 : 43 : 23 [DEBUG] agent: Node info in sync
2018 / 12 / 05 11 : 43 : 25 [DEBUG] agent: Skipping remote check "serfHealth" since it is managed automatically
2018 / 12 / 05 11 : 43 : 25 [DEBUG] agent: Service "web" in sync
2018 / 12 / 05 11 : 43 : 25 [DEBUG] agent: Node info in sync

从输出信息中可以看到名为"web"的服务已经同步进来。

也可以在web界面上看到该服务:

Consul功能简介

动态注册服务

除了静态配置外,使用的最多的还是服务主动注册的方案。consul提供了一系列rest接口使得我们可以方便的注册自己的服务。

创建服务

{

"ID" : "redis1"

,

     "Name" : "redis"

,

     "Tags"

: [

    
"primary"

,

    

"v1"

],

"Address" : "127.0.0.1"

,

     "Port" : 8000

,

     "EnableTagOverride" : false

,

     "Check"

: {

    
"DeregisterCriticalServiceAfter" : "90m"

,

    
"Script" : "/usr/local/bin/check_redis.py"

,

    
"HTTP" : "http://localhost:5000/health"

,

    
"Interval" :

"10s"

    

}

}

删除服务

  • 接口地址:http://localhost:8500/v1/agent/service/ deregister/redis1

  • 操作方式:PUT

查询指服务信息

查看服务的健康状态

  • 接口地址: http://localhost:8500/v1/catalog/service/ web?passing

  • 操作方式: GET

更多接口

更多API使用可参考: https://www.consul.io/api/index.html

集群搭建

consul的集群拓扑架构如下图所示:

Consul功能简介

它主要具有如下两种状态的节点:

Server:有完整功能的代理,这些功能包括参与Raft选举,维护集群状态,响应RPC查询,与其他数据中心交互WAN gossip和转发查询给leader或者远程数据中心。

Client:一个Client是一个转发所有RPC到server的代理。这个client是相对无状态的。client唯一执行的后台活动是加入LAN gossip池。这有一个最低的资源开销并且仅消耗少量的网络带宽。

consul的集群搭建本身涉及的内容比较多,具体可参看文章 Consul 集群部署 。本文这里就介绍一个最简单的拓扑情况:1server + nclient的场景。

启动Server:

启动Server的指令一般如下:

consul agent - data - dir = . / data - node = node0 - bind = 192.168.0.211 - datacenter = dc1 - ui - client = 0.0.0.0 - server - bootstrap - expect 1

这里用到了不少参数,这里就简单的介绍下:

  • -data-dir=./data 必须 ,指定数据文件存储路径

  • -node=node0 必须 ,指定了节点的名称,该名称在整个网络中必须唯一。

  • -bind=192.168.0.211 多Ip地址机器上必须,指定了绑定的Ip地址

  • -datacenter=dc1 可选,指定了所属的数据中心,默认为dc1

  • -ui 可选,是否启用web服务器

  • -client=0.0.0.0 可选,指定了可以访问的客户端范围,默认是127.0.0.1

  • -server 必须 ,表明了该节点是server节点

  • -bootstrap-expect 1 可选,

有了上述知识后,在最简单的场景下,一般可以简化为如下形式:

consul agent - data - dir . / data - node = node0 - bind = 192.168.0.211 - ui - server

启动Client:

启动Client的指令一般如下:

consul agent - data - dir = . / data - node = node1 - bind = 192.168.0.210 - datacenter = dc1 - ui - client = 0.0.0.0 - join 192.168.0.211

同样,基于前面的介绍,我们也可以把启动客户端指令简化如下:

consul agent - data - dir =./ data - node = node1 - bind = 192.168.0.210 - ui - join 192.168.0.211

相比启动Server的指令,少了一个-server,表明它是一个客户端agent,同是,多了一个-join 192.168.0.211,表明了它需要连接到那个server。这个参数也可以不配置,通过命令行consul join 192.168.0.211手动加入。

启动了client后,就可以通过consul members指令查看成员了:

> consul members
Node Address Status Type Build Protocol DC Segment
node0 192.168.0.211 : 8301 alive server 1.4.0 2 dc1 < all >
node1 192.168.0.210 : 8301 alive client 1.4.0 2 dc1 < default >

也可以通过Http接口查看:

http://localhost:8500/v1/catalog/nodes

[
{
"ID" : "4314607d-629c-24a0-9e6c-d787efebe8c9" ,
         "Node" : "node0" ,
         "Address" : "192.168.0.211" ,
         "Datacenter" : "dc1" ,
         "TaggedAddresses" : {
             "lan" : "192.168.0.211" ,
             "wan" : "192.168.0.211"
        },
         "Meta" : {
             "consul-network-segment" : ""
        },
         "CreateIndex" : 5 ,
         "ModifyIndex" : 6
    },
    {
         "ID" : "0a59426a-1723-6389-8681-0a16b54965e4" ,
         "Node" : "node1" ,
         "Address" : "192.168.0.210" ,
         "Datacenter" : "dc1" ,
         "TaggedAddresses" : {
             "lan" : "192.168.0.210" ,
             "wan" : "192.168.0.210"
        },
         "Meta" : {
             "consul-network-segment" : ""
        },
         "CreateIndex" : 456 ,
         "ModifyIndex" : 457
    }
]

同样,也可以在web界面查看:

Consul功能简介


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

密码朋克

密码朋克

[澳] 朱利安·阿桑奇 / Gavroche / 中信出版社 / 2017-10 / 42.00元

互联网已经在世界各地掀起了革命,然而全面的打击也正在展开。随着整个社会向互联网迁移,大规模监控计划也正在向全球部署。我们的文明已经来到一个十字路口。道路的一边通往一个承诺“弱者要隐私,强 者要透明”的未来,而另一边则通往一个极权的互联网,在那里,全人类的权力被转移给不受问责的间谍机构综合体及其跨国公司盟友。 密码朋克是一群倡导大规模使用强密码术以保护我们的基本自由免遭攻击的活动家。维基解密的......一起来看看 《密码朋克》 这本书的介绍吧!

MD5 加密
MD5 加密

MD5 加密工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具