Consul 用于实现分布式的服务发现和配置,内置了服务注册与发现框架,分布一致性协议实现,健康检查,Key/Value 存储,多数据中心方案,不再依赖其他工具。使用相对比较简单。
Consul 介绍
Consul是一个分布式高可用的系统。相比其他的服务发现方案,Consul 的服务发现方案更”一站式”,内置服务发现与注册、分布式一致性协议实现、健康检查、Key/Value 存储,多数据中心方案。使用 Go 语言编写,因此,可编译成多个平台(Linux,Windows,Mac OS)
Consul 特性
- 服务发现
- 健康检查
- Key/Value存储
- 多数据中心
- 支持多个数据中心, 上图有两个数据中心
- 每个数据中心一般有 N个服务器,服务器数目要在可用性和性能上进行平衡,客户端数量没有限制。分布在不同的物理机上。
- 一个集群中的所有节点都添加到 gossip protocol(通过这个协议进行成员管理和信息广播)中
- 数据中心的所有服务端节点组成一个raft集合, 他们会选举出一个leader,leader服务所有的请求和事务, 如果非leader收到请求,把所有的改变同步(复制)给非leader.
- 所有数据中心的服务器组成了一个 WAN gossip pool,他存在目的就是使数据中心可以相互交流,增加一个数据中心就是加入一个 WAN gossip pool,
- 当一个服务端节点收到其他数据中心的请求, 会转发给对应数据中心的服务端。
Consul 安装
https://www.consul.io/downloads.html
不需要安装,解压后直接运行。
我这里下载的版本是 consul-1.5.2
Consul Agent
运行 consul agent1
2# 开发模式运行,-node 指定节点名
consul agent -node consul.node.1 -dev
观察日志输出
Web 管理界面
浏览器打开:http://127.0.0.1:8500
查看集群成员
1 | consul members |
会输出我们自己的节点,运行的地址,健康状态,自己在集群中的角色,版本信息1
2Node Address Status Type Build Protocol DC Segment
consul.node.1 127.0.0.1:8301 alive server 1.5.2 2 dc1 <all>
HTTP 查询节点
1 | curl 127.0.0.1:8500/v1/catalog/nodes |
输出1
[{"ID":"d68bd1c6-65dd-0a7e-97b0-c7dc409f9c91","Node":"consul.node.1","Address":"127.0.0.1","Datacenter":"dc1","TaggedAddresses":{"lan":"127.0.0.1","wan":"127.0.0.1"},"Meta":{"consul-network-segment":""},"CreateIndex":9,"ModifyIndex":10}]
DNS 查询节点
1 | dig @127.0.0.1 -p 8600 consul.node.1 |
服务注册
假如现在有一个 8088 的服务需要注册到 consul 中,我们先来定义一下服务
服务定义
服务定义最好是根据服务的所属业务线,业务模块,项目,以及服务属性来划分,例如,我们定义如下服务:1
2
3
4
5
6
7{
"service": {
"name": "video.user.info",
"tags": ["go"],
"port": 8088
}
}
新建配置文件 /etc/consul.d/news.user.info.json,将服务信息写入
重启 agent1
consul agent -config-dir /etc/consul.d -node consul.node.1 -dev
通过读取配置文件的服务定义信息,将服务 video.user.info 注册到了 consul 中
服务发现
通过 http 方式来发现服务1
2# video.user.info 是服务名
curl http://127.0.0.1:8500/v1/catalog/service/video.user.info
返回服务信息
总结
本文简单介绍了 Consul 的安装和使用,总体看 Consul 的安装和使用都比较简单。