11. Docker Swarm(二)

1、前言

上一篇中我們利用Docker Swarm搭建了基礎的集群環境。那么今天我們就來驗證以下該集群的可用性。上一篇的示例中,我創建了3個實例副本,并且通過訪問http://192.168.74.132:8080得到我們的頁面。

2、驗證高可用

1)我們可以通過以下命令查看當前應用的節點信息:

docker service ps swarm_demo

可以看出在IP為132,133,134上各啟動了一個容器來運行。

2)此時,我們將134上的節點容器關掉:

# 查看容器信息,拿到容器ID
docker ps# 停止該容器
docker stop <容器ID>

3)停止完后,我們再到master節點上查看節點信息:

可以看到134節點上出現運行的容器宕機了,但是由于我們將節點的副本數量設置為3,所以Swarm集群自動的又重新啟動了一個容器。通過當前狀態可以看到啟動的時間。

4)如果我們把134的docker容器整個停止掉:

5)我們再來查看master節點節點信息:

我們會發現3個節點副本中,有2個啟動在了132的節點上。

而我們依然可以訪問我們的應用:

3、熱更新

Docker Swarm實現平滑升級,也就是不停機更新。

1)更新Dockerfile文件,版本號version改為2:

FROM nginx
RUN echo '<h1> My first Swarm demo, version: 2</h1>' > /usr/share/nginx/html/index.html

2)重新編譯鏡像:

docker build -t pengyaohuang/swarm_nginx_demo:2 .

3)上傳Docker Hub:

docker login
docker push pengyaohuang/swarm_nginx_demo:2

4)更新之前Swarm部署的服務:

docker service update --image pengyaohuang/swarm_nginx_demo:2 swarm_demo

5)訪問應用:

4、數據持久化

與單機環境一樣,Docker Swarm集群中的容器也是無狀態的服務。如果在Swarm集群行了MySQL 等有狀態的服務,若沒有將數據掛載到宿主機中,那么一旦容器被銷毀,則意味著據會丟失。

Docker Swarm集群提供了兩種方式解決數據持久化問題:

  1. volume模式:默認模式,將工作節點宿主機的目錄同步到容器內。
  2. NFS模式:通過網絡文件系統實現數據持久化。

4.1、volume掛載

這里的數據卷方式與docker容器下的數據卷完全一樣。可以使用以下命令掛載數據卷:

docker service create -p 8080:80 --replicas 3 --name swarm_demo \--mount type=volume,src=myvolume,dst=/usr/share/nginx/html/ \pengyaohuang/swarm_nginx_demo:1

這里使用--mount進行掛載數據卷。這里將容器/usr/share/nginx/html/目錄掛載到宿主機定義的myvolume目錄下。

查看數據卷信息,可以使用:

docker volume ls

通過volume模式掛載的數據卷,可以實現容器與宿主機間的數據持久化,但是無法實現群中各個節點的數據共享。

4.2、NFS

為了解決volume無法在各個節點中共享數據的問題,Swarm 集群中更常用的一種方式是,使用NFS(網絡文件系統來實現數據的共享與持久化。

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

系統結構圖如下:

其中,NFS可被看成是 NFS 的服務器端,而 Docker 節點(master 節點、node1 節點、node2 節點)則可以被看成是NFS的客戶端。因此,整個系統是 Client-Server 結構。

為了方便進行測試,可以將 master 節點作為 NFS Server。但在實際的環境中,一般可以單獨搭建一個節點作為NFS Server。

1)安裝NFS:

yum install -y nfs-utils
systemctl start nfs

2)master節點中編輯/etc/exports文件:

# 輸入以下配置信息
/nfs *(rw,sync,no_root_squash)

參數說明:

  • /nfs:NFS共享目錄
  • *:所有網段可以訪問主機網段
  • rw:可讀寫權限
  • sync:數據傳輸采用同步方式,async表示異步
  • no_root_squash:NFS共享目錄屬性

3)master節點上創建/nfs目錄:

mkdir /nfs
# 重啟nfs節點
systemctl restart nfs

4)Node1節點上啟動NFS客戶端:

systemctl start rpcbind

5)在Node1節點上掛載NFS目錄:

# 創建node1節點的目錄
mkdir /nfs-node1
# 將master節點的目錄/nfs掛載到node1節點的nfs-node1上
mount -t nfs 192.168.74.132:/nfs /nfs-node1

6)測試,node1目錄上新建一個文件:

Node1節點上:

master節點上:

可以看到文件已經進行了同步。

7)Swarm集群中創建服務:

docker service create --replicas 3 --name swarm_demo -p 8080:80 \--mount 'type=volume,src=mynfsvol,dst=/usr/share/nginx/html,volume-driver=local,volume-nocopy=true,volume-opt=type=nfs,volume-opt=device=192.168.74.132:/nfs,"volume-opt=o=addr=192.168.74.132,vers=4,soft,timeo=180,bg,tcp,rw"' \pengyaohuang/swarm_nginx_demo:1

參數說明:

  • type=volume:數據存儲類型
  • src=mynfsvol:數據卷名稱
  • dst=/usr/share/nginx/html:掛載到容器中的目錄
  • volume-opt=type=nfs:數據卷的類型
  • volume-opt=device=192.168.74.132:/nfs:掛載的 NFS 目錄
  • volume-opt=o=addr=192.168.74.132: NFS 服務器的地址。

即可完成掛載。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35927.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35927.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35927.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

13個頂級AI代碼助手排行榜【2023最新】

AI代碼助手&#xff08;AI Coding Assistant&#xff09;是一種利用人工智能幫助開發人員更快、更準確地編寫代碼的軟件工具。 它可以通過根據提示生成代碼或在你實時編寫代碼時建議自動完成代碼來實現此目的。 以下是AI代碼助手可以做的一些事情&#xff1a; 與你使用的流行代…

YOLOv5可視化界面

Pyside6可視化界面 安裝Pyside6 激活之前的虛擬環境yolov5 在該環境的終端輸入以下命令 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyside6輸入where python找到當前使用的Python的路徑 找到該路徑下的designer.exe文件&#xff08;/Lib/site-packages/PySi…

布置Zabbix監控

一、在 Web 頁面中添加 agent 主機 1.1打開Zabbix的Web頁面 2.2在 Web 頁面中添加 agent 主機 二、在 Web 頁面創建自定義監控項模板 2.1創建模版

《Java面向對象程序設計》學習筆記——第 8 章 設計模式

?專欄&#xff1a;《Java面向對象程序設計》學習筆記 第 8 章 設計模式 一個好的設計系統往往是易維護、易擴展、易復用的。 8.1 設計模式簡介 8.1.1 什么是設計模式 一個設計模式 (pattern) 是針對某一類問題的最佳解決方案&#xff0c;而且己經被成功應用于許多系統的設…

[QT/C++]如何得知鼠標事件是由觸摸事件轉換而來的,使得鼠標觸摸事件分離

依據來源&#xff1a;https://doc.qt.io/qt-5/qml-qtquick-mouseevent.html 具體是在event事件或者mouse系列事件中捕獲到鼠標事件后&#xff0c;用如下代碼判斷鼠標事件是否由觸摸事件轉換而來的 if(mouseEvent->source()Qt::MouseEventSynthesizedBySystem){qDebug()<&…

Chrome

Chrome 簡介下載 簡介 Chrome 是由 Google 開發的一款流行的網絡瀏覽器。它以其快速的性能、強大的功能和用戶友好的界面而聞名&#xff0c;并且在全球范圍內被廣泛使用。Chrome 支持多種操作系統&#xff0c;包括 Windows、macOS、Linux 和移動平臺。 Chrome官網: https://ww…

css3新增選擇器總結

目錄 一、屬性選擇器 二、結構偽類選擇器 三、偽元素選擇器 四、UI狀態偽類選擇器 五、反選偽類選擇器 六、target選擇器 七、父親選擇器、后代選擇器 八、相鄰兄弟選擇器、兄弟們選擇器 一、屬性選擇器 &#xff08;除IE6外的大部分瀏覽器支持&#xff09; E&#…

嵌入式面試筆試刷題(day10)

文章目錄 前言一、數組和鏈表的區別二、什么是內存對齊三、IIC的時序四、static作用五、查看tty設備的方法六、查找指定文件命令七、三次握手和四次揮手1.三次握手2.四次揮手 八、半關閉狀態九、字節流和數據報總結 前言 本篇文章繼續講解筆試和面試。 一、數組和鏈表的區別 …

PHP 使用ThinkPHP實現電子郵件發送示例

文章目錄 首先我們需要設置我們的郵箱客戶端授權&#xff0c;獲取到授權碼找到我們的郵箱設置去賬號中找到這一堆服務&#xff0c;找到后開啟smtp服務開啟服務后管理服務 接下來需要去下載相應的第三方類庫(我這里使用的是PHPMailer)在thinkPHP中封裝一下郵件服務類實際調用效果…

Ajax_4(進階)同步異步+ 宏任務微任務 + Promise鏈 + async終極解決方案 +事件循環原理 + 綜合案例

Ajax(進階) 文章目錄 Ajax(進階)01-同步代碼和異步代碼什么是同步代碼&#xff1f;什么是異步代碼&#xff1f;代碼閱讀 02-回調函數地域概念缺點代碼示例 03-Promise鏈式調用概念細節好處代碼示例 04-Promise鏈式應用代碼示例 05-async函數和await概念代碼示例 06-async和awai…

Mysql 建索引規范

索引規范 今天在建線上表的時候&#xff0c;做了一個varchar的索引&#xff0c;運維說varchar的索引會占用很大的內存。 于是 上網搜了一下建索引規范 一、建表規約 【強制】&#xff08;1&#xff09; 存儲引擎必須使用InnoDB 解讀&#xff1a;InnoDB支持事物、行級鎖、并發…

數據結構—圖的應用

6.4圖的應用 概念回顧—生成樹 生成樹&#xff1a;所有頂點均由邊連接在一起&#xff0c;但不存在回路的圖。 一個圖可以有許多棵不同的生成樹、含有n個頂點 n-1 條邊的圖不一定是生成樹所有生成樹具有以下共同特點 生成樹的頂點個數與圖的頂點個數相同&#xff1b;生成樹是圖的…

如何運用小程序技術閉環運營鏈路?

如何通過線上小程序獲取用戶線索&#xff0c;提高企業抗風險能力&#xff0c;建立有效的營銷數字化系統一直是困擾每一個小程序開發者與運營者的問題。 當我們選擇使用小程序設計自己的運營流程時&#xff0c;從「推廣」到「轉化」&#xff0c;再到最終的「留存」都是運營過程…

ABeam×Startup丨德碩管理咨詢(深圳)創新研究團隊前往靈境至維·既明科技進行拜訪交流

近日&#xff0c;德碩管理咨詢&#xff08;深圳&#xff09;&#xff08;以下簡稱“ABeam-SZ”&#xff09;創新研究團隊一行前往靈境至維既明科技有限公司&#xff08;以下簡稱“靈境至維”&#xff09;進行拜訪交流&#xff0c;探討線上虛擬空間的商業模式。 現場合影 &…

前臺測試轉后臺優化歷險記,應屆生薪資8K逆襲,從此扶搖直上九萬里!

優橙教育每一期都會有不少從前臺測試轉到后臺的小伙伴應邀而來&#xff0c;其實每個人的經歷都是大致相同的&#xff0c;這時候肯定會有很多小伙伴問&#xff0c;為什么出來花錢出來參加培訓而不是在項目上轉呢&#xff1f; 或許是因為在項目上摸爬滾打太久了&#xff0c;吃不下…

Qt掃盲-QWidget理論使用總結

QWidget理論使用總結 一、概述二、頂層 控件 和子 控件三、復合控件四、自定義控件和繪制五、大小提示和大小策略六、事件七、一組函數和屬性八、QWidget樣式表九、透明度和雙緩沖十、創建半透明窗口 一、概述 widget 是用戶界面的最小單位&#xff1a;它從window系統接收鼠標…

Jsoup爬取簡單信息

1. 豆瓣圖書最受關注 1.1 創建SpringBoot項目或者Maven項目 1.2 引入jsoup <dependency><!-- jsoup HTML parser library https://jsoup.org/ --><groupId>org.jsoup</groupId><artifactId>jsoup</artifactId><version>1.15.3<…

Qt應用開發(基礎篇)——堆棧窗口 QStackedWidget

一、前言 QStackedWidget繼承于QFrame&#xff0c;QFrame繼承于QWidget&#xff0c;是Qt常用的堆棧窗口部件。 框架類QFrame介紹 QStackedWidget堆棧窗口&#xff0c;根據下標切換&#xff0c;一次顯示一個小部件&#xff0c;常用于應用界面切換、圖片輪詢播放等場景。 二、QSt…

用Java調用C#的WebService接口

這是一個用Java調用C#版程序的例子,廢話不多說,上代碼: C#接口代碼: using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Web.Services.Description;[WebService(Namespace = " http://www.ta…

如何在Springboot項目中讀取zip壓縮包并且把文件導出成zip壓縮包

文章目錄 設想場景實現流程小結 設想場景 為方便老師錄入大量學生圖片信息&#xff0c;在添加照片時&#xff0c;學生的相關資料以身份證號碼圖片描述命名如 &#xff08;1231231234567一寸照片.jpg&#xff09; &#xff08;1231231234567身份證正面照片.jpg&#xff09; &am…