天天看点

使用Docker、CoreOS、Mesos部署可扩展的Web应用

本文讲的是<b>使用Docker、CoreOS、Mesos部署可扩展的Web应用</b>,【编者的话】本文作者重点介绍了如何使用Docker、CoreOS、Mesos、Vulcand、对象存储来部署一个可扩展的Web应用,他首先介绍了为什么要选择这些工具以及与其它工具相比这些工具的优势。紧接着,他通过实际案例演示了整个部署过程,图文并茂,推荐阅读。

让我们先来讨论一下为什么我决定使用这些软件来展示如何创建一个可扩展的Web基础架构。

那问题来了,为啥要选择Linux容器?因为相比于虚拟机,Linux容器拥有更低的计算和存储开销。

以一个单元的形式自动更新整个系统,而不是一个包接着一个包的更新(如果你的基础设施没有SPOF,甚至要重启系统)

包含用于发现服务的etcd,也使用Vulcand(甚至设置中需要mesos)

包含了systemd和fleet,一个可以以一个init系统呈现你整个集群的工具。在这个设置中我不使用fleet,但是在其它方面我有使用它,比如几秒内启动elastic search集群。

我看到有关如何部署容器或虚拟机的很多教程,但我总是惊讶地看到,他们很少涉及基础设施的负载均衡部分。

在我看来,负载均衡是一个可扩展的Web应用架构的重要组成部分。如果用户不能正常访问你的应用,那还搞什么自动化?

有三种不同的方式来自动化部署Docker容器,具体如下:

Kubernetes:这可能是最佳的选择之一,但现在Kuernetes还太年轻。

Mesos:Mesos目前已经支持Docker,它已经是一个相对稳定的平台,并且可以用来部署其它软件,例如Hadoop。

我们可以通过上面介绍的软件来部署可扩展和高可用的应用。但是,数据怎么处理?

结构化的内容可能会被存储到分布式数据库中,例如MongoDB。非结构化的内容一般会存储在一个本地文件系统、NAS或者对象存储。

本地文件系统并不适合现在的场景,因为容器可能会被部署到集群的任何一个节点上。

然而,对象存储却可以在任何容器的任何应用中使用,并且是高可用的,因为我们使用了负载均衡器,它不需要任何配置,这也可以加快应用程序的开发周期。为什么了?因为开发者不需要考虑数据的存储方式、目录结构管理等。

我已经开发了一个Web应用程序,它展示了一个应用程序如何不通过数据路径处理上传和下载,我会在下面运行这个应用程序。

使用Docker、CoreOS、Mesos部署可扩展的Web应用

上图展示了几个不同的组件,以及我如何设置3个节点的CoreOS集群。

我使用Keepalived来确保公共 IP 10.64.231.84是可用的,不管对应在coreos1还是coreos3节点上。

Vulcand会运行再每个节点上,以均衡用户和Web应用程序之间的负载,同事也可以平衡应用程序和不同的VIPR节点。

私有的Docker Registry在coreos1节点上运行,并使用Amazon S3 API在VIPR上存储镜像。

Mesos主节点(Master)和Marathon运行在coreos2节点上。

这里是我用来构建Docker镜像的Dockerfile:

构建镜像时我使用了<code>--no-cache</code>参数,以确保最新的源代码是从GitHub上克隆的。

最后,我推送镜像到Docker registry。

我已经指定了一个tag(2.0),以确保集群中的每个节点都会从Docker Registry获取最新版本。

现在,让我们使用Docker镜像部署一个Mesos应用:

当Mesos应用程序启动后,Mesos Marathon UI就会显示应用程序的状态。

使用Docker、CoreOS、Mesos部署可扩展的Web应用

几秒钟之后,应用部署成功,Docker主机和端口显示在UI中。

使用Docker、CoreOS、Mesos部署可扩展的Web应用

使用在Marathon UI显示的信息,我可以访问URL为<code>http://coreos1.ad.forest:31000</code>的Web应用程序。

使用Docker、CoreOS、Mesos部署可扩展的Web应用

当应用程序运行时页面左上角会显示容器名称,用于上载和下载的图片的Amazon S3终端(endpoint)会显示在左下角,并表明ViPR用于存储数据。

我们现在可以上传图片了。

使用Docker、CoreOS、Mesos部署可扩展的Web应用

下面是由Web应用程序发送到浏览器的代码,以让浏览器直接上传图片到对象存储平台。

图片直接上传到对象存储平台的事实意味着该Web应用程序中并没有数据路径。也就是说无需部署数百个实例应用程序就可以扩展。

这个Web应用程序,也可用于显示所有存储在相应的Amazon S3的图片。

使用Docker、CoreOS、Mesos部署可扩展的Web应用

图片下方显示的URL表明图片可以直接从对象存储平台下载,而这又意味着Web应用程序不是从数据路径直接下载。

对象存储是事实上的标准网络规模应用。

现在,让我们看看如何能够从外界访问该Web应用程序。

我使用Golang开发了一个小工具,同时使用Marathon API和etcd API:

找到那些运行的Mesos应用程序但却没有相对应的在etcd中的vulcand规则,然后新建缺失的规则。

找到那些存在与etdc的vulcand规则中的不再运行的Mesos应用,然后删除。

使用Docker、CoreOS、Mesos部署可扩展的Web应用
使用Docker、CoreOS、Mesos部署可扩展的Web应用

其中Mesos之美在于它能够轻松地扩展当前正在运行的应用程序的实例数目。

使用Docker、CoreOS、Mesos部署可扩展的Web应用

几秒钟后,20个实例正在运行。

使用Docker、CoreOS、Mesos部署可扩展的Web应用

我需要再次运行我的工具来更新vulcand规则。

使用Docker、CoreOS、Mesos部署可扩展的Web应用

现在,如果我刷新我的网页浏览器,可以看到,在左上角显示的容器名称是基于服务的应用程序实例发生变化。

使用Docker、CoreOS、Mesos部署可扩展的Web应用
使用Docker、CoreOS、Mesos部署可扩展的Web应用

使用Marathon UI或API时,它也可以按比例缩小的实例数并再次运行工具来更新vulcand规则。

原文发布时间为:2015-01-26

本文作者:zyx_today

本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:使用Docker、CoreOS、Mesos部署可扩展的Web应用