Consul功能简介
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界面查看:

Consul功能简介的更多相关文章
- DYN-B201 Dynamics CRM 云生产力解决方案与功能简介
DYN-B201 Dynamics CRM 云生产力解决方案与功能简介 讲师:王健.林松涛Dynamics CRM 云产品正式落地中国,CRM 与 Azure.O365 深度整合无缝集成,带来无与伦比 ...
- (视频) 《快速创建网站》 2.3 WordPress初始化和功能简介
本文是<快速创建网站>系列的第4篇,如果你还没有看过之前的内容,建议你点击以下目录中的章节先阅读其他内容再回到本文. 访问本系列目录,请点击:http://devopshub.cn/tag ...
- SharePoint 2013 "通知我"功能简介
功能简介 "通知我"主要是在列表或者文档库里面的项目,有添加/删除/修改等操作,发送邮件通知设置的用户的功能:可以针对列表或者文档库设置通知,也可以针对单一项目设置通知功能,是Sh ...
- Beginning SDL 2.0(1) SDL功能简介
原文链接为 http://wiki.libsdl.org/Introduction. 由于近期整理音视频可视化的技术,发现好久不更新的SDL发布了2.0版本,以前也没有过于关注,这里准备尝试下.了解S ...
- HelloX操作系统网络功能简介及使用和开发指南
HelloX网络功能简介及使用和开发指南 HelloX网络功能简介 作为物联网操作系统,网络功能是必备的核心功能之一.按照规划,HelloX实现了两个不同类型的TCP/IP协议栈,一个面向资源受限的嵌 ...
- 部分GDAL工具功能简介
主要转自http://blog.csdn.net/liminlu0314?viewmode=contents 部分GDAL工具功能简介 gdalinfo.exe 显示GDAL支持的各种栅格文件的信息. ...
- 全国天气预报信息数据 API 功能简介与代码调用实战视频
此文章对开放数据接口 API 之「全国天气预报信息数据 API」进行了功能介绍.使用场景介绍以及调用方法的说明,供用户在使用数据接口时参考之用,并对实战开发进行了视频演示. 1. 产品功能 接口开放了 ...
- Hadoop生态圈-Ambari控制台功能简介
Hadoop生态圈-Ambari控制台功能简介 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在经历一系列安装过程之后(部署过HDP后我终于发现为什么大家喜欢用它了,部署比CDH简 ...
- Redis安装和主要功能简介
Redis安装和主要功能简介 Redis(https://redis.io/), 是一个内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 安装Redis 我很少在开发机中直接装各种数 ...
随机推荐
- [转]CSS浏览器兼容问题总结
E6.0,ie7.0与Firefox的CSS兼容性问题1.DOCTYPE 影响 CSS 处理 2.FF: div 设置 margin-left, margin-right 为 auto 时已经居中, ...
- Raid 磁盘阵列
raid 原理与区别 raid0至少2块硬盘.吞吐量大,性能好,同时读写,但损坏一个就完蛋 raid1至少2块硬盘.相当镜像,一个存储,一个备份.安全性比较高.但是性能比0弱 raid5至少3块硬盘. ...
- python中的__call__
如果python中的一个类定义了 __call__ 方法,那么这个类它的实例就可以作为函数调用,也就是实现了 () 运算符,即可调用对象协议 下面是一个简单的例子: class TmpTest: de ...
- 第7月第11天 AVAsset
1. An AVAsset defines the collective properties of the tracks that comprise the asset. (You can acce ...
- linux下搭建我的世界spongeforge 服务器 (海绵端)
以下我用的都是1.10.2版本 且以下用的服务器连接管理软件有WinSCP.Xshell 5 首先,去下载一个MC1.10.2的纯净服务端,这个不会很难,百度一下! 比如我下的文件就叫minecraf ...
- 规则 防火墙 iptables input accept【转】
由于 mangle 这个表格很少被使用,如果将图 9.3-3 的 mangle 拿掉的话,那就容易看的多了: 图 9.3-4.iptables 内建各表格与链的相关性(简图) 透过图 9.3-4 你就 ...
- 消息监听器无法注入bean
问题描述: 在activemq的监听器中,通过注解@Autowired或@Resource注入bean时,获取到的bean为null.调用该bean的方法时会报空指针异常. 问题原因: 当调用bean ...
- yolov2在CUDA8.0+cudnn8.0下安装、训练、检测经历
这次用yolov2做检测时遇到个大坑,折腾了我好几天,特以此文记录之. 一.安装cuda+cudnn 它们的版本必须要匹配,否则训练后检测不出目标! 1.下载cuda8.0.61_375.26_lin ...
- PHP 字符串截取()[]{} 中内容
$str="你好<我>(爱)[北京]{天安门}"; echo f1($str); //返回你好 echo f2($str); //返回我 echo f3($str); ...
- P1270 【“访问”美术馆】
$\large{\text{一千个Oier程序中有一千种树形DP}}$ 思路都差不多的,但是每个人都有自己的状态定义与转移 不妨定义$dp[i][j]$表示,在$i$子树内,偷$j$张画,且不考虑根到 ...