Consul Agent

Agent

consul agentconsul的核心流程。agent维护成员信息,注册服务,运行检查,响应查询等。agent必须在consul集群中的每个节点上运行。

任何agent都可以以两种模式之一运行:客户端或服务端。服务端节点承担额外责任,成为共识仲裁一部分。这些节点参与Raft选举,并在发生故障时提供强大的一致性和可用性。服务端节点的负担越大意味着它们通常应该在专用实例上运行 , 它们比客户端节点更耗费资源。客户端节点构成群集的大部分,并且它们非常轻量级,因为它们与服务端节点连接以进行大多数操作,并且维护自己的状态非常少。

运行

可以使用命令行来启动agentagent命令还有很多种可配置项,但是大多数都有合理的默认值。

运行consul agent,会输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@jw-etcd02 ~]# consul agent -data-dir=/tmp/consul
==> Starting Consul agent...
Version: 'v1.5.3'
Node ID: '6e2b563a-c700-9b8d-3e5c-16d65e998543'
Node name: 'jw-etcd02'
Datacenter: 'dc1' (Segment: '')
Server: false (Bootstrap: false)
Client Addr: [127.0.0.1] (HTTP: 8500, HTTPS: -1, gRPC: -1, DNS: 8600)
Cluster Addr: 172.19.19.123 (LAN: 8301, WAN: 8302)
Encrypt: Gossip: false, TLS-Outgoing: false, TLS-Incoming: false, Auto-Encrypt-TLS: false

==> Log data will now stream in as it occurs:

2019/07/30 11:27:15 [INFO] serf: EventMemberJoin: jw-etcd02 172.19.19.123

说明:

  • Node name:这是agent唯一的节点名称。默认情况下。这是机器的主机名,但也可以通过-node对其自定义。
  • Datacenter:这是配置agent程序以运行的数据中心。consul为多个数据中心提供一流的支持; 但是,要高效工作,必须将每个节点配置为报告其数据中心。该-datacenter标志可用于设置数据中心。对于单DC配置,默认为dc1
  • Server:这表示agent是以服务端还是客户端模式运行。服务器节点具有参与共识仲裁,存储群集状态和处理查询的额外负担。另外,服务器可以处于引导模式。多个服务器无法处于引导模式,因为这会使群集处于不一致状态。
  • Client Addr:这是用于agent的客户端接口的地址。这包括HTTP和DNS接口的端口。默认情况下,它仅绑定到localhost。如果更改此地址或端口,则必须-http-addr 在运行命令时指定。
  • Cluster Addr:这是用于群集中的consul agent之间通信的地址和端口集。并非集群中的所有consul agent都必须使用相同的端口,但所有其他节点都必须可以访问此地址。

停止

可以优雅的停止和强制停止。要正常暂停agent,请向进程发送中断信号(通常 Ctrl-C来自终端或正在运行kill -9 consul_pid)。正常退出时,代理首先通知它打算离开集群的集群。这样,其他集群成员就会通知集群该节点已离开。

或者,您可以通过向其发送终止信号来强制终止agent。当力量被杀时,agent即结束。群集的其余部分最终(通常在几秒钟内)检测到节点已经死亡,并通知群集节点已发生故障。

特别重要的是允许服务器节点优雅地离开,以便在服务器离开共识仲裁时对可用性的影响最小。

生命周期

首次启动时,它不知道群集中的任何其他节点。要发现它的对等体,它必须加入群集。这可以通过join命令完成, 也可以通过提供正确的配置来启动时自动加入。一旦节点加入,该信息将被闲置到整个集群,这意味着所有节点最终将彼此了解。如果代理是服务器,则现有服务器将开始复制到新节点。

在网络故障的情况下,其他节点可能无法访问某些节点。在这种情况下,无法访问的节点被标记为失败。无法区分网络故障和代理程序崩溃,因此两种情况的处理方式相同。将节点标记为失败后,将在服务目录中更新此信息。

当节点离开时,它指定了它的意图,并且集群将该节点标记为已离开。与失败的情况不同,节点提供的所有服务都会立即取消注册。如果agent是服务器,则将停止对其的复制。

为了防止死节点的累积,consul将自动从目录中删除死节点。这个过程叫做收割。目前这是在72小时的可配置间隔内完成的(由于其在停电情况下的后果,因此不建议更改收割间隔)。收割类似于离开,导致所有相关服务被取消注册。

/