日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker Swarm建立服务器集群

發布時間:2023/12/10 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Docker Swarm建立服务器集群 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Docker Swarm建立服務器集群

  • 一、Docker Swarm簡介
    • 1. 集群模式
    • 2. 管理節點--Manager
  • 二、Docker Swarm的配置及使用
  • 三、Docker Service向集群中添加服務
  • 四、Docker Stack部署集群

一、Docker Swarm簡介

1. 集群模式

這是Docker官網給出的一張swarm原理圖,即swarm就是一個或多個Docker Engine的集群,負責集群的管理和編排。


Manager負責維持集群狀態并進行調度服務。(基于Raft算法)
Worker是Docker Engine的實例,其唯一目的是執行容器。工作程序節點不參與Raft分布式狀態,不制定調度決策。

Raft(共識算法)原本是一種針對簡化版拜占庭將軍問題的解決方法。但被廣泛映射在分布式系統上,解決集群狀態下會遇到的各種問題。

  • Raft算法將所有節點分為Follower,Candidate,Leader三種狀態。分別為追隨節點,選舉節點,管理節點。
  • Raft算法主要分為兩個過程,選主和復制日志。其中選主故名思意,就是各節點通過投票選出Leader節點;復制日志這里舉一個例子,比如服務器A(Leader)接收到用戶1傳來的更新數據庫請求,要存入數據temp,此時A會將該更新請求同步至服務器B(Follower)和服務器C(Follower),B和C收到之后將數據暫時存在本地,將其狀態置為UnCommitted,并返回OK,A收到半數Follower節點返回后,將數據寫入并返回成功給用戶1,此時B,C再將數據提交狀態置為Committed。

上面大致介紹了Raft算法,具體的算法執行流程,可以在這里看到:Raft算法

2. 管理節點–Manager

下面是官網給出的Docker swarm集群的四點要求:

  • 一個由三名經理組成的群體最多可以容忍一名經理的損失。
  • 五個管理器群最多可以同時丟失兩個管理器節點。
  • 一個N管理器群集最多可以容忍管理器的丟失 (N-1)/2。
  • Docker建議最多為七個管理器節點。

重要說明:添加更多管理器并不意味著增加可伸縮性或更高性能。通常,情況恰恰相反。
說明。
為什么要強調管理群集的可用節點數必須大于總結點數的一半?
首先,集群在節點之間通信不可達的情況下,集群會分裂成不同的小集群,小集群各自選出自己的Leader節點,導致原有的集群出現多個Leader節點的情況,當各集群重新可以通信時,多個Leader節點將使得群集發生紊亂,我們將這種情況稱為腦裂。
這里給出一個文章中舉出的例子幫助理解:
(1) 假如集群有 5 個節點,發生了腦裂,腦裂成了A、B兩個小集群:

(a) A : 1個節點 ,B :4個節點 , 或 A、B互換(b) A : 2個節點, B :3個節點 , 或 A、B互換上面這兩種情況下,A、B中總會有一個小集群滿足 可用節點數量 > 總節點數量/2 。所以集群仍然能夠選舉出leader , 仍然能對外提供服務,只不過是有一部分節點失效了而已。

(2) 假如集群有4個節點,同樣發生腦裂,腦裂成了A、B兩個小集群:

(a) A:1個節點 , B:3個節點, 或 A、B互換 (b) A:2個節點 , B:2個節點可以看出,情況(a) 是滿足選舉條件的,與(1)中的例子相同。 但是情況(b) 就不同了,因為A和B都是2個節點,都不滿足 可用節點數量 > 總節點數量/2 的選舉條件, 所以此時集群就徹底不能提供服務了。

結論:節點數量是奇數個的情況下, 集群總能對外提供服務(即使損失了一部分節點);如果節點數量是偶數個,會存在集群不能用的可能性(腦裂成兩個均等的子集群的時候)。

二、Docker Swarm的配置及使用

  • 準備四臺安裝了docker的阿里云服務器。
  • 將172.24.111.113作為Manager節點創建集群。由于四臺服務器在同一地區,私有IP可以相互ping通,所以這里可以使用私有IP作為docker swarm的廣播IP
  • docker swarm init --advertise-addr 172.24.111.116

    運行后出現如下成功提示:

    3. 將其他服務器加入該集群。

    docker swarm join-token worker docker swarm join-token manager

    運行成功后,我們會拿到加入該集群所需的相應令牌。

    我們只需要在其他服務器中,輸入對應令牌,即可以相應的身份加入到集群中。

    docker swarm join --token 對應令牌

    運行后出現如下成功提示:

    如果想要退出集群,直接輸入下面的命令:

    docker swarm leave
  • 查看建立完畢的集群。
  • docker node ls


    Reachable,Leader節點均屬于Manager節點,只有Manager節點才可以參與選舉
    你必須實時保證可用Manager節點數大于總Manager節點數的一半。如果我們現在停止三號節點的運行,由于運行的Manager只剩下一個,會出現如下圖提示:

    三、Docker Service向集群中添加服務

    docker service命令類似于docker run,前者是運行一個服務,支持增擴容,只允許在集群中使用;后者單純是一個容器,不支持增擴容。

    replicated隨機分配給任一節點,global模式為全局所有節點統一分配

    docker service create --name 服務名A --mode replicated/global 鏡像名B # 我們根據對應鏡像,在集群中運行一個服務。注意這個服務會隨機運行在集群中的任何一個服務器中。 # mode 定義該服務是隨機一個節點運行一個副本還是所有節點均運行一個副本 docker service update --replicas 10 A # 擴容,在這個集群中運行10個A服務 docker service update --replicas 1 A # 縮容,在這個集群中運行1個A服務 docker service scale A=服務數量 # 等同于上面的update命令,都是用來擴縮容 命令功能
    docker service ls查看全部服務
    docker service ps 服務名A查看A的所有進程
    docker service inspect 服務名A查看A的全部信息
    docker service ls查看全部服務
    docker service rm 服務名A從集群中刪除一個服務已運行進程全部刪除

    四、Docker Stack部署集群

    docker compose只能進行單機部署,而在docker compose中,我們使用docker stack進行集群部署。docker compose 與 docker stack 都使用docker-compose.yml進行服務配置。

    Service:一個service只能運行一個image,但是可以運行出同一個image的多個containers(即這個images內可能包含多個容器)。
    Stack:一個Stack是一組相互關聯的services,這組service共享依賴,可被安排在一起運行和擴展。

    docker stack deploy 服務名A --compose-file=docker-compose.yml # 使用yml在集群中建立一個stack docker stack services A # 查看stack A中的所有容器 docker stack ls # 查看所有stack docker stack rm A # 刪除一個stack docker logs 容器ID # 根據容器ID查看日志,解決docker stack創建容器無法實時看到日志的問題 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的Docker Swarm建立服务器集群的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。