状态

三种状态 :

  • Live Cluster State:集群现有状态,各个节点汇报上来的状态信息会更改该状态
  • Desired State:用户希望该节点所处状态,是用户在页面进行了一系列的操作,需要更改某些服务的状态,这些状态还没有在节点上产生作用
  • Action State:操作状态,是状态改变时的请求状态,看成一种中间状态,该状态可以辅助 LiveCluster State 向Desired State 状态转变

心跳

Ambari-Server 的 Heartbeat Handler 模块用于接收各个 agent 的心跳请求(心跳请求包含两类信息 : 节点状态信息 , 返回的操作结果),把节点状态信息传递给 FSM 状态机去维护着该节点的状态,并且把返回的操作结果信息返回给 Action Manager 去做进一步的处理

Coordinator 模块 ( API handler ) 主要在接收 WEB 端操作请求后,会检查它是否符合要求,StagePlanner 分解成一组操作,最后提供给 ActionManager 去完成执行操作

Ambari-Server 的所有状态信息的维护和变更都会记录在数据库中,用户做一些更改服务的操作都会在数据库上做一些相应的记录,同时,Agent 通过心跳来获得数据库的变更历史

jetty

Ambari-Server 使用的 jetty 作为 Servlet 容器作为内嵌的 Java 服务器,其中相关的代码在 server/controller 下的AmbariServer.java 中。 其中 Session 的管理似乎 AmbariSessionManager 重写了 SessionManager 类

  • jetty 是一个开源的Servlet容器,它为基于java的web容器,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行的Java应用提供网络和web连接
  • Google Guice 一个google的IOC容器
  • Spring
  • JAX-RS

Ambari-Server 依赖于 Ambari-Views

包名描述
org.apache.ambari.server.api.services对web接口的入口方法,处理 /api/v1/* 的请求
org.apache.ambari.server.controller对 Ambari 中 cluster 的管理处理,如 : 新增 host,更新service、删除 component
org.apache.ambari.service.orm.*对数据库的操作
org.apache.ambari.server.agent.rest处理与 Agent 的接口
org.apache.ambari.security是使用 Spring Security 来做权限管理

Ambari Server 会读取 Stack 和 Service 的配置文件。当用 Ambari 创建服务的时候,Ambari Server 传送 Stack 和 Service 的配置文件以及 Service 生命周期的控制脚本到 Ambari Agent。Agent 拿到配置文件后,会下载安装公共源里软件包(Redhat,就是使用 yum 服务)。安装完成后,Ambari Server 会通知 Agent 去启动 Service。之后 Ambari Server 会定期发送命令到 Agent 检查 Service 的状态,Agent 上报给 Server,并呈现在 Ambari 的 GUI 上