Docker-swarm集群搭建

Docker-swarm集群搭建

服务器准备

主机名 IP 主机配置
master 10.10.10.3 2c2g
node01 10.10.10.4 2c2g
node02 10.10.10.5 2c2g

主机名配置

1
2
3
4
5
6
# master
[root@master ~]# hostnamectl set-hostname master
# node01
[root@node01 ~]# hostnamectl set-hostname node01
# node02
[root@node02 ~]# hostnamectl set-hostname node02

本地解析

1
2
3
4
5
6
# 所有主机都要配置
cat >> /etc/hosts << EOF
10.10.10.3 master
10.10.10.4 node01
10.10.10.5 node02
EOF

安装docker

1
2
3
4
5
6
7
# 所有服务器都要安装
# 安装必要的一些系统工具
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装Docker-CE
yum -y install docker-ce
1
2
# 所有节点启动docker 并配置开机自启
[root@master ~]# systemctl start docker && systemctl enable docker

初始化swarm

把第一台机器master充当管理节点,第二台node01 、第三台node02作为工作节点

1
2
# master节点执行 IP为主机IP
[root@master ~]# docker swarm init --advertise-addr 10.10.10.3

image-20231027102411532

1
2
3
如果你的 Docker 主机有多个网卡,拥有多个 IP,必须使用 –advertise-addr 指定 IP
执行 docker swarm init 命令的节点自动成为管理节点。
命令 docker info 可以查看 swarm 集群状态。

工作节点加入集群

1
2
3
4
# node01节点
[root@node01 ~]# docker swarm join --token SWMTKN-1-38vbfidgbpkdvwgpx2fzu1jwqtzlnlpfr0p73hcxfs3vwabl98-eenxcbwb3rd4633iw2vp4qwa1 10.10.10.3:2377
#node02节点
[root@node02 ~]# docker swarm join --token SWMTKN-1-38vbfidgbpkdvwgpx2fzu1jwqtzlnlpfr0p73hcxfs3vwabl98-eenxcbwb3rd4633iw2vp4qwa1 10.10.10.3:2377

查询节点状态

1
[root@master ~]# docker node ls

image-20231027102732086

升级为高可用

1
2
3
# 把工作节点作为备用主节点
[root@master ~]# docker node promote node01
[root@master ~]# docker node promote node02
1
2
3
4
5
6
# 查询节点状态
[root@master ~]# docker node ls

# 此时 node02、node03的 集群状态变为 Reachable(选举者)因为集群中节点Leader只能有一个
# 这个类似zookeeper 只不过zookeepers用的算法是paxos Swarm用的算法是raft
# 当master主机宕掉 Reachable会自动选举一个成为 Leader

image-20231027102913558

删除节点

1
2
# node节点需要先退出集群 (node节点上操作)
[root@node01 ~]# docker swarm leave --force

image-20231027103557943

1
2
3
4
5
# 把需要删除的节点降为工作节点 (管理节点上操作)
[root@master ~]# docker node update --role worker node01

# 删除指定节点 (管理节点上操作)
[root@master ~]# docker node rm node1

image-20231027104025838

重新加入节点

1
2
# node节点操作
[root@node01 ~]# docker swarm join --token SWMTKN-1-38vbfidgbpkdvwgpx2fzu1jwqtzlnlpfr0p73hcxfs3vwabl98-eenxcbwb3rd4633iw2vp4qwa1 10.10.10.3:2377
1
2
# 加入节点再次查询节点并升级为 Reachable(选举者)
[root@master ~]# docker node promote node01

image-20231027104157759