[英]Docker Swarm shared volumes
目前我正在構建一個Docker Swarm集群。 它由3名經理和3名工人組成。 我將在此設置上部署的應用程序包含一個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是堅實的。 只是不在這種情況下。
我最終做的是使用CephFS並將其掛載在docker主機上。 寫入速度還可以,與glusterfs相比,甚至可能非常出色。 在CephFS上讀取速度非常快,GlusterFS的情況也是如此。
此設置適合我的需要,但我不能在主機上使用共享docker卷。 我必須將裝入的文件系統綁定在docker容器中。 雖然這不是世界末日,但我仍然在尋找一種方便快捷的方式讓我的卷遍布群中的所有主機。
目前我正在嘗試為CephFS構建一個Docker卷插件以滿足我的要求。 如果有人有興趣我會保持更新。
請注意,我沒有嘗試過以下內容。
由於您的代碼大部分是只讀的,因此在我看來您“只”需要文件系統緩存。 例如,CacheFS在NFS之上運行。
由於GlusterFS可以作為NFS安裝,因此您應該能夠將兩者結合使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.