Consul
2021-02-26 14:44:52 阿炯

Consul 是一个支持多数据中心分布式高可用的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发,基于 MPLv2.0 的协议进行授权使用,Consul 支持健康检查,并允许 HTTP 和 DNS 协议调用 API 存储键值对。部署起来非常容易,只需要极少的可执行程序和配置文件,具有绿色、轻量级的特点,可横向扩展的用于实现分布式系统的服务发现与配置。采用 Raft 算法保证一致性,使用 GOSSIP 协议管理成员和广播消息,并且支持 ACL 访问控制。


另外提一下,命令行的虚拟机管理软件 vgrant 也是该公司开发的产品。

特性:
服务发现: Consul提供了通过DNS或者HTTP接口的方式来注册服务和发现服务。一些外部的服务通过Consul很容易的找到它所依赖的服务。
健康检测: Consul的Client提供了健康检查的机制,可以通过用来避免流量被转发到有故障的服务上。
Key/Value存储: 应用程序可以根据自己的需要使用Consul提供的Key/Value存储。Consul提供了简单易用的HTTP接口,结合其他工具可以实现动态配置、功能标记、领袖选举等等功能。
多数据中心: Consul支持开箱即用的多数据中心. 这意味着用户不需要担心需要建立额外的抽象层让业务扩展到多个区域。


架构



Consul Cluster由部署和运行了Consul Agent的节点组成。在Cluster中有两种角色:Server和 Client。

Server和Client的角色和Consul Cluster上运行的应用服务无关, 是基于Consul层面的一种角色划分.

Consul Server: 用于维护Consul Cluster的状态信息。 官方建议是: 至少要运行3个或者3个以上的Consul Server。 多个server之中需要选举一个leader, 这个选举过程Consul基于Raft协议实现. 多个Server节点上的Consul数据信息保持强一致性。在局域网内与本地客户端通讯,通过广域网与其他数据中心通讯。

Consul Client: 只维护自身的状态, 并将HTTP和DNS接口请求转发给服务端。

角色

client:客户端,无状态,将 HTTP 和 DNS 接口请求转发给局域网内的服务端集群。
server:服务端,保存配置信息,高可用集群,在局域网内与本地客户端通讯,通过广域网与其他数据中心通讯,每个数据中心的 server 数量推荐为 3 个或是 5 个。


Consul是典型的C/S架构,可以运行服务模式或客户模式。每一个数据中心必须有至少一个服务节点,3到5个服务节点最好。非常不建议只运行一个服务节点,因为在节点失效的情况下数据有极大的丢失风险。其它的所有节点都运行在客户端模式下,一个客户节点是非常轻量的注册服务进程,用来处理健康检查,转发请求到服务节点等事务,代理必须在集群中的每个节点上运行。

优势

etcd都使用了Raft算法来保证一致性,比复杂的 Paxos 算法更直接。相比较而言,Zookeeper 采用的是 Paxos。
支持多数据中心,内外网的服务采用不同的端口进行监听。多数据中心集群可以避免单数据中心的单点故障,而其部署则需要考虑网络延迟,分片等情况等。zookeeper 和 etcd 均不提供多数据中心功能的支持。
支持健康检查,etcd 不提供此功能。
支持 http 和 dns 协议接口。zookeeper 的集成较为复杂,etcd 支持 http、grpc 协议。
官方提供web管理界面,etcd 无此功能。


Consul自带一个界面美观,功能强大的,开箱即用的Web界面。通过该界面我们可以查看所有的服务以及节点,查看所有的健康监测及其当前的状态,以及读取和设置键/值数据。该界面被映射到/ui上,和HTTP API使用相同的端口。默认就是http://localhost:8500/ui。

Consul提供RESTful HTTP API,API可对节点、服务、健康检查、配置等执行CRUD操作(CRUD是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete))。

Consul Endpoint主要支持以下接口:
acl – 访问控制列表
agent – Agent控制
catalog – 管理nodes和services
coordinate – 网络协同
event – 用户事件
health – 管理健康监测
kv – K/V存储
query - Prepared Queries
session – 管理会话
status – Consul系统状态


最新版本:1.9.3


官方主页:https://www.consul.io/