簡體   English   中英

Docker Swarm共享卷

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM