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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Docker Swarm建立服务器集群

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

Docker Swarm建立服務(wù)器集群

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

一、Docker Swarm簡介

1. 集群模式

這是Docker官網(wǎng)給出的一張swarm原理圖,即swarm就是一個或多個Docker Engine的集群,負(fù)責(zé)集群的管理和編排。


Manager負(fù)責(zé)維持集群狀態(tài)并進(jìn)行調(diào)度服務(wù)。(基于Raft算法)
Worker是Docker Engine的實例,其唯一目的是執(zhí)行容器。工作程序節(jié)點不參與Raft分布式狀態(tài),不制定調(diào)度決策。

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

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

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

2. 管理節(jié)點–Manager

下面是官網(wǎng)給出的Docker swarm集群的四點要求:

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

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

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

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

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

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

二、Docker Swarm的配置及使用

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

    運行后出現(xiàn)如下成功提示:

    3. 將其他服務(wù)器加入該集群。

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

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

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

    docker swarm join --token 對應(yīng)令牌

    運行后出現(xiàn)如下成功提示:

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

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


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

    三、Docker Service向集群中添加服務(wù)

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

    replicated隨機分配給任一節(jié)點,global模式為全局所有節(jié)點統(tǒng)一分配

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

    四、Docker Stack部署集群

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

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

    docker stack deploy 服務(wù)名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 # 根據(jù)容器ID查看日志,解決docker stack創(chuàng)建容器無法實時看到日志的問題 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。