首页 文章

Docker Swarm共享卷

提问于
浏览
3

目前我正在构建一个Docker Swarm集群 . 它由3名经理和3名 Worker 组成 . 我将在此设置上部署的应用程序包含一个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

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

    此设置适合我的需要,但我不能在主机上使用共享docker卷 . 我必须将装入的文件系统绑定在docker容器中 . 虽然这不是世界末日,但我仍然在寻找一种方便快捷的方法让我的卷遍布群中的所有主机 .

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

  • 3

    请注意,我没有尝试过以下内容 .

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

    由于GlusterFS可以作为NFS安装,因此您应该能够将两者结合使用 .

相关问题