内容简介: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。
如果你要在其它机器上访问该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提供了一系列rest接口使得我们可以方便的注册自己的服务。
创建服务
-
操作方式:PUT
{
"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
查询指服务信息
-
操作方式: GET
查看服务的健康状态
-
接口地址: http://localhost:8500/v1/catalog/service/ web?passing
-
操作方式: GET
更多接口
更多API使用可参考: https://www.consul.io/api/index.html
集群搭建
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界面查看:
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Spring Security的ACL功能简介
- Spring Security的ACL功能简介
- 什么是MongoDB?简介、架构、功能和示例
- Redis5.0 新功能简介
- Google Play新增应用内翻译功能:再也不用担心看不懂英文简介了
- Transformers 简介(上)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
About Face 3
Alan Cooper、Robert Reimann、David Cronin / John Wiley & Sons / 2007-5-15 / GBP 28.99
* The return of the authoritative bestseller includes all new content relevant to the popularization of how About Face maintains its relevance to new Web technologies such as AJAX and mobile platforms......一起来看看 《About Face 3》 这本书的介绍吧!