Docker Swarm共享卷

目前,我正在构建一个Docker Swarm集群.它由3名经理和3名工人组成.我将在此设置上部署的应用程序由laravel后端组成,该后端需要在多个容器中提供其代码才能实现可伸缩性.我已经尝试了GlusterFS卷和带有Ceph后端的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中提取代码.这实际上是一个很好的解决方案,但是拉出代码并运行composer大约需要5分钟,当我推送更新时,我需要重新启动所有容器.

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

编辑:为什么在这种情况下胶合板不可靠?我可能在上面说错了…当在Gluster上使用带有卷驱动器插件的Docker卷时,Gluster是不可靠的.在创建服务时,大多数情况下都会很好地装入卷,但是如果在群集中发生重新调度,则很少会再次装入卷.稍后我将对此进行调查以确定出了什么问题,但是目前我没有很多空闲时间.糊状物实际上是固体.只是在这种情况下不行.

最佳答案
我最终最终要做的是使用CephFS并将其安装在docker主机上.写入速度还可以,甚至与glusterfs相比也可以.在CephFS上读取速度非常快,GlusterFS也是如此.

此设置适合我的需要,但是我无法在主机之间使用共享的Docker卷.我必须将已挂载的文件系统绑定到Docker容器中.尽管这还不是世界末日,但我仍在寻找一种方便快捷的方法来使卷遍及整个群集中的所有主机.

目前,我正在尝试为CephFS构建一个Docker卷插件以实现我的要求.如果有人感兴趣,我会及时更新.

相关文章

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Li...
1、什么是docker?答:docker是开源的应用容器引擎;开发人员把他们的应用及依赖包打包发布到容器当中。...
1、什么是namespace? 答:名称空间,作用隔离容器 2、namespace隔离有那些? 答:ipc:共享内存、消息队...
1、Docker能在非Linux平台(Windows+MacOS)上运行吗? 答:可以 2 、如何将一台宿主机的docker环境...
环境要求: IP hostname 192.168.1.1 node1 项目规划: 容器网段:172.16.10.0/24 NGINX:172.16.10.10...
文档上传地址:https://files.cnblogs.com/files/lin-strive/07-docker%E8%B7%A8%E4%B8%BB%E6%9C%BA%E7...