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接口使得我们可以方便的注册自己的服务。
创建服务
-
接口地址:http://localhost:8500/v1/agent/service/register
-
操作方式: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
查询指服务信息
-
接口地址: http://localhost:8500/v1/catalog/service/web
-
操作方式: 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界面查看:
收拾到此这篇关于windows下搭建consul集群的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。