背景
1.ssh安全性问题,
2.docker,mesos云化系统支持问题
3.执行效率问题,尤其是大规模集群(超过50台),比如服务启动,目前全部需要中心server调动。
4.执行效果问题,目前的执行是触发式的(同步方式),只能获得ssh的执行结果,不能获得具体任务的执行结果。还是以服务启动为例,只能知道启动脚本的调用结果,无法获知每种角色的具体执行情况。
一.说明
BEH-EXECUTE是一个分布式的任务调度框架,可以帮助您更好地管理繁杂的任务。也让您能更好地利用分布式集群所带来的卓越性能。
主要技术特点如下:
- 流程任务:将一个任务划分成多个阶段,并通过DAG(有向无环图)的方式指定阶段及其命令的执行顺序。
- 真正的分布式:将任务手动或自动分配到最合适的节点上执行。
- 简单又强大的 Web 界面。
- RESTful API:作为中间件,供其它服务接入。
- 任务管理:快速添加任务、任务分类管理、快速查找任务、任务执行状态、任务执行历史、任务执行日志、邮件消息通知等。
二.技术框架
StagePlanner 负责将任务编排成阶段。
Coordinator 负责对注册的任务进行调度,调度主要根据阶段及阶段命令状态。
FSM 有限状态机实现,负责命令,主机的状态切换,详情请见FSM说明
ActionManager 主要负责管理任务相关数据,并提供RESTful API。
下面以命令执行中的hadoop启动为例进行说明
1.首先通过ActionManager注册hadoop启动任务信息;
2.StagePlanner根据注册的任务信息进行编排,得出命令执行序列;
任务主要分为四个阶段,
第一个阶段主要是基础组件zookeeper启动,
第二个阶段主要是辅助角色zkfc,jn启动,
第三个阶段为主节点nn,rm启动,
最后一个阶段为从节点dn,nm启动。
具体执行序列如下图
3.Coordinator根据命令执行序列信息,以及命令执行状态来进行命令调度;
4.ActionManager将命令执行序列信息,以及命令执行状态存入数据库,并提供命令获取接口;
5.Agent心跳线程获取执行命令,并定时将命令执行状态通过事件的形式反馈给ActionManager;
6.FSM根据新的命令事件,触发命令状态切换;如原来是执行中状态,新收到执行失败事件,则FSM会将状态切换为执行失败状态。
7.执行3,进行执行循环。
三.FSM说明
下面是组件安装的状态机流程图,
图例中圆圈所在为状态,状态间为触发状态切换的时间。
以初始状态INIT为例,如果接到HOST_SVCOMP_INSTALL事件,即安装时间,状态就会切换到INSTALLING。
四. 任务编排实例
下图为hadoop启动的任务编排,任务主要分为四个阶段,
第一个阶段主要是基础组件zookeeper启动,
第二个阶段主要是辅助角色zkfc,jn启动,
第三个阶段为主节点nn,rm启动,
最后一个阶段为从节点dn,nm启动。
介绍完毕。