标签: docker 应用 | 发表时间:2016-01-17 00:08 | 作者:noreply@blogger.com (AaronZhang)
出处:http://denghuo-lanshan.blogspot.com/
什么是Docker。Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、相互隔离的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、OpenStack 集群和其他的基础应用平台。
Docker应用场景:
本文主要介绍docker在大数据方面的应用,经过一段时间的研究和实际操作,提出了Hadoop on Docker架构。大概思路就是将硬件(或云服务器)通过Docker搭建成为一个“超级服务器”,这里的超级是指,拥有足够的CPU,内存,并且提供7*24小时不宕机服务(除非同一时间所有物理主机全宕机)。每个Docker容器作为超级服务器资源的一个实例,可以根据需求动态增加实例,以满足计算性能要求。下图是整个Hadoop on Docker的架构
从上自下,依次为:
1. 将datanode容器挂载到外部文件存储系统中,可以通过增加外部文件系统的磁盘大小来提高hdfs存储能力。
2. 将所有配置文件存放在公共文件系统中,可以方便整个系统的配置管理,减少重复操作。
有人会有疑问:如今服务器已经很廉价,完全可以在不同服务器上运行不同服务,没必要使用docker。
如果硬件服务器对你来说确实是廉价的,以至于搭建100个节点的hadoop集群,大多数情况下运行mapreduce job的节点书不超过10个,剩余90台服务器常年处于休息状态,对你来说也无关紧要的话,我无话可说。抛开硬件成本不说,docker容器的隔离机制也是集群部署中的一大亮点!
本文的目的是通过docker容器,使用更少的硬件资源来运行同样的job,容器相对于服务器来说是更细粒度的资源。同时由于容器的隔离机制,一个容器发生故障并不影响到其他容器及宿主主机。此外这种架构还解决了单点故障问题,每台服务器运行着相同的docker镜像,通过定时向zookeeper发送心跳,来监控所有容器的健康状态,心跳是一份包含该服务器上所有运行着的容器的名单。那么有可能发生两种突发情况:
对于第一种情况,由于心跳包含所有运行着容器的名单,当服务器某个容器挂掉,比如mysql意外终止,zookeeper通过两次心跳对比,发现缺少mysql,于是启动应急措施,重启该服务器的mysql容器。如果宿主主机宕机,zookeeper在一段时间内未接受该服务器的心跳,发现宕机,然后在其余剩下的服务器中重启上一次心跳名单中运行着的容器,如图所示
整个系统的实现还有一个前提,就是使不同宿主主机上的docker容器能够通信,可以参见 这篇 。
最终的目的是使整个架构看起来像在一台超级服务器(cpu,内存足够大,并且永不宕机)上运行hadoop。