Docker Swarm建立服务器集群
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兩個小集群:
(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的配置及使用
運行后出現(xiàn)如下成功提示:
3. 將其他服務(wù)器加入該集群。
運行成功后,我們會拿到加入該集群所需的相應(yīng)令牌。
我們只需要在其他服務(wù)器中,輸入對應(yīng)令牌,即可以相應(yīng)的身份加入到集群中。
運行后出現(xiàn)如下成功提示:
如果想要退出集群,直接輸入下面的命令:
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 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共享依賴,可被安排在一起運行和擴展。
總結(jié)
以上是生活随笔為你收集整理的Docker Swarm建立服务器集群的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 林俊卿咽音练声法八个步骤(纯净版视频加图
- 下一篇: jvm内存结构与java内存模型