【趙強老師】Docker Swarm集羣的數據持久化

如果Docker Swarm集羣中運行了mysql、nginx等服務,這些服務的數據如果沒有掛載到宿主機中,那麼容器一旦停止運行,那就意味着數據丟失。

有什麼方法可以解決swarm集羣中運行的服務能夠數據持久化呢?我們可以通過volme、nfs等方法來實現swarm集羣應用數據持久化,其實也和docker數據持久化的形式是一樣的。

可以用兩種方式來實現:

  1. volume 默認模式:工作節點宿主機數據同步到容器內。

  2. volume NFS 共享存儲模式:管理節點宿主同步到工作節點宿主,工作節點宿主同步到容器。


一、通過volume實現數據持久化

注意:這種方式各個節點的數據不能共享。

卷是繞過聯合文件系統的一個或多個容器內的特定目錄。 卷被設計爲保持數據,與容器的生命週期無關。 因此,Docker在刪除容器時不會自動刪除卷,也不會“垃圾收集”不再由容器引用的卷。 也稱爲:數據卷。

 

 

使用的語法格式如下:  

   

 

使用案例:  

  •  在Swarm上部署服務,同時指定相應的數據卷

docker service create -p 7788:80 --replicas 3 --name myswarmtest \
--mount type=volume,src=myvolumn,dst=/usr/share/nginx/html/ collenzhao/mynginx:v1

 

  •  查看數據卷

docker volume ls

 

 

  • 查看數據卷掛載的目錄

docker volume  inspect myvolumn

 

二、通過NFS實現數據持久化  

NFS(Network File System)即網絡文件系統,它允許網絡中的計算機之間通過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用可以透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件一樣。  

   

 

爲了方便我們進行測試,單獨準備一臺機器作爲NFS的服務器:node3。接下來,我們就需要安裝NFS了。  

 

1、所有節點安裝NFS  

yum -y install nfs-utils

   

 

2、NFS服務器端的部署    

  • 開啓NFS服務

systemctl enable nfs
systemctl start nfs

   

  • 創建NFS目錄

mkdir /nfs

   

  • 編輯NFS配置文件

vi /etc/exports

輸入以下內容:
/nfs *(rw,sync,no_root_squash)

參數說明:
/nfs : 共享的目錄
* : 可以訪問的主機網段,星號表示所有網段。
rw : 可讀寫權限,只讀權限ro
sync : 同步,數據更安全,速度慢
async : 異步,速度快,效率高,安全性低
no_root_squash :NFS 服務共享的目錄的屬性, 如果用戶是root, 對這個目錄就有root的權限

     

  • 重啓NFS

systemctl restart nfs

     

3、NFS客戶端的部署    

  • 啓動NFS客戶端

systemctl start rpcbind

     

  •  測試掛載nfs共享目錄

mount -t nfs 192.168.15.140:/nfs /mynfs

其中:192.168.15.140爲node3(NFS服務器的地址)

     

  •  在文件/mynfs/a.txt 輸入一些內容,在nfs服務器端查看是否能夠看到剛纔輸入的內容。也可以通過下面的語句卸載NFS目錄。

umount /mynfs/

     

 4、基於NFS共享目錄,創建Swarm集羣服務

docker service create \
--replicas 3 \
--name my-nginx \
-p 7788:80 \
--mount 'type=volume,src=my-nfs-vol,dst=/usr/share/nginx/html,volume-driver=local,volume-nocopy=true,volume-opt=type=nfs,volume-opt=device=192.168.15.140:/nfs,"volume-opt=o=addr=192.168.15.140,vers=4,soft,timeo=180,bg,tcp,rw"' \
collenzhao/mynginx:v1

     

 參數說明:

       

 

5、驗證實驗環境      

  • 在Manager節點上,查看服務和數據卷目錄

docker service ls

     

docker volume ls

     

 

  • 查看node1數據卷目錄

docker volume ls

     

 

  • 查看node2數據卷目錄

docker volume ls

     

 

  •  在任意一個節點上,進入數據卷共享目錄修改a.html

     

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章