docker~swarm搭建docker高可用集群

来源:http://www.cnblogs.com/lori/archive/2017/07/27/7243324.html
-Advertisement-
Play Games

回到目錄 Swarm概念 Swarm是Docker公司推出的用來管理docker集群,它將一群Docker宿主機變成一個單一的,虛擬的主機。Swarm使用標準的Docker API介面作為其前端訪問入口,換言之,各種形式的Docker Client(docker client in Go, dock ...


回到目錄

Swarm概念

  Swarm是Docker公司推出的用來管理docker集群,它將一群Docker宿主機變成一個單一的,虛擬的主機。Swarm使用標準的Docker API介面作為其前端訪問入口,換言之,各種形式的Docker Client(docker client in Go, docker_py, docker等)均可以直接與Swarm通信。Swarm幾乎全部用go語言來完成開發,Swarm0.2發佈,相比0.1版本,0.2版本增加了一個新的策略來調度集群中的容器,使得在可用的節點上傳播它們,以及支持更多的Docker命令以及集群驅動。
  Swarm deamon只是一個調度器(Scheduler)加路由器(router),Swarm自己不運行容器,它只是接受docker客戶端發送過來的請求,調度適合的節點來運行容器,這意味著,即使Swarm由於某些原因掛掉了,集群中的節點也會照常運行,當Swarm重新恢復運行之後,它會收集重建集群信息.

Swarm結構圖

Swarm的基本命令

docker node 用來顯示集群的節點,預設建立時只有一個節點,當然也就談不上高可用了,可以使用docker node --help來查看所有node參數

集群初始化 docker swarm init 

當已經被初始化後,就不能重新執行這個操作了,使用docker node ls 來查看剛建立的集群

集群中的管理節點和工作節點功能圖

 

添加管理節點 docker swarm join

Docker Swarm 命令中還需要添加一些選項:

* join:表明一個新的節點將被添加進 Swarm

* –manager:表明節點的性質(manager vs worker)

* –listen-addr:讓一個新添加的節點可以訪問 Swarm 內的其他節點

* 最後的參數就是第一管理節點的地址(即這一命令將被送到的那個節點)

註意:由於 –auto-accept manager 選項會在 Swarm 初始化的過程中被提供,所以第二管理節點會被自動接受。如果沒有這一選項,那麼第二管理節點需要被第一管理節點手動接受。

$ MANAGER2_IP=$(docker-machine ip manager2)
docker-machine ssh manager2 docker swarm join --manager --listen-addr $MANAGER2_IP:2377 $MANAGER1_IP:2377

Swarn部署時使用的腳本,來自網路

下麵是一小段用來創建 Docker 主機並部署 Swarm 的 Shell 腳本。當然了,管理/工作節點的數字都是可以隨意改動的。
註意:創建兩個管理節點和兩個工作節點,僅僅是用來作示範。在工業生產中,我們可能需要在集群里搭建 3 個管理節點和 5 個工作節點。

# Define the number of managers/workers
MANAGER=3
WORKER=5

# Create the Docker hosts
for i in $(seq 1 $MANAGER); do docker-machine create --driver virtualbox manager$i; done
for i in $(seq 1 $WORKER); do docker-machine create --driver virtualbox worker$i; done

# Init the swarm
docker-machine ssh manager1 docker swarm init --auto-accept manager --auto-accept worker --listen-addr $(docker-machine ip manager1):2377

# Add additional manager(s)
for i in $(seq 2 $MANAGER); do docker-machine ssh manager$i docker swarm join --manager --listen-addr $(docker-machine ip manager$i):2377 $(docker-machine ip manager1):2377; done

# Add workers
for i in $(seq 1 $WORKER); do docker-machine ssh worker$i docker swarm join --listen-addr $(docker-machine ip worker$i):2377 $(docker-machine ip manager1):2377; done

對於上面文章中,只提到了集群,而沒有談到如何去使用,在建立集群後,服務的部署我們可以用

docker stack deploy  -c test.yml test

下麵給出自己寫的一個服務,版本3的

version: "3"

services:
  loggerapi:
    image: logger.api
    build:
      context: ./src/Logger.Api
      dockerfile: Dockerfile
    ports:
      - "5000:80"
    networks:
      - ingress

 loggermanager:
    image: logger.manager
    build:
      context: ./src/Logger.Manager
      dockerfile: Dockerfile
    ports:
      - "5050:80"
    networks:
      - ingress

networks:
  ingress:

這裡有個服務要註意,服務的名稱一定不能有點,如logger.manager這是錯誤的!

來建立一個服務,同時可以使用docker service來查看已經運行的服務!

還有一點要註意,yml在進行v3版後,不再支持build,也就是說,你需要先把鏡像建立好才行!

 

回到目錄

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天,登錄伺服器準備修改資料庫的一些東西。但輸入密碼,卻進不了資料庫並提示一個錯誤,如下圖 再確認密碼沒錯的情況下,還是進不了資料庫。便在網上找到瞭解決方法,記錄下來,供參考學習。 解決方法: 總體思路:(Linux系統下)關閉MySQL服務,配置MySQL,使其免密碼登錄,然後重新設置密碼,刷新數 ...
  • 恢復內容開始 (這是轉載別人的,因為我覺得很有用,每次都是參考這個的第二種方法解決的,不管你聽不聽得到,先說聲謝謝!也記下來方便大家看看) mysql解決遠程不能訪問的二種方法,需要的朋友可以參考一下: 1、在/etc/mysql/my.cnf中的[mysqld]段註釋掉bind-address = ...
  • SQL: select * from PT_ORG_INFO START WITH id='102' CONNECT BY PRIOR id=par_id 連表遞歸查詢SQL: select info.* from PT_CAMERA_INFO info join (select * from PT ...
  • 目前mongodb已經出到3.x,相對於2.x改動較大,本著學新不學舊的原則來搗鼓nosql資料庫。最初想著apt-get安裝但是軟體源上都是2.x的,遂下載好後傳到伺服器安裝。 1.下載 不得不說國內的牆太厲害,連mongodb這類人畜無害的都擋了,雖然能夠訪問官網也能下載,但是速度從來不超過三十 ...
  • 漏洞編號:CVE-2017-8464 漏洞等級:嚴重 漏洞概要:如果用戶打開攻擊者精心構造的惡意LNK文件,則會造成遠程代碼執行。成功利用此漏洞的攻擊者可以獲得與本地用戶相同的用戶許可權。 攻擊者可以通過可移動驅動器(U盤)或遠程共用等方式將包含惡意LNK文件和與之相關的惡意二進位文件傳播給用戶。當用 ...
  • 我們可以採用類似安全模式的方法修改初始密碼先執行命令 mysqld_safe --skip-grant-tables & (設置成安全模式)&,表示在後臺運行,不再後臺運行的話,就再打開一個終端咯。# mysqlmysql> use mysql;mysql> update user set auth ...
  • zabbix版本: 3.2.5 zabbix 自帶的windows模板中沒有監控cpu使用率的,可以在模板里自己添加 1. 配置 > 模板 > Template OS Windows 2. 監控項 > 添加監控項 應用集 : CPU 3. 圖形 > 添加圖形 取個名稱, 監控項選擇剛纔的新建的 4. ...
  • 紅帽安裝rpm安裝MySQL時爆出警告: 警告:MySQL-server-5.5.46-1.linux2.6.x86_64.rpm: 頭V3 DSA/SHA1 Signature, 密鑰 ID 5072e1f5: NOKEY 原因:這是由於yum安裝了舊版本的GPG keys造成的 解決辦法:後面加 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...