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兩個小集群:
(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的配置及使用
運行后出現如下成功提示:
3. 將其他服務器加入該集群。
運行成功后,我們會拿到加入該集群所需的相應令牌。
我們只需要在其他服務器中,輸入對應令牌,即可以相應的身份加入到集群中。
運行后出現如下成功提示:
如果想要退出集群,直接輸入下面的命令:
Reachable,Leader節點均屬于Manager節點,只有Manager節點才可以參與選舉
你必須實時保證可用Manager節點數大于總Manager節點數的一半。如果我們現在停止三號節點的運行,由于運行的Manager只剩下一個,會出現如下圖提示:
三、Docker Service向集群中添加服務
docker service命令類似于docker run,前者是運行一個服務,支持增擴容,只允許在集群中使用;后者單純是一個容器,不支持增擴容。
replicated隨機分配給任一節點,global模式為全局所有節點統一分配
| 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 Swarm建立服务器集群的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 林俊卿咽音练声法八个步骤(纯净版视频加图
- 下一篇: jvm内存结构与java内存模型