consul基础


一 consul介绍

官方文档:https://www.consul.io/docs/intro

Consul 是一种服务网格解决方案,提供具有服务发现、配置和分段功能的全功能控制平面。这些功能中的每一个都可以根据需要单独使用,也可以一起使用以构建完整的服务网格。Consul 需要一个数据平面并支持代理和本地集成模型。Consul 附带一个简单的内置代理,因此一切都可以开箱即用,而且还支持 3rd 方代理集成,例如 Envoy。

基于golang开发的开源工具,主要面向分布式,服务化的系统听服务注册、服务发现和配置管理的功能。

二 consul特点

  • 服务发现:Consul 的客户端可以注册一个服务,例如 apimysql,其他客户端可以使用 Consul 来发现给定服务的提供者。使用 DNS 或 HTTP,应用程序可以轻松找到它们所依赖的服务。

  • 健康检查:Consul 客户端可以提供任意数量的健康检查,要么与给定的服务相关联(“网络服务器是否返回 200 OK”),要么与本地节点(“内存利用率是否低于 90%”)相关联。操作员可以使用此信息来监视集群健康状况,并且服务发现组件可以使用它来将流量从不健康的主机路由出去。

  • KV 存储:应用程序可以将 Consul 的分层键/值存储用于多种目的,包括动态配置、功能标记、协调、领导选举等。简单的 HTTP API 使其易于使用。

  • 安全服务通信:Consul 可以为服务生成和分发 TLS 证书,以建立相互的 TLS 连接。 目的可用于定义允许哪些服务进行通信。可以通过实时更改意图轻松管理服务分段,而不是使用复杂的网络拓扑和静态防火墙规则。

  • 多数据中心:Consul 支持开箱即用的多个数据中心。这意味着 Consul 的用户不必担心构建额外的抽象层以扩展到多个区域。

三 consul架构

  • 首先,我们可以看到有两个数据中心,分别标记为“一”和“二”。Consul 对多个数据中心有一流的支持,并希望这是常见的情况。
  • 在每个数据中心内,我们混合了客户端和服务器。预计将有三到五台服务器。这在故障情况下的可用性和性能之间取得了平衡,因为随着更多机器的加入,共识变得越来越慢。但是,客户端数量没有限制,它们可以轻松扩展到数千或数万。
  • 数据中心中的所有代理都参与 gossip protocol.。这意味着有一个gossip pool 包含给定数据中心的所有代理。这有几个目的:首先,不需要使用服务器地址配置客户端;发现是自动完成的。其次,检测代理故障的工作不是放在服务器上而是分布式的。这使得故障检测比简单的心跳方案更具可扩展性。它还为节点提供故障检测;如果代理不可访问,则节点可能遇到故障。第三,它用作消息传递层,以在发生领导者选举等重要事件时进行通知。
  • 每个数据中心中的服务器都是单个 Raft 对等集的一部分。这意味着他们一起工作来选举一个领导者,一个有额外职责的选定服务器。领导者负责处理所有查询和交易。作为共识协议的一部分,交易还必须复制到所有对等点。由于这个要求,当一个非领导服务器收到一个 RPC 请求时,它会将它转发给集群领导。
  • 服务器代理还作为 WAN 八卦池的一部分运行。该池与 LAN 池不同,因为它针对 Internet 的更高延迟进行了优化,并且预计仅包含其他 Consul 服务器代理。这个池的目的是允许数据中心以低接触的方式发现彼此。使新数据中心上线就像加入现有的 WAN 八卦池一样简单。因为服务器都在这个池中运行,所以它也支持跨数据中心请求。当服务器收到对不同数据中心的请求时,它会将其转发到正确数据中心中的随机服务器。然后该服务器可以转发给本地领导。
  • 这导致数据中心之间的耦合非常低,但由于故障检测、连接缓存和多路复用,跨数据中心请求相对快速和可靠。
  • 通常,不同的 Consul 数据中心之间不会复制数据。当对另一个数据中心中的资源发出请求时,本地 Consul 服务器会将 RPC 请求转发到该资源的远程 Consul 服务器并返回结果。如果远程数据中心不可用,那么这些资源也将不可用,但这不会影响本地数据中心。在某些特殊情况下,可以复制有限的数据子集,例如使用 Consul 的内置 ACL 复制功能,或使用consul-replicate等外部工具。
  • 在某些地方,客户端代理可能会缓存来自服务器的数据,以使其在本地可用以提高性能和可靠性。示例包括连接证书和意图,它们允许客户端代理对入站连接请求做出本地决策,而无需往返服务器。一些 API 端点还支持可选的结果缓存。这有助于提高可靠性,因为即使与服务器的连接中断或服务器暂时不可用,本地代理也可以继续响应某些查询,如服务发现或缓存中的连接授权。

四 端口列表

Use Default Ports
DNS:DNS 服务器(TCP 和 UDP) 8600
HTTP:HTTP API(仅限 TCP) 8500
HTTPS:HTTPS API 禁用 (8501) *
gRPC:gRPC API 禁用 (8502) *
LAN Serf:Serf LAN 端口(TCP 和 UDP) 8301
Wan Serf:Serf WAN 端口(TCP 和 UDP) 8302
服务器:服务器 RPC 地址(仅限 TCP) 8300
Sidecar Proxy Min:用于自动分配的 sidecar 服务注册的最小端口号。 21000
Sidecar Proxy Max:用于自动分配的 sidecar 服务注册的包含最大端口号。 21255

ForHTTPSgRPC表中指定的端口是推荐的。