Consul简介
Consul 是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其它分布式服务注册与发现的方案相比,Consul的方案更“一站式”,内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其它工具(比如ZooKeeper等) ,使用起来也较为简单。
Consul 使用Go语言编写,因此具有天然可移植性(支持Linux,Windows和Mac OS);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。
Consul特性
- 服务发现: Consul 的客户端可以注册服务,其他客户端可以使用 Consul 发现给定服务的提供者。使用DNS 或 HTTP,应用程序可以轻松找到它们所依赖的服务。
- 健康检查: Consul客户端可以提供任意数量的健康检查,可以与给定的服务关联(“web服务器是否返回200 OK”),也可以与本地节点关联(“内存利用率是否低于90%”)。操作人员可以使用此信息监视集群运行状况,服务发现组件也可以使用此信息将通信流量路由到远离不健康主机的地方,支持多种方式,HTTP, TCP、 Docker, Shell脚本定制化监控。
- KV 存储: 应用程序可以使用Consul的分级 key/value 存储来实现各种目的,包括动态配置、特性标记、协调、leader选举等等。简单的HTTP API使其易于使用。
- 安全服务通信: Consul可以生成和分发服务的TLS证书,以建立相互的TLS连接。可以使用意图来定义允许哪些服务进行通信。可以很容易地管理服务细分,目的可以实时更改,而不是使用复杂的网络拓扑和静态防火墙规则。
- 多数据中心: Consul 支持开箱即用的多个数据中心。这意味着 Consul 的用户不必担心构建额外的抽象层以扩展到多个区域。
- Raft 算法: 使用Raft算法完成一致性,Raft将一致性问题分解成了三个独立的部分:leader选举、日志复制、安全性。
- 自带web管理界面: 这一点相比于zookeeper注册中心要好一点,zookeeper是没有自带管理界面的。通过管理界面可以清晰的看到注册了多少个服务,以及在管理界面还可以使用服务配置功能。
基本架构
Consul Cluster(集群)有Server 和Client两种角色。不管是Server还是Client,统称为Agent(代理)。
- Client是相对无状态的,只负责转发RPC到Server资源开销很少。
- Server是一个有一组扩展功能的代理,这些功能包括参与Raft选举、维护集群状态、响应RPC查询、与其他数据中心交互WAN Gossip和转发查询给leader或者远程数据中心。
KV存储功能
修改/增加
consul kv put key value
Consul在所有kv操作的时候可以带token,类似于口令,方法如下
consul kv put [-token=xxxx.xxxx.xxx] key value
查询
查询指定key对应的值
consul kv get webserver
查询有哪些keys(仅显示根节点的key)
consul kv get -keys
查询前缀含有webserver的所有根节点有哪些key(前缀匹配)
consul kv get -keys webserver
递归获取含有webserver的所有根节点下的key
consul kv get -recurse webserver
查询webserver根key下包含哪些子key
consul kv get -keys webserver/
删除
consul kv delete key
备份和还原
备份数据
consul snapshot save [-token=xxx] consul.snap
还原数据
consul snapshot restore [-token=xxx] consul.snap
导入和导出
导出配置
consul kv export -http-addr=127.0.0.1:8500 [-token="xxx"] > consul-kv.json
导入配置
consul kv import -http-addr=127.0.0.1:8500 [-token="xxx"] @consul-kv.json