分布式集群管理与监控利器 - Minos

Minos简介
minos是小米内部实现并使用的一套分布式部署与监控系统,现在已经开源(https://github.com/XiaoMi/minos.git),主要用来管理并监控Hadoop、HBase以及Zookeeper集群等。在最新的版本,也可以很容易地扩展到支持YARN、Impala等集群。
Minos架构

如上述架构图所示,minos由多个组件组成,分别为Tank、Supervisor、Client以及Owl。下面分别对各个组件进行介绍:

Tank(包管理工具)

Tank是个包管理器。由于大公司会对Hadoop的各个组件进行相应的修改改,以及再部署集成。因此需要一个包管理工具完成这个任务。将需要部署的,修改过的包都扔到Tank中,在集群部署的时候,统一从Tank中进行分发。Tank可以看成一个包的仓库。
一般而言,整个大数据系统只需要安装一个Tank组件,通过这个组件可以管理诸如hdfs、zookeeper、hbase等安装包,功能上类似于Java中的包管理仓库 - Maven仓库。界面如下所示:

用户可以使用Client组件中的./deploy install命令上传包到tank服务器,也可以通过界面上的upload功能上传安装包。tank组件的内部结构如下图所示:

  • data:存放所有安装包
  • sqlite:数据库目录
  • tank:django目录

Supervisor(进程管理与监控)

Supervisor本身就是一个开源软件,允许用户对Linux操作系统进行进程的监控与管理。小米基于Supervisor进行二次开发,用于支持Minos。Supervisor不再像Ambari对集群节点进程进行管理时依赖ssh方式来完成,它基于xmlrpc进行通信。这样就不需要集群之间节点配置无密码登陆功能,在实际线上环境中这点比较重要。
Supervisor需要部署到集群中的每个节点,并且在部署的时候需要指定tank的地址和端口。它是minos管理集群的具体执行者,所有对集群的管理操作都是Client下发命令给Supervisor来具体实现,包括服务启动、停止、重启等等。服务启动之后,可以通过界面进行访问,web如下所示:

Client(客户端)

Client在minos的角色扮演为集群管理的入口,就是一个命令行工具。使用Client可以完成一系列诸如安装,启动,重启停止、更新Hadoop集群的操作。分别如下:
1. 使用./deploy install hbase hbtst-example 命令上传包到包仓库,Client直接下发命令给Tank组件,进行发布。
2. 使用./deploy boostrap命令安装包到集群节点。实现原理是Client下发命令给Supervisor,Supervisor再去Tank下载对应包,进行安装。
3. 使用./deploy show/start/stop/restart命令管理集群,比如使用命令./deploy start hbase hbtst-example用来重启hbtst-example这个集群。
上面所示所有的管理操作都是基于集群级别的,包括集群的启动、停止、重启等。但是如果只想启动集群中的某个节点是否可以实现呢?minos也实现了这样的需求,minos对集群任务的描述分为三个级别:
  • Service(集群级别):hbase/dptst-example,hdfs/dptst-example
  • Job:
        HBase:Master、RegionServer                                         
         HDFS:jornalnode、namenode、datanode、zkfc
  • Task:
        HBase:regionserver/0:10.2.114.152:60020                    
         HDFS:datanode/0:10.2.114.134:10020
所以重启HBase集群dptst-example中rs/0(10.2.114.152)的命令如下:./deploy restart hbase dptst-example --job=regionserver --task=0

Owl(集群Metrics信息的搜集、存储与展示)

Owl是一个Hadoop的监控系统,从服务器以JMX的方式进行数据采集与展示,另外还提供一些关于集群健康状况的警告机制等。Owl应该是Minos里面最复杂的功能组件了,整个功能组件的基本工作原理如下:
Owl Collector不定期的把Hadoop集群产生的Metrics数据搜集起来,并存入Mysql数据库。这个存储的方式是覆盖存储,存储时直接会将之前存储的数据覆盖掉。Dashboard提供一个Web服务,用于访问Mysql中保存的Metrics数据信息。而Opentsdb Collector通过Dashboard将Mysql中的数据存储到Opentsdb中去,其实就是Hbase。Opentsdb这个东西本身是做在HBASE之上的,一个时间序列的数据库,使得存储的数据容易获取以及图表化的方式进行展示。Hbase中就存储了所有的集群的Metrics历史数据。当用户查看存储的历史数据时,就通过Opentsdb进行数据访问并最终通过Dashboard呈现给用户。
通过上述原理可知,owl通过访问mysql获取当前监控数据,通过访问opentsdb获取历史监控数据。界面如下图所示:


Minos实践:使用Minos对HBase集群进行部署、管理
1. 前提
  • 定义集群名称:假如我们定义HBase集群名称为dptst-example,按照minos规定,对应配置文件的名称即为hbase-dptst-example.cfg(类似于service{cluster}.cfg)
  • 规划集群:该集群设置为一个伪分布式集群,只有一个节点,master:172.17.2.210,region server:172.17.2.210 
  • 安装minos环境,同时部署Tank组件,Supervisor组件
2. 配置minos中HBase管理配置文件
  • 默认文件路径:minos/config/conf/hbase/hbase-dptst-example.cfg,不需要修改
  • 该配置文件中主要有三个节点,该配置文件注释很丰富,这里不再赘述。主要需要修改cluster节点下的name属性、version属性等
3. 部署安装包到Tank服务器
  • 在官网下载0.94.27版本的HBase安装包到本地
  • 在Tank界面直接上传即可,界面如下:
 
4. 部署HBase集群
  • 使用./deploy bootstrap hbase dptst-example命令部署集群,如下所示:
通过supervisor的web界面也可以看到:
5. 点击界面上Restart或者Stop就可以重启或停止对应rs或者master,如下所示:

Minos特点
1. Tank组件可以方便开发团队对源码进行改造
2. 支持集群级别的管理、也支持Job级别和Task级别的管理
3. 不需要配置依赖ssh,不需要用publickey做无密码登陆
4. 不强制要去部署为系统服务,进而可以灵活支持同机多实例
5. 支持完整的历史监控数据存储、界面方便搜索
6. 支持rs级别、table级别监控

本文来自网易实践者社区,经作者范欣欣授权发布。