Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主機抽象為一個整體,並且通過一個入口統一管理這些 Docker 主機上的各種 Docker 資源。 Swarm 和 Kubernetes 比較類似,但是更加輕,具有的功能也較 kubernetes 更少一些。
Swarm 橫向擴容准備服務器:
swarm1(master):192.168.75.191
swarm2(node1):192.168.75.192
swarm3(node2):192.168.75.193
注:docker 1.12 版本后都自帶 swarm 命令,無需安裝

一、啟動集群
在 swarm1 上啟動集群,即 swarm1 為 master 節點:
[root@swarm1 ~]# docker swarm init --listen-addr 192.168.75.191:1234

# --listen-addr 集群暴漏給外界調用的 HTTPAPI 的 socket 地址, IP 為本機 ip ,端口可自定義
上述命令運行成功會生成如下信息,此命令用於節點(被管理主機)加入集群
docker swarm join \
--token SWMTKN-1-6ampzvvbv1ul5y9omr3lvcrodetcdc3ukr9tn7158fcebc7olo-dx61lgmjyi0wwvx8pluizyucy \
192.168.75.191:1234
在 swarm1 上查看各節點信息:
[root@swarm1 ~]# docker node ls #目前只有本機(管理主機 swarm1 )加入集群

二、分別將 swarm2 & swarm3 節點(被管理節點)加入集群

swarm1 (管理主機)再次查看節點信息,如下所示則集群添加成功

Swarm 集群以搭建完畢接下來進行橫向擴容/收縮
三、測試:拉取tomcat鏡像,橫向擴容
1、創建實例
[swarm1 ~]# docker service create --replicas 1 --name tomcattest tomcat:latest
# --replicas 始終運行實例數目
# --name 運行服務名稱,非容器名稱
[root@swarm1 ~]# docker service ps tomcattest #查看實例運行狀態

2、橫向擴容/收縮
[root@swarm1 ~]# docker service scale tomcattest=3
#tomcattest服務增加為3個實例

#實例自動在3台節點上分配,保證運行數量為3個實例,並且當某節點出現異常狀態導致該節點上的服務宕機,
將會在其余節點自動運行實例。始終保持實例數量為需求數量。
3、停止 swarm3 節點,查看實例狀態
[root@swarm3 ~]# systemctl stop docker

在 swarm1 上查看服務運行狀態:
[root@swarm1 ~]# docker service ps tomcattest

#swarm3節點服務自動轉移至swarm1服務器上,實例數仍為3.
swarm3 上 tomcat 實例為宕機狀態,且在 swarm1 上新生成實例,使 tomcat 實例總數仍為3
至此 Swarm 集群搭建以及簡單都橫向擴容及收縮都已經完成了。
后話:
Swarm 雖為 Docker 官方提供的管理工具,但因 swarm 本身功能的不完善性,以及與其他插件的耦合度較低,所以現在基本都不建議使用 swarm 作為管理工具,現在較為流行的管理工具為 k8s ,這里就不多說了,大家有興趣就自行百度查看吧,另 Rancher 是目前比較新興的管理工具,使用 Rancher 可以來管理 k8s 集群。。。
