Linux.中国 - 开源社区

 找回密码
 骑士注册

QQ登录

微博登录


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

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

介绍

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

为什么选择Docker?

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

Docker简化了人们使用Linux容器的方式,并且提供一些非常实用的特性,比如Dockerfiles、Docker Hub、分层文件系统。在本文中,我将使用使用Amazon S3 API的VIPR搭建私有的Docker Registry以存储镜像(如我以前的帖子中描述)。

为什么选择CoreOS?

所有的组件都会在Docker容器中运行,所以你可能会说,操作系统并没有那么重要。但是,CoreOS有很多的优势,具体如下:

  • 以一个单元的形式自动更新整个系统,而不是一个包接着一个包的更新(如果你的基础设施没有SPOF,甚至要重启系统)
  • 包含用于发现服务的etcd,也使用Vulcand(甚至设置中需要mesos)
  • 包含了systemd和fleet,一个可以以一个init系统呈现你整个集群的工具。在这个设置中我不使用fleet,但是在其它方面我有使用它,比如几秒内启动elastic search集群。 

为什么选择Vulcand?

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

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

Vulcand是一个为HTTP API管理和微服务而设计的反向代理工具。Vulcand会监控etcd,并自动检测到它需要实现新的规则,所以你不需要重新加载任何服务。只需在etcd添加正确的密钥,然后你的服务/应用程序就可以被使用了。

为什么选择Mesos?

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

  • Fleet:Fleet是一个通过Systemd对CoreOS集群进行控制和管理的工具。如果你想启动容器或者手动指定映射到主机的端口,那Fleet是一个不错的选择(译者注:Fleet的更多资料可以阅读本文)。
  • Kubernetes:这可能是最佳的选择之一,但现在Kuernetes还太年轻。
  • Mesos:Mesos目前已经支持Docker,它已经是一个相对稳定的平台,并且可以用来部署其它软件,例如Hadoop。 

为什么选择对象存储?

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

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

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

理论上NAS共享方案可行,但是特别复杂的。例如,NAS共享需要挂载到所有的主机上,所以你需要为每个容器指定Volume,并在特权模式下运行容器...当容器启动而NAS共享不可用时,容器内的应用程序需要能够处理相关问题。

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

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

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

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

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

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

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

Demo

视频可以点此链接浏览。

1234下一页
查看其它分页:

发表评论


最新评论

我也要发表评论

猛山小强 2015-1-30 08:03  新浪微博网友评论
//@ruochen_SH: //@Jason阿堅: //@BikongV://@highbird03: //@alaleiwang:docker over mesos,看起来很cool//@DockerOne: 我们翻译的[嘻嘻]//@王关胜
回复
小_虎子 2015-1-30 08:03  新浪微博网友评论
@我的印象笔记 //@ruochen_SH: //@Jason阿堅: //@BikongV://@highbird03: //@alaleiwang:docker over mesos,看起来很cool//@DockerOne: 我们翻译的[嘻嘻]//@王关胜
回复
ruochen_SH 2015-1-29 22:03  新浪微博网友评论
//@Jason阿堅: //@BikongV://@highbird03: //@alaleiwang:docker over mesos,看起来很cool//@DockerOne: 我们翻译的[嘻嘻]//@王关胜
回复
简单爱踢人 2015-1-29 08:33  新浪微博网友评论
@我的印象笔记
回复
鹄思乱想 2015-1-29 07:33  新浪微博网友评论
@我的印象笔记 //@JinWYP://@Jason阿堅: //@BikongV://@highbird03: //@alaleiwang:docker over mesos,看起来很cool//@DockerOne: 我们翻译的[嘻嘻]//@王关胜
回复
dahoo1 2015-1-29 01:03  新浪微博网友评论
//@Linux中国://@青松梁://@马全一:Mark 了去试试//@cwinux:代码部署把Mesos换成ducter吧,用那么重的Mesos做这事有点大材小用了。我们的各种web、c、java的系统,都统一使用ducter统一部署,管理几万台服务器那是没任何压力。对于docker容器的部署与管理也没有任何问题。//@王关胜: //@马全一
回复
Jason阿堅 2015-1-29 00:03  新浪微博网友评论
//@BikongV://@highbird03: //@alaleiwang:docker over mesos,看起来很cool//@DockerOne: 我们翻译的[嘻嘻]//@王关胜
回复
zyx-today 2015-1-28 22:33  新浪微博网友评论
好吧,看到我名字了
回复
yocloud 2015-1-28 21:03  新浪微博网友评论
回复@cwinux:谢谢推荐,看看//@cwinux:代码部署把Mesos换成ducter吧,用那么重的Mesos做这事有点大材小用了。我们的各种web、c、java的系统,都统一使用ducter统一部署,管理几万台服务器那是没任何压力。对于docker容器的部署与管理也没有任何问题。//@王关胜: //@马全一
回复
yocloud 2015-1-28 21:03  新浪微博网友评论
回复@cwinux:谢谢推荐,看看
回复
alaleiwang 2015-1-28 19:33  新浪微博网友评论
docker over mesos,看起来很cool//@DockerOne: 我们翻译的[嘻嘻]//@王关胜
回复
水天一线 2015-1-28 19:03  新浪微博网友评论
Repost
回复
i陈飞 2015-1-28 18:33  新浪微博网友评论
//@大侠谭玺:转发微博
回复
曦曦儿Sarah 2015-1-28 18:03  新浪微博网友评论
//@Linux中国://@青松梁://@马全一:Mark 了去试试//@cwinux:代码部署把Mesos换成ducter吧,用那么重的Mesos做这事有点大材小用了。我们的各种web、c、java的系统,都统一使用ducter统一部署,管理几万台服务器那是没任何压力。对于docker容器的部署与管理也没有任何问题。//@王关胜: //@马全一
回复
顾进广 2015-1-28 17:33  新浪微博网友评论
//@Linux中国://@青松梁://@马全一:Mark 了去试试//@cwinux:代码部署把Mesos换成ducter吧,用那么重的Mesos做这事有点大材小用了。我们的各种web、c、java的系统,都统一使用ducter统一部署,管理几万台服务器那是没任何压力。对于docker容器的部署与管理也没有任何问题。//@王关胜: //@马全一
回复
房檐落雨 2015-1-28 17:03  新浪微博网友评论
m//@Linux中国://@青松梁://@马全一:Mark 了去试试//@cwinux:代码部署把Mesos换成ducter吧,用那么重的Mesos做这事有点大材小用了。我们的各种web、c、java的系统,都统一使用ducter统一部署,管理几万台服务器那是没任何压力。对于docker容器的部署与管理也没有任何问题。//@王关胜: //@马全一
回复
Pirate_lin 2015-1-28 16:33  新浪微博网友评论
@Pro小明-肥 //@Linux中国: //@青松梁://@马全一:Mark 了去试试//@cwinux:代码部署把Mesos换成ducter吧,用那么重的Mesos做这事有点大材小用了。我们的各种web、c、java的系统,都统一使用ducter统一部署,管理几万台服务器那是没任何压力。对于docker容器的部署与管理也没有任何问题。//
回复
小C3210 2015-1-28 16:33  新浪微博网友评论
@我的印象笔记 //@DockerOne:我们翻译的[嘻嘻]//@王关胜
回复
DreamingSheep 2015-1-28 16:33  新浪微博网友评论
@mark
回复
cwinux 2015-1-28 16:03  新浪微博网友评论
资源隔离有docker,Mesos再做隔离不是重复了吗,因此说大财小用。//@Dongxu_Huang: mesos 最大的价值是资源的抽象和隔离,ducter有这个 功能吗?对进程精确到 cpu 核数的资源调度,不好意思文档没找到 //@马全一: Mark 了去试试//@cwinux:代码部署把Mesos换成ducter吧,用那么重的Mesos做这事有点大
回复
12下一页
返回顶部

分享到微信朋友圈

打开微信,点击底部的“发现”,
使用“扫一扫”将网页分享至朋友圈。