2016-11-04 70 views
3

我使用Docker Swarm做了第一步,並想知道如何處理使用持久數據(如redis,elasticsearch或數據庫)的服務。Docker Swarm與數據:共享卷vs集羣vs單實例

我發現了很多關於如何使用docker swarm配置redis/elasticsearch/database集羣的教程 - 但使用共享存儲不是更容易嗎?例如,我使用Azure,因此我可以使用單個Azure文件存儲作爲redis/elasticsearch /數據庫卷,並讓所有節點都安裝此文件存儲。 這是一種可接受的方法,還是存在一些明顯的缺點(例如,當兩個或多個數據庫實例試圖在該存儲上同時寫入時)?

是否推薦使用這樣的「數據」服務?每個節點?還是應該將Docker Swarm用於前端服務,並且只有一個redis/elasticsearch /數據庫服務?

回答

1

如果要使用從多個應用程序實例訪問的共享文件夾,而不是應用程序本身,則需要設計一種避免數據損壞的方法(沒有給定的文件是從多個應用程序同時寫入的。叫做互斥鎖)

我知道的所有數據庫都沒有這樣設計,所以你不能在共享存儲中使用它們。

他們通常做的是連接集羣中的所有數據庫,同步是在軟件級完成的。

+0

謝謝你的想法!現在我正在計劃一個複雜的羣集,其中包含不能無狀態的各種服務。我的發現與您的發現相同:1.避免使用共享卷2.如果服務提供共享卷,請使用羣集功能3.由於彈性原因,避免使用服務的單個實例(在生產中)。我遇到的另一個問題是:(例如)如果我的羣集數據庫中有一個死掉了,我的節點應該如何在同一臺機器上進行響應?我的答案是:將整個機器標記爲「生病」,因此應該完全無法訪問和/或重新啓動。 – Munchkin

+0

如果你將db容器作爲服務部署,你可以使用健康檢查,所以如果容器真的死於docker swarm會殺死它並啓動一個新的,這意味着只有幾秒鐘的停機時間 如果你使用mysql,我目前正在工作在一個非常簡單的羣集解決方案中,您可以部署多個實例,並且它們將全部使用gallera羣集同步,因此丟失一個並不是問題 尚未準備好,但可能需要幾周的時間。 https://github.com/vipconsult/percona-docker/tree/master/pxc-57 –