2017-02-26 172 views
3

目前我正在構建一個Docker Swarm集羣。它由3名經理和3名工人組成。我將在此設置上部署的應用程序由一個laravel後端組成,該後端需要在多個容器中提供其代碼以實現可伸縮性。我已經嘗試將GlusterFS卷和rephray作爲Ceph後端作爲我的卷的共享存儲。 GlusterFS不可靠,Ceph在我的情況下有點矯枉過正,太難了:)Docker Swarm共享卷

當前的設置看起來像這樣。我在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,這看起來很有趣,但我認爲植絨卷只能安裝在一個容器上。這是真的?

我現在正在嘗試的另一個解決方案是,每次創建新容器時都會從git中拉出代碼。這實際上是一個很好的解決方案,但需要大約5分鐘的時間才能拉動代碼並運行作曲家,當我推送更新時,我需要重新啓動所有容器。

在多個主機上的不同容器中共享我的代碼的最佳解決方案是什麼? (甚至是數據中心)目前我可以訪問許多不同的存儲後端(Ceph,NFS,gluster),創建一個新的並不是問題。

編輯:爲什麼在這種情況下gluster不可靠?我可能在上面說錯了......在Gluster上使用Docker卷時,Gluster不可靠,並帶有卷驅動程序插件。在創建服務時,卷大部分時間安裝得很好,但是如果在羣中發生重新計劃,卷很少會再次掛載。我稍後會研究這個問題,以確定哪裏出了問題,但我現在沒有很多空閒時間。 Gluster實際上是堅實的。只是不在這種情況下。

+0

讀者理解GlusterFS如何不可靠會很有意思。 – user239558

+0

我會解釋爲什麼它在這種情況下在今天晚些時候不可靠,首先我必須完成我的工作:)但是它與在Gluster中創建docker卷有關,大約50%的時間都會失敗。 –

回答

0

請注意,我還沒有嘗試過以下內容。

由於你的代碼大部分是隻讀的,在我看來,你「只是」需要一個文件系統緩存。例如運行在NFS之上的CacheFS。

由於GlusterFS可以掛載爲NFS,因此您應該可以將兩者結合使用。

3

我最終做的是使用CephFS並將其安裝在docker主機上。寫入速度是可以的,甚至可以和glusterfs相媲美。 CephFS的讀取速度非常快,GlusterFS也是如此。

此設置適合我的需要,但我無法使用跨主機的共享碼頭卷。我必須在docker容器中綁定已安裝的文件系統。雖然這不是世界末日,但我仍然在尋找一種方便快捷的方式,讓我的書卷在羣中的所有主持人身上。

目前我正在嘗試爲CephFS構建Docker卷插件以實現我的要求。如果有人感興趣,我會保持更新。