Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。

docker swarm集群工作原理:https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/

docker swarm 集群监控 docker swarm集群搭建_服务器

 

环境准备

环境准备

准备4台centos服务器,生产环境建议用阿里云服务器,学习环境可以在本机用vmware创建4个centos虚拟机。

每台centos服务器上都要安装docker。

centos版本:8.5

docker版本:20.10.11

 

以四台机器为例,2 个 manager 2个 worker。

但生产环境建议是 3个manager 以上,如果只有2台 manager,当主manager挂掉之后,另一台从manager是不会升级为主manager的 ,因为从manager升级为主manager的条件是存活的从manager节点个数必须大于1。

虚拟机

状态

备注

192.168.1.200

manager

用这台初始化创建集群成为manager

192.168.1.201

manager

加入成manager

192.168.1.202

worker

 

192.168.1.203

worker

 

 

首先,两台管理节点 192.168.1.200与192.168.1.201需要开放防火墙端口2377,允许与工作节点服务器通讯,如果是阿里云服务器,还要开通阿里云安全组的2377端口。 

firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --reload

 

docker swarm命令

 

docker swarm命令

创建集群:
docker swarm init --advertise-addr 虚拟机IP

查看增加 manager的授权命令:
docker swarm join-token manager

查看增加 worker 的授权命令:
docker swarm join-token worker

管理器节点脱离 docker swarm集群:
docker swarm leave --force

工作节点脱离Docker Swarm集群
docker swarm leave

 

搭建docker集群

搭建swarm集群,swarm集群包含两个管理节点,两个工作节点。

 

【第1步】初始化swarm集群,创建主管理节点

管理节点与工作节点可以使用内网地址与外网地址,将192.168.1.200这台服务器初始化为管理节点,切换到200这台服务器。使用内网地址初始化节点:

docker swarm init --advertise-addr 192.168.1.200
或者
docker swarm init --advertise-addr 192.168.1.200 --listen-addr 192.168.1.200:2377

 

docker swarm 集群监控 docker swarm集群搭建_Docker_02

输出文字的意思是此地址已经加入到了这个swarm,你可以使用  docker swarm join --token xxxxx 命令将其它节点加入到这个swarm中来成为工作节点,

如果想添加管理节点,使用 docker swarm join-token manager 命令来进行管理。

 

查看节点信息,这个命令只能在管理节点上使用。

docker node ls

docker swarm 集群监控 docker swarm集群搭建_服务器_03

 manager为Leader表示管理节点,为空的表示工作节点。

 

注意:定要开放所有管理节点服务器的端口,然后重启防火墙,如果是阿里云服务器,还要开通阿里云安全组,不然加入worker 会报如下错误:

Error response from daemon: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 192.168.1.200:2377: connect: no route to host"

 

将两台管理节点192.168.1.200与192.168.1.201的防火墙开放 2377 端口,允许工作节点与它通讯,开放端口后其它工作节点才可以加入进来 。

firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --reload

 

【第2步】加入备用管理节点

理论上最好将三台机加入到管理节点。

但现在服务器不够,总共只有四台,所以只额外将 192.168.1.201 这台机加入到备用管理节点。

由于这台机也是管理节点,所以要开放防火墙2377端口。

firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --reload

 

然后在初始化集群的管理节点 192.168.1.200 上查看加入到manager节点的命令:

docker swarm join-token manager

docker swarm 集群监控 docker swarm集群搭建_服务器_04

然后在192.168.1.201这台机上执行:

docker swarm join --token SWMTKN-1-52jt7zafnyw3i2ybn9guz5cwq9654uh3nabz5izaifjozhjn3o-6j8gnwhx52vjdvq7w0hq8uklv 192.168.1.200:2377

docker swarm 集群监控 docker swarm集群搭建_服务器_05

 加入到swarm管理节点成功。

查看节点信息:

docker node ls

 

docker swarm 集群监控 docker swarm集群搭建_服务器_06

 manager为Leader表示创建集群时创建的管理节点,Reachable(可达)表示加入进来的管理节点,为空的表示工作节点。

 

如果加入管理节点的时候如果报下面的错误,是防火墙或阿里云安全组没有开放2377端口,需要开放防火墙端口。

Error response from daemon: manager stopped: can’t initialize raft node: rpc error: code = Unknown desc = could not connect to prospective new cluster member using its advertised address: rpc error: code = Unavailable desc = connection error: desc = “transport: Error while dialing dial tcp 192.168.1.200:2377: connect: no route to host”

 

【第3步】添加两台工作节点

将192.168.1.202与192.168.1.203两台机加入到刚刚创建的docker swarm集群。

在任意一台管理节点上使用如下命令查看加入worker节点的命令。

docker swarm join-token worker

docker swarm 集群监控 docker swarm集群搭建_服务器_07

 

 分别切换到将192.168.1.202与192.168.1.203,分别执行命令:

docker swarm join --token SWMTKN-1-52jt7zafnyw3i2ybn9guz5cwq9654uh3nabz5izaifjozhjn3o-a6zep6y0n18614nj9w1swrnlp 192.168.1.201:2377

docker swarm 集群监控 docker swarm集群搭建_Docker_08

加入工作节点成功。

查看节点信息:

docker swarm join-token worker

 

docker swarm 集群监控 docker swarm集群搭建_Docker_09

 manager为Leader表示创建集群时创建的管理节点,Reachable(可达)表示加入进来的管理节点,为空的表示工作节点。

脱离swarm集群

 工作节点脱离swarm集群。

切换到工作节点服务器,执行命令

dokcer swarm leave

 

管理节点脱离swarm集群。

管理节点脱离集群的前提是所有工作节点全部已脱离了集群后,使用 docker swarm leave 命令将管理节点本身脱离集群。

如果还有一台工作节点未脱离集群,还想让管理节点脱离集群,加 --force参数。

dokcer swarm leave --force