基于Docker的分布式集群环境的快速搭建研究
2018-07-28陈平黄浩然
陈平 黄浩然
摘要:针对目前大规模分布式集群环境难以搭建、不同类型服务器难以兼容同一分布式框架的问题,提出一种基于Docker容器技术来组建分布式集群的设计方案。该方案主要采用了以Docker容器的方式打包Mesos系统、Marathon调度框架与Zookeeper应用,并实现一键在Linux系统主机上快速部署分布式集群所需的环境。实验结果表明,将Docker技术与分布式集群技术结合起来时,在部署、故障修复方面具有开销小、速度快的优点,大大降低了分布式集群的部署的复杂性。
关键词:Docker;mesos;marathon;zookeeper;分布式
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)11-0001-03
随着互联网技术的发展、网络用户数量的急剧增长,互联网中数据量也不断增加。如今的系统应用与日俱增,由于单个计算机受到内存、CPU等硬件的限制,已经无法快速满足任务。因此为了让服务器能快速响应系统所分发的任务,分布式系统的使用也已成为未来发展的必然趋势。然而分布式集群的搭建依赖于包括操作系统、开发语言标准库、相应文件的配置等环境,这无形增加了分布式集群的部署、故障处理的难度,给配置人员带来了许多不必要的困扰。因此,如何快速部署分布式集群便成为一项很有意义的研究。
Docker作为开源的引擎,可以轻松快速地为任何应用创建一个轻量级、可移植的容器。它允许将相关系统镜像与相关库打包到一个镜像中,这就省下了安装操作系统和相关应用程序依赖包的时间,极大地缩短了部署周期。因此将Docker技术与分布式集群相结合可以很好解决集群部署效率低、环境不兼容等问题。
1 技术背景
1.1 Mesos分布式资源管理技术
Mesos是Apache下被称为是分布式系统内核的开源资源管理框架。Mesos是一个带有调度器的分布式系统,能够对分布式集群做细粒度资源分配。Mesos由三个重要的部分组成:Master,Slave以及Framework。
Mesos-master是其核心组件,负责同一管理接入Mesos中的各个slave和框架,并通过资源邀约(resource offer)的方式将slave上的可用资源根据算法分配给框架进行任务分发。
Mesos-slave是框架中真正执行计算任务的节点,它将自己的可用资源向master汇报,由master的全局资源调度器分配相应任务。
Framework(框架)通常是指运行在Mesos上的分布式应用程序,职责是调度各种类型的任务。框架由框架调度器与执行器(Executor)两部分组成。框架调度器的职责是负责协调框架内所有任务资源的调度,而执行器运行在slave上,负责任务的执行控制。
1.2 Marathon容器编排框架
Marathon是一个成熟的,轻量级的,扩展性很强的Apache Mesos的容器编排框架,它主要用来调度和运行常驻服务(long-running service),提供了友好的界面和Rest API来创建和管理应用,并能够自动为应用程序做容错迁移。能够运行在shell上的任务均可以很容易的通过Marathon在Mesos平台上启动与管理。
1.3 Zookeper服务
ZooKeeper 是 Google 的 Chubby一个开源的实现,是 Hadoop 和 Hbase 项目的重要组件。Zookeper服务器端不提供任何分布式同步原语,而是提供了非常简单并且强大的API,应用程序可以根据这些API构建更高层次的分布式同步原语。
1.4 Docker容器技术
1.4.1 Docker概述
Docker是基于Linux的容器技术(LXC),将应用包装在容器里,使其具有移植性和独立性。Docker类似于虚拟化服务器,他支持一台机器上运行多个容器进程,针对不同的服务提供不同的image,并且可以统一封装各类不同的应用运行环境、提供统一管理和操作接口。
1.4.2 Docker体系架构与优势
Docker采用了客户、服务器(CS)架构。从客户端开始以TCP/REST发送请求,由Docker Host进行请求收集以实现远程控制。在工作过程中,用户使用Docker Client与Docker Daemon建立通信并将请求发送给后者。Docker Daemon内部包括Docker Server与Engine两个部分,前者使其可以接受Docker Client的请求,而Engine执行Docker内部的一系列工作。Docker Registry 是用来存储容器仓库的镜像。在运行的过程中Docker Daemon與Docker Registry进行通信,用来实现搜索、下载、上传镜像的功能。
Docker的优势也很明显,具体如下:
1)使用image来部署环境,简化了服务器迁移而导致的环境再部署问题,提高了工作效率并降低了部署过程中出现环境问题的风险。
2)Docker具有沙盒隔离特性,以容器化管理的方式将应用与系统隔离开,增强了安全性。
3)使用Docker来部署应用缩短了环境交付和部署周期,方便开发人员快速部署开发环境。并使测试与维护变得方便。节约了开发、部署时间,实现了快速迭代。
2 基于Docker构建分布式集群
2.1 主体架构思路
Docker的运行方式主要是以宿主机来分管容器,而我们的实验所使用的Mesos为分布式集群管理框架,在实验过程中要将其与Marathon、Zookeeper技术相结合,所以在这里为了环境搭建的便利我们用Dockerfile技术将上述应用集成到Docker镜像中并打包,以实现主从机环境的一键搭建功能。如图1所示为Mesos的相关应用实现流程。
2.2 基于Docker技术的架构实现流程
2.2.1 Mesos
1)客户端从Registory中下载Ubuntu并建立Container。
2)运行Container并使用apt-get命令安装JDK以及Mesos,之后配置相关参量,并在此docker镜像中运行curl命令从docker官网中下载docker应用(目的是为了方便之后部署docker应用)。
3)在环境中写入两个bash脚本,分别对应“master”与“slave”。两个脚本包括了master与slave具体的环境变量参数的配置,包括了集群数量、日志位置、master对应的ip地址等。
4)将Container内信息打包成Image或将配置信息写入dockerfile中。
2.2.2 Zookeper
1)客户端从Registory中下载Ubuntu并建立Container。
2)在镜像中使用apt-get命令安装JDK,并使用wget命令安装Zookeeper应用并配置相应环境参数。
3)将Container内信息打包成Image或将配置信息写入dockerfile中。
2.2.3 Marathon
1)客户端从Registory中下载Ubuntu并建立Container。
2)调用apt-get命令安装Marathon所依赖的JDK与Mesos。之后调用curl命令下载marathon的.tgz文件并使用“tar xzf marathon-1.1.1.tgz”命令解压缩。
3)将Container打包为Image或将配置信息写入dockerfile中。
2.2.4 集群实现流程
1)在所有机器中下载并安装docker应用。并开启docker daemon的TCP监听端口(为了方便之后使用bash命令一键部署环境)。
2)在bash文件中写入docker命令,分别在三台不同IP的主机中开启Zookeper与Mesos-master。之后写入docker命令在两个不同的主机中分别开启mesos-slave。
3)在bash文件最后写入启动marathon的docker命令,并將master、zookeeper主机所在的IP地址写入启动命令中。
4)在其中一台master主机中运行该bash文件,实现集群一键搭建。
x
3 实验结果与性能分析
3.1 实验目的
本次实验的目的有两个:
1)通过本次实验验证使用Docker容器技术自动化构建的分布式集群运行是否正常。
2)通过多组测试,比较通过运行使用Dockerfile技术部署出的集群与使用传统方式部署集群的性能与效率。
3.2 实验结果与分析
1)鉴于硬件条件的限制,测试采用了虚拟机构建分布式的方法
硬件平台:windows10主机一台并使用了型号为i7-4710MQ的CPU,虚拟机镜像分配50G硬盘与2G内存。
软件平台:windows10操作系统的主机,VMware12.5.5,三台ubuntu16.04 LTS虚拟镜像。
在完成上述应用的dockerfile与bash脚本编写后,通过执行bash脚本成功搭建出Mesos分布式集群在mesos-master结点主机处访问127.0.0.1:5050可以查看集群中所部属的两个slave节点,在Framework界面可以看到marathon框架成功执行。在主机中通过执行命令可以发布相应的任务,任务会随机分配至符合要求的slave节点处。在终止当前master节点后,由于zookeeper的存在,master节点将自动切换至另一台处于热备份状态的master节点上,以实现故障的自动处理功能。
通过docker技术搭建出的mesos集群可以实现其应用本身所具有的功能,该分布式集群运行正常。
2)传统方式部署集群与使用docker方式部署集群效率比较
为了解决单一实验的偶然因素对实验结果的影响,本次实验进行了多组测试并取平均值,得到图3的结果,其中系列1为使用传统虚拟机技术,而系列2为使用docker技术。从图中我们得到当分别部署2、10、50、100、500台slave节点时,传统虚拟机部署集群环境花费的时间均为分钟级别,而使用docker技术则以秒来计数。
1)使用传统虚拟机的形式进行搭建,此时需要将环境搭建到虚拟机镜像中,并通过复制等方式实现移植。利用此方式可以免去复杂环境的搭建过程,但是由于虚拟机是将整个系统运行在虚拟的硬件平台上,所以开启一个虚拟机的时间是以分钟为单位。当部署虚拟机数量较多的时候,使用传统的虚拟机技术将耗费大量时间。
2)使用docker容器技术对集群环境进行搭建。由于docker启动时间是以秒为单位,所以其时间优势巨大,非常适合大量应用的快速部署。在使用docker镜像后,集群的整体移植性又大大增强,当出现错误时只需要重新部署相应镜像即可。
由实验结果分析得到,随着slave节点数量的增加,使用docker技术部署集群更为便捷。
4 结论
本文提出了一种使用docker技术融合Mesos技术高效部署分布式集群的方案。相对于传统的部署方法,此方案简化了部署难度,提高了部署效率。实验结果也表明此方案的可用性。因此两者的结合必定会为未来分布式集群搭建的发展提供一条崭新的思路。
参考文献:
[1] 李新丽.基于Mesos和Docker构建大数据平台技术研究与应用[J].吉林建筑大学学报,2016(2).
[2] 柯尊旺.Mesos平台下多资源调度算法的研究与改进[D].乌鲁木齐:新疆大学,2016.
[3] 黄志坚.基于 Docker 的 ZooKeeper 自动化运维系统的设计与实现[D].武汉:华中科技大学,2016.
[4] 陈存香,陈清金,张岩.Hadoop与Docker技术的融合[J].本期关注,2015(5).
[5] 田玉靖,张晨光,任女尔.基于Docker的Redis缓存架构的研究[J].电脑知识与技术,2015,11(23).
[6] 李杰,刘广钟.Hadoop分布式集群的自动化容器部署研究[J].计算机应用研究,2016,33(11).