目前我正在构建一个 Docker Swarm 集群。它由3名经理和3名工人组成。我将在此设置上部署的应用程序包含一个 laravel 后端,该后端需要其代码在多个容器中以实现可扩展性。我已经尝试过使用 Ceph 后端的 GlusterFS 卷和 rex-ray 作为我的卷的共享存储。GlusterFS 不可靠,Ceph 在我的情况下有点矫枉过正而且太难了:)
当前设置看起来像这样。我在 docker 之外有一个 Percona 集群,我在这些服务器上运行 GlusterFS 并将它们简单地挂载到 Docker Worker 中。
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,这看起来很有趣,但我认为植绒卷只能安装在一个容器上。这是真的?
我现在正在尝试的另一个解决方案是,每次创建新容器时都会从 git 中提取代码。这实际上是一个很好的解决方案,但提取代码并运行 composer 大约需要 5 分钟,当我推送更新时,我需要重新启动所有容器。
在多个主机上的不同容器之间共享我的代码的最佳解决方案是什么?(甚至是数据中心)目前我可以访问许多不同的存储后端(Ceph、NFS、gluster)并且创建一个新的后端没有问题。
编辑:为什么在这种情况下 gluster 不可靠?我可能在上面说错了......在 Gluster 上使用 docker 卷时,Gluster 不可靠,带有卷驱动程序插件。在创建服务时,卷在大多数情况下都能很好地挂载,但如果集群中发生重新调度,卷很少会再次挂载。我稍后会对此进行调查以确定出了什么问题,但我目前没有太多空闲时间。Gluster 实际上是固体。只是在这种情况下不是。