特性
1)服务注册
Consul维护了一个包含所有节点和服务以及它们当前健康状态的注册列表。这方便了操作人员或运营商可以及时了解掌握当前环境状态,应用情况以及自动化运维工具通过HTTP协议的API与动态基础设施交互。
![r1 r1]()
2)基于DNS的服务查找接口
Consul可以使用内置DNS服务器进行服务发现。这简化了现有应用程序的集成,因为几乎所有的应用程序都支持使用DNS来解析IP地址。使用DNS替代静态IP地址可以使服务非常轻松地做到弹性伸缩及故障转移。
$ dig web-frontend.service.consul. ANY
; <<>> DiG 9.8.3-P1 <<>> web-frontend.service.consul. ANY
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29981
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;web-frontend.service.consul. IN ANY
;; ANSWER SECTION:
web-frontend.service.consul. 0 IN A 10.0.3.83
web-frontend.service.consul. 0 IN A 10.0.1.109
3)基于HTTP协议的服务查找接口
Consul 提供了一套用来查询服务注册表中的节点,服务以及它们健康状况的HTTP API。这套API提供了阻塞时查询,以及对任何状态变化的长轮训。这允许自动化工具对服务注册或运行状况更改行为做出反应,以便及时更改配置或路由流量。
curl http://localhost:8500/v1/internal/ui/nodes?dc=dc1
[
{
"ID": "8b6d6270-a267-6b6a-fb64-7b9bd2761d63",
"Node": "localhost",
"Address": "127.0.0.1",
"TaggedAddresses": {
"lan": "127.0.0.1",
"wan": "127.0.0.1"
},
"Meta": {
"consul-network-segment": ""
},
"Services": [
{
"ID": "consul",
"Service": "consul",
"Tags": null,
"Address": "",
"Meta": {
"raft_version": "3",
"serf_protocol_current": "2",
"serf_protocol_max": "5",
"serf_protocol_min": "1",
"version": "1.6.1"
},
"Port": 8300,
"Weights": {
"Passing": 1,
"Warning": 1
},
"EnableTagOverride": false,
"Proxy": {
"MeshGateway": {}
},
"Connect": {},
"CreateIndex": 9,
"ModifyIndex": 9
}
],
"Checks": [
{
"Node": "localhost",
"CheckID": "serfHealth",
"Name": "Serf Health Status",
"Status": "passing",
"Notes": "",
"Output": "Agent alive and reachable",
"ServiceID": "",
"ServiceName": "",
"ServiceTags": null,
"Definition": {},
"CreateIndex": 9,
"ModifyIndex": 9
}
]
}
]
4)多数据中心(这是zk和etcd不具备的)
Consul 天然支持多数据中心且不需要复杂的配置。这允许在其他数据中心查找服务并在本地访问。预查询高级特性实现了自动故障转移到其他数据中心。
curl http://localhost:8500/v1/catalog/datacenters
[
"DC1",
"DC2"
]
5)健康检查
健康检查配合服务发现可以防止将请求路由到不健康的服务,并能使服务轻松提供断路器功能。
![r1 r1]()