本文主要讲一下Consul中使用最多的术语,然后讲解启动命令背后的故事,为后面搭建Consul集群做准备。AgentConsul集群中后台长时间运行的进程就是代理。代理是通过consul代理启动的。代理可以在客户端或服务器模式下运行。因为集群中的每个节点都必须有一个代理,所以将节点称为客户端或服务器更简单。所有代理都可以有一个DNS或HTTP接口,并负责健康检查和保持服务同步。客户端客户端是将所有RPC请求转发给服务器的代理。客户端是相对无状态的。客户端运行的唯一后台程序是参与局域网的八卦池。此活动具有最小的资源开销,并且仅消耗少量的网络带宽。服务器服务器是具有扩展职责集的代理。扩展的功能包括参与Raft仲裁、维护集群状态、响应RPC请求、与其他数据中心交换WANgossip以及将查询转发到集群领导者或远程数据中心。数据中心是一个私有的、低延迟、高带宽的网络环境。当然,这不包括跨公共网络的通信,但出于我们的目的,单个EC2区域内的多个可用区将被视为单个数据中心的一部分。Consensus共识协议是集群选举领导者的共识协议和交易顺序协议。由于这些事务适用于有限状态机,我们对一致性的定义意味着复制状态机的一致性。Consensus在维基百科上有更详细的描述,后面的文章会讲到Consul的实现。GossipConsul建立在Serf之上,Serf提供了一个完整的Gossip协议,可用于多种用途。Serf提供成员管理、故障检测和事件广播等功能。稍后我们将重点介绍Gossip协议。Gossip涉及随机的节点到节点UDP通信。LANGossip是指一个LANGossip池,其中包含所有位于同一局域网或数据中心的节点。WANGossip是指仅包含服务器的WANGossip池。这些Consul服务器主要分布在不同的数据中心,一般通过互联网或者广域网进行通信。RPC远程过程调用。允许客户端向服务器发出请求的请求/响应模式。与Consul一样,serfserf也是来自Hashicorp的一个开源项目,它实现了一个去中心化的八卦协议,八卦协议定义了一个类似于病毒感染的消息传播过程。一些知名的开源项目,比如这里提到的Docker和Consul,网络管理和服务发现的核心组件都是基于serf实现的,但是背后的serf似乎鲜为人知,一方面是其复杂的理论和不完善的文档令人望而生畏;另一方面,gossip协议固有的弱数据一致性也限制了serf的使用场景。如果你想了解更多,可以在这里阅读:https://www.infoq.cn/article/principle-and-impleme-of-de-centering-system-in-serfhttps://www.serf.io/简介/索引。在html中创建一个数据中心,首先需要创建一个服务器集群。创建服务器的推荐方法是使用-bootstrap-expect选项。此选项是在可用时自动创建和引导的Consul服务器节点的预期数量。为了避免不一致和脑裂情况(多个服务器将其视为领导者的集群),有必要为-bootstrap-expect指定相同的值,或者在所有服务器上根本不指定任何值。只有具有指定值的服务器才会尝试引导集群。假设您正在启动一个包含三个服务节点的集群。可以通过分别提供-bootstrap-expect3标志来启动节点A、节点B和节点C。节点启动后,您可以在服务输出中看到一条警告消息。[WARN]raft:EnableSingleNodedisabled,andnoknownpeers.Abortingelection.警告表明该节点需要2个对等点,但还不知道。下一篇文章将介绍如何通过三点启动一个Consul集群,届时会用到这个命令。继续从启动命令dockerrun\-d\-p8500:8500\-p8600:8600/udp\--name=badger\consulagent-server-ui-node=server-bootstrap-expect=1开始创建Consul节点时选中,bootstrap-expect的值指定为1。这里是一个单节点的Consul集群。因为是实验课,所以这里设置为1。1个节点也是可以的,也可以作为一个服务。生产环境不要这样设置。一个服务器端的Consul节点最多需要6个不同的端口,sh端口才能正常工作。某些端口需要同时使用TCP、UDP或两种协议。在运行Consul之前,您应该确保可以访问以下绑定端口。用途默认端口DNS:DNS服务(TCP或UDP)8600HTTP:HTTP接口(仅TCP)8500HTTPS:HTTPs接口的推荐端口,默认关闭(8501)*gRPC:gRPC接口的推荐端口,默认关闭(8502))*LANSerf:LAN端口(TCP和UDP)8301WanSerf:SerfWAN端口(TCP和UDP)8302Server:服务器RPC地址(仅限TCP)8300SidecarProxyMin:自动分配的sidecar服务注册包含的最小端口号。21000SidecarProxyMax:自动分配的Sidecar服务注册包含的最大端口号。端口21255DNS接口的用途是用来解析DNS查询。HTTPAPI客户端通过HTTPAPI向服务器请求。默认禁用HTTPSAPI(可选),但默认情况下各种工具使用端口8501。gRPCAPI(可选)目前,gRPC仅用于将xDSAPI暴露给Envoy代理。默认关闭,但是8502端口默认被各种工具使用。在-dev模式下默认为8502。SerfLAN用于处理LAN中的gossip协议。所有代理都是必需的。SerfWAN服务器由WAN服务器用于传播到WAN中的其他服务器。从Consul0.8开始,WAN连接泛洪功能需要SerfWAN端口(TCP/UDP)同时监听WAN和LAN接口。RPC服务器用于处理来自其他代理的请求。小结本文主要介绍一些术语和一些后面会用到的启动命令选项,以及Consul会用到的几个端口。了解了这些,方便为后面的文章学习Consul做铺垫。本文转载自微信公众号“码小菜”,可通过以下二维码关注。转载本文请联系码小菜公众号。
