首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker Swarm共享卷

Docker Swarm共享卷
EN

Stack Overflow用户
提问于 2017-02-27 04:07:41
回答 2查看 2.6K关注 0票数 3

目前,我正在构建一个Docker Swarm集群。它由3个经理和3个工人组成。我将在此设置上部署的应用程序由一个laravel后端组成,该后端需要将其代码放在多个容器中以实现可伸缩性。我已经尝试使用GlusterFS卷和rex-ray作为我的卷的共享存储。GlusterFS并不可靠,而在我的例子中,Ceph有点过头了,而且太难了:)

当前的设置如下所示。我在docker之外有一个Percona集群,我在这些服务器上运行GlusterFS,然后简单地将它们挂载到Docker Worker中。

代码语言:javascript
复制
                                                Docker Managers
+-------------------------------------------------------------+
|                                                             |
|   +---------+   +---------+   +---------+    +---------+    |
|   |         |   |         |   |         |    |         |    |
|   | HAproxy +---+ HAproxy +---+ HAproxy +----+   SSL   |    |
|   |         |   |         |   |         |    | Manager |    |
|   +----+----+   +----+----+   +----+----+    +---------+    |
|        |             |             |                        |
+-------------------------------------------------------------+
         |             |             |
         |             |             |           Docker Workers
+-------------------------------------------------------------+
|        |             |             |                        |
|   +----+-------------+-------------+--------------------+   |
|   |                                                     |   |
|   |                      Applicaties                    |   |
|   |                                                     |   |
|   +---+--------------+---------------+--------------+---+   |
|       |              |               |              |       |
|       |              |               |              |       |
|   +---+----+     +---+----+     +----+---+     +----+---+   |
|   | Mysql  |     | Mysql  |     | Mysql  |     | Mysql  |   |
|   |   LB   +-----+   LB   +-----+   LB   +-----+   LB   |   |
|   +---+----+     +----+---+     +----+---+     +----+---+   |
|       |               |              |              |       |
|       +---------------+-------+------+--------------+       |
|       |                       |                     |       |
+-------------------------------------------------------------+
        |                       |                     |
        |                       |                     |
        |                       |                     |
+-------+--------+     +--------+-------+    +--------+-------+
|                |     |                |    |                |
|    MySQL01     |     |    MySQL02     |    |    MySQL03     |
|    Gluster01   +-----+    Gluster02   +----+    Gluster03   |
|                |     |                |    |                |
+----------------+     +----------------+    +----------------+

然后将它们挂载到php容器中,如下所示:

代码语言:javascript
复制
--mount type=bind,source=/mnt/client-data,target=/var/www/html/

这是可行的,但速度非常慢。页面加载时间约为10秒,当文件未挂载(存在于容器中)时,页面加载时间约为2-3秒。

我来到了絮凝器周围,这似乎非常有趣,但我认为一个絮凝器卷只能安装在一个容器上。这是真的吗?

我现在正在尝试的另一个解决方案是,每次创建新的容器时,都会从git中提取代码。这实际上是一个很好的解决方案,但它需要大约5分钟的时间来提取代码并运行composer,并且当我推送更新时,我需要重新启动所有容器。

在多个主机上的不同容器之间共享代码的最佳解决方案是什么?(甚至是数据中心)目前我可以访问许多不同的存储后端(Ceph,NFS,gluster),创建一个新的存储后端是没有问题的。

编辑:为什么gluster在这种情况下不可靠?我可能在上面说错了。在带有卷驱动程序插件的Gluster上使用docker卷时,Gluster是不可靠的。在创建服务时,卷大部分时间都能很好地挂载,但如果重新调度发生在群中,卷很少再次挂载。我稍后会调查这件事,以确定哪里出了问题,但我现在没有太多空闲时间。Gluster实际上是可靠的。只是不是在这种情况下。

EN

回答 2

Stack Overflow用户

发布于 2017-03-21 17:36:47

我最终做的是使用CephFS并将其挂载到docker主机上。与glusterfs相比,它的写入速度还可以,甚至可能非常好。在CephFS上,读取速度非常快,GlusterFS也是如此。

这个设置适合我的需要,但是我不能跨主机使用共享的docker卷。我必须将挂载的文件系统绑定到docker容器中。虽然这不是世界末日,但我仍然在寻找一种方便快捷的方法,让我的卷跨越群中的所有主机。

目前,我正在尝试为CephFS构建一个Docker volume插件,以满足我的需求。我会保持更新,以防有人感兴趣。

票数 3
EN

Stack Overflow用户

发布于 2017-03-02 05:51:24

请注意,我还没有尝试过以下方法。

因为您的代码大部分是只读的,所以在我看来,您“只是”需要一个文件系统缓存。例如,运行在NFS之上的CacheFS。

由于可以将GlusterFS挂载为NFS,因此您应该能够将两者结合起来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42473622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档