目前,我正在构建一个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是不可靠的.在创建服务时,大多数情况下都会很好地装入卷,但是如果在群集中发生重新调度,则很少会再次装入卷.稍后我将对此进行调查以确定出了什么问题,但是目前我没有很多空闲时间.糊状物实际上是固体.只是在这种情况下不行.
最佳答案