【Consul】Consul实践指导-Agent

x33g5p2x  于2021-12-20 转载在 其他  
字(2.3k)|赞(0)|评价(0)|浏览(247)

     ConsulAgent是Consul的核心进程,Agent的工作是维护成员关系信息、注册服务、健康检查、响应查询等等。Consul集群的每一个节点都必须运行agent进程。

     Agent有两种模式:client或server。

     Server要参与consensusquorum,当遇到故障情况时,这些节点通过Raft提供强一致性和强有效性,在Server节点上的较高负载意味着它们应该运行在专属的实例——它们比客户端节点更为资源密集型。在整个集群中,绝大部分都为Client节点。

     client把所有的RPCs转发到server端,是相对无状态的。唯一在后台运行的时client端执行了LAN gossip pool,只消耗极少的资源和网络带宽。

1.1.1 Agent运行

     Agent通过执行“consul agent”启动。这个命令是阻塞的,除非主动终止。Agent命令需要很多配置参数,但大多数都有默认值。

$ consul agent -data-dir=/tmp/consul
==> Starting Consul agent...
==> Starting Consul agent RPC...
==> Consul agent running!
       Node name: 'Armons-MacBook-Air'
      Datacenter: 'dc1'
          Server: false (bootstrap: false)
     Client Addr: 127.0.0.1 (HTTP: 8500, DNS: 8600, RPC: 8400)
    Cluster Addr: 192.168.1.43 (LAN: 8301, WAN: 8302)
           Atlas: (Infrastructure: 'hashicorp/test' Join: true)
 
==> Log data will now stream in as it occurs:
 
    [INFO] serf: EventMemberJoin: Armons-MacBook-Air.local 192.168.1.43
...

     这段日志中包含比较多的重要信息:

Node name:

     表示节点在集群中的名字,在集群中是唯一的。通常设置为hostname。可以通过参数-node设置。

Datacenter

     数据中心的名字

Server:

      Agent运行模式,True为Server模式,False为client模式

Client Addr

     Agent的用户接口(包括http,DNS,RPC)。

Cluster Addr:

     用于cluster各agent间通信,并不是所有consul都使用相同的端口,但是这个addr必须与其他节点可通信的。

Altas:

     后续详聊。

其他参数参见:http://blog.csdn.net/younger_china/article/details/52243738

1.1.2 停止Agent

     Agent有两种停止方式:gracefully或forcefully。

     若要gracefully停止agent,发送中断信号到agent进程(通常为Ctrl+C或执行命令kill -INT consul_pid)。当gracefully退出时,agent会首先通知集群要离开集群。这种方式的退出使得集群中其他节点通知集群该节点“left”。

     或者,也可以通过发送一个KILL信号来强制杀死Agent。当强制kill时,agent会立即结束。集群的其余节点最终(通常在几秒钟内)会检测到节点已经死亡并通知cluster该节点failed。

     Server节点以gracefully方式离开时尤为重要,使得对集群的影响减小到很低。

     对于client Agent,节点failed或者leave产生的差异可能没有那么重要。比如,在 Web服务器和负载平衡场景下,都导致了同样的结果:网络节点回被从负载平衡器集中删除。

1.1.3 生命周期

     Cousul集群中每个agent都会经历一个生命周期。了解它的生命周期,对于建立agent交互智能模型和如何处理节点是非常有用的。

     当agent第一次启动时,它是不知道Cluster中的其他节点的。要发现其他节点,必须加入集群。可通过join命令或通过提供正确的配置来自动加入。一旦节点加入,加入信息会通过gossip传达到整个cluster的所有节点,也就是,所有的节点都会意识到新节点的存在。如果是Server Agent,已经存在的server会将成员信息复制到新节点。

     在网络故障情况下,一些节点可能无法访问其他节点。在这种情况下,不可达节点标记为失败。区分网络故障和Agent崩溃几乎是不可能的,所以这两种情况下都是相同的。一旦一个节点被标记为失败,此信息将在servicecatalog中更新。注:这里有一些差别,因为如果Servers可以形成一个Cluster,仍然会恢复到正常状态。一旦网络恢复或Agent重新启动,Cluster将自我修复并取消失败标记。而catalog中的健康检查也将被更新以反映新的状态。

     当一个节点离开时,cluster设置ft标识表示节点已经离开。与failed场景不同,该节点所有的注册服务会立即被注销。如果Agent是server模式,复制会马上终止。

     为了防止死节点的积累(故障或离开状态的节点),Agent将自动删除catalog中的死节点。这个过程被称为收割(reaping)。目前默认配置的时间间隔为72小时(不建议更改reaping间隔,可能导致集群中断)。reaping类似与离开,使所有相关的服务将会被注销。

1.1.4 参考文献

https://www.consul.io/docs/agent/basics.html

相关文章