天天看点

Docker&MongoDB实战(二)性能与容错

在前面,我们已经知道怎样创建和运行一个简单的基于CentOS的MongoDB实例。这对于开发或者测试使用来说再好不过了,但是它并没有说明一些性能和容错能力的问题。在本文中,我们会了解Docker相关的磁盘存储选项,以及在其之上运行数据库(如MongoDB)的注意事项。

Docker&MongoDB实战(二)性能与容错
Docker&MongoDB实战(二)性能与容错

通过检查日志文件来确认MongoDB容器是否启动成功:

确保数据文件已经在指定的主机目录~/db中创建。

这里我们使用与第一部分中案例相同的mongodb.repo,为了方便这里再做一次:

使用在你当前的目录如上的两个文件,构建将要运行的镜像:

现在衡量分层的根目录文件系统,通过运行:

你应该看到相似的输出如下:

<code>mongoperf</code>将一直运行,你可以通过Ctrl+C退出终端。容器将一直运行在后台,因此让我们结束它。

现在再运行下主机目录数据卷:

从我们设置开始,这就有相同的输出:

停止并移除之前的容器。

具有32个并行读写线程结果最后一组比较,我们看到在操作每秒数量提高180%,从1211到3385 ops/s。还有的吞吐量增加了225%,从4到13 MB/s。

虽然上面的方式中性能得到了提升,但这并不利于容器的迁移,因为现在我们的Docker容器需要依赖外部的Docker主机上的目录,而这个目录却没有通过Docker来管理,所以我们不能简单的运行或者迁移它。最好的解决方案就是使用data-only容器,接下来,我们将详述。

Docker&amp;MongoDB实战(二)性能与容错

仅有数据(data-only)的容器是推荐的Docker数据存储模式,它可以解耦对主机的依赖。

为了创建数据容器来作为衡量标准,我们重新使用已经存在的<code>mongoperf</code>镜像:

使用数据容器,重新运行测试标准,使用<code>--volume-from mongoperf-data</code>参数。

这个过程如下面的输出:

性能方面它和主机目录数据卷方式一致。即使引用容器被移除了,仅仅包含数据的容器依然存在。我们继续运行查看:

回顾一下我们的<code>mongod</code>容器,我们现在使用data-only容器来存储数据以获得更好的性能。

记住,你可以通过运行<code>docker ps</code>看到映射的本地端口值。例如:

在接下来的部分,我们将研究各种各样的Docker网络参数,并细说哪种更适合多主机的MongoDB副本集。敬请期待!

===========================

译者介绍

刘红,才毕业的本科小生,平时喜欢业余学习一些自己感兴趣的技术或者框架,目前正在学习Docker,也在着手翻译Docker官方文档,如果对翻译Docker官方文档感兴趣的朋友可以联系译者哟。

原文发布时间为:2015-03-22

本文作者:刚百

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

原文标题:Docker&amp;MongoDB实战(二)性能与容错