Ambari-agent 架构

Agent 部分

Agent 的 3 部分 :

  • HeartBeatHandler:发送 HTTP 请求和 Ambari Server 进行交互
  • ActionExecutor:Command 执行器
  • AlertSchedulerHandler:Alert 处理器

数据容器

Agent 的 4 个数据容器 :

  • CommandQueue : 存储需要执行的 Command
  • ResultMap : 存储 Command 的执行结果
  • Alert definitions file : 是一个文件,保存所有的 Alert 定义
  • AlertCollect : 存储 Alert 的检查结果

工作流程

Ambari Agent 的工作流程:

  • HeartBeatHandler:收集组件当前状态(通过ResultMap)、Command 执行结果(通过ResultMap)、Alert 检查结果(通过 AlertCollect)等,封装到 HTTP Request 当中,发送给 Ambari Server;Ambari Server 响应请求,通过 HTTP Response 带回来需要执行的 Command、需要终止的 Command、发生修改的 Config、发生修改的 Alert 定义等,并把 Comand 和 修改的 Config 封装为 Agent Command 对象,存储到 CommandQueue 中;把修改的 Alert 定义,更新到 Alert definitions 文件中(如果 Alert definitions 文件发生了变化,需要通知 AlertSchedulerHandler 重新加载一遍
  • ActionExecutor:定期从 CommandQueue 中加载需要执行的 Command,找到 Command 对应的 Python 脚本,执行脚本,并把结果存储到 ResultMap 中
  • AlertSchedulerHandler:从 Alert definitions 文件中加载所有 Alert 定义,根据 Alert 定义,找到对应的 Python 脚本,周期性执行,并把结果存储到 AlertCollect 中

image.png

Ambari-agent 是一个无状态的,功能分两部分:

  • 采集所在节点的信息并且汇总发送心跳发送汇报给 ambari-server
  • 处理 ambari-server 的执行请求

队列

两种队列:

  • 消息队列Message Queue ( ResultQueue ) : 包括节点状态信息(包括注册信息)和执行结果信息,并且汇总后通过心跳发送给 ambari-server
  • 操作队列 ActionQueue : 用于接收 ambari-server 发送过来的状态操作,然后交给执行器调用 puppet 或Python 脚本等模块执行任务

image.png

猜你喜欢

转载自blog.csdn.net/qq_44226094/article/details/130119019