Docker Swarm共享卷

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

目前的设置看起来像这样。 我有一个泊坞窗外的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附近,这看起来非常有趣,但我认为一个植绒卷只能安装在一个容器上。 这是真的?

我现在正在尝试的另一个解决scheme是,每次创build一个新容器时,代码都会从git中拉出来。 这实际上是一个很好的解决scheme,但需要大约5分钟的时间来拉代码并运行composer php,当我推更新时,我需要重新启动所有的容器。

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

编辑:为什么在这种情况下gluster不可靠? 我可能在上面说错了…在Gluster上使用docker卷时,gluster是不可靠的,还有一个卷驱动插件。 创build服务时,卷的大部分时间安装得很好,但是如果重新安排在群中发生,卷很less会再次挂载。 我稍后会研究一下,以确定哪里出了问题,但目前我没有很多空闲时间。 Gluster实际上是坚实的。 只是不在这种情况下。

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

这种设置适合我的需求,但是我不能在主机间使用共享的docker卷。 我必须在docker容器中绑定已挂载的文件系统。 虽然这还不是世界末日,但我仍然在寻找一种方便快捷的方式,让我的书卷在群中的所有主人身上。

目前我正在尝试为CephFS构build一个Docker卷插件来实现我的要求。 如果有人感兴趣,我会保持更新。

请注意,我还没有尝试以下。

由于你的代码大部分是只读的,在我看来,你“只是”需要一个文件系统caching。 例如运行在NFS之上的CacheFS。

由于GlusterFS可以挂载为NFS,所以您应该能够将这两者结合起来。