Docker Swarm共享卷

时间:2017-02-26 20:07:41

标签: docker docker-swarm docker-swarm-mode

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

目前的设置看起来像这样。我在docker之外有一个Percona集群,我在这些服务器上运行GlusterFS,只需将它们安装到Docker Workers中。

                                                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容器中,如下所示:

--mount type=bind,source=/mnt/client-data,target=/var/www/html/

这有效,但这很慢。页面加载时间大约为10秒,当未挂载文件时(它们存在于容器中),页面加载时间约为2-3秒。

我来到Flocker附近,这看起来非常有趣,但我认为flocker卷只能安装在一个容器上。这是真的吗?

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

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

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

2 个答案:

答案 0 :(得分:3)

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

此设置符合我的需求,但我无法在主机上使用共享泊坞窗卷。我必须将装入的文件系统绑定在docker容器中。虽然这不是世界末日,但我仍然在寻找一种方便快捷的方式让我的音量集中在群中的所有主机上。

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

答案 1 :(得分:0)

请注意,我没有尝试过以下操作。

由于您的代码大部分都是只读的,因此在我看来您“只是”需要文件系统缓存。例如,CacheFS在NFS之上运行。

由于GlusterFS可以作为NFS挂载,因此您应该可以将两者结合使用。