Docker Swarm集群部署
1 方案介绍
1.1 概述
要利用Swarm模式的容错功能,建议创建奇数的管理节点。
当有多个管理节点时,如果一个leader节点宕机,其余的manager节点将选择一个新的leader,并恢复集群状态的编排和维护。默认情况下,管理节点也运行任务。
三个管理节点的Swarm最大允许一个管理节点宕机。
1.2 软件包
docker-20108.tar.gz下载地址:
https://download.csdn.net/download/Zhuge_Dan/85064880
docker-201012.tar.gz下载地址:
https://download.csdn.net/download/Zhuge_Dan/85067951
本文使用docker-20108.tar.gz作为示例。
2 Swarm集群搭建
2.1 IP规划
本示例中使用6台机器为例。IP规划如下:
角色 | 主机名 | IP地址 | 防火墙规则 |
---|---|---|---|
主管理节点(manager node) | docker01 | 172.16.86.11 | 开放端口:2375-2377 tcp/udp、7946 tcp/udp、4789 udp |
从管理节点(manager node) | docker02 | 172.16.86.12 | 开放端口:2375-2377 tcp/udp、7946 tcp/udp、4789 udp |
从管理节点(manager node) | docker03 | 172.16.86.13 | 开放端口:2375-2377 tcp/udp、7946 tcp/udp、4789 udp |
工作节点(worker node) | docker04 | 172.16.86.14 | 开放端口:2375-2377 tcp/udp、7946 tcp/udp、4789 udp |
工作节点(worker node) | docker05 | 172.16.86.15 | 开放端口:2375-2377 tcp/udp、7946 tcp/udp、4789 udp |
工作节点(worker node) | docker06 | 172.16.86.16 | 开放端口:2375-2377 tcp/udp、7946 tcp/udp、4789 udp |
默认的管理服务端口为2377,需要能被工作节点访问到。
为了支持集群的成员发现和外部服务映射,还需要在所有节点上开启7946 TCP/UDP和4789 UDP端口。
2.2 基础配置
操作设备:所有节点
2.2.1 关闭SELinux
[root@docker01 ~]# setenforce 0
[root@docker01 ~]# vi /etc/selinux/config
SELINUX=disabled #将SELINUX设置为disabled
[root@docker01 ~]# getenforce
Permissive
2.2.2 关闭防火墙或开放需要的业务端口
[root@docker01 ~]# systemctl stop firewalld #关闭防火墙
[root@docker01 ~]# systemctl disable firewalld #禁止防火墙开机自启
或者:
[root@docker01 ~]# firewall-cmd --zone=public --add-port=2375-2377/tcp --add-port=2375-2377/udp --add-port=7946/tcp --add-port=7946/udp --add-port=4789/udp --permanent
success
[root@docker01 ~]# firewall-cmd --reload
success
[root@docker01 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client ssh
ports: 2375-2377/tcp 2375-2377/udp 7946/tcp 7946/udp 4789/udp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
2.2.3 调整max_open_files
[root@docker01 ~]# echo '* soft nofile 65535' >> /etc/security/limits.conf
[root@docker01 ~]# echo '* hard nofile 65535' >> /etc/security/limits.conf
[root@docker01 ~]# cat /etc/security/limits.conf | tail -2
* soft nofile 65535
* hard nofile 65535
[root@docker01 ~]# echo 'ulimit -SHn 65535' >> /etc/rc.d/rc.local
[root@docker01 ~]# cat /etc/rc.d/rc.local | tail -1
ulimit -SHn 65535
[root@docker01 ~]# chmod +x /etc/rc.d/rc.local #为rc.local增加可执行权限
2.2.4 重启检查SELinux、firewalld和open files
[root@docker01 ~]# reboot
[root@docker01 ~]# getenforce #查看SELinux是否关闭成功
Disabled #关闭成功
[root@docker01 ~]# systemctl status firewalld #查看防火墙状态
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead) #防火墙已关闭
Docs: man:firewalld(1)
[root@docker01 ~]# systemctl is-enabled firewalld #查看防火墙是否开机自启
disabled #防火墙已禁止开机自启
[root@docker01 ~]# ulimit -a | grep open
open files (-n) 65535 #open files已调整为65535
2.3 配置主机名解析
操作设备:所有节点
将所有主机的IP和主机名对应关系配置到系统中,在所有服务器上执行:
[root@docker01 ~]# echo '172.16.86.11 docker01' >> /etc/hosts
[root@docker01 ~]# echo '172.16.86.12 docker02' >> /etc/hosts
[root@docker01 ~]# echo '172.16.86.13 docker03' >> /etc/hosts
[root@docker01 ~]# echo '172.16.86.14 docker04' >> /etc/hosts
[root@docker01 ~]# echo '172.16.86.15 docker05' >> /etc/hosts
[root@docker01 ~]# echo '172.16.86.16 docker06' >> /etc/hosts
[root@docker01 ~]# cat /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.86.11 docker01
172.16.86.12 docker02
172.16.86.13 docker03
172.16.86.14 docker04
172.16.86.15 docker05
172.16.86.16 docker06
然后通过ping其它主机名检查是否生效。
2.4 安装Docker
操作设备:所有节点
将离线安装包上传到服务器。在所有服务器上执行:
A.安装docker-20108.tar.gz:
[root@docker01 ~]# cd /usr/local/
[root@docker01 local]# cp -r /tmp/docker-20108.tar.gz /usr/local/
[root@docker01 local]# mkdir /usr/local/docker-20108
[root@docker01 local]# tar -xPf /usr/local/docker-20108.tar.gz -C /usr/local/docker-20108
[root@docker01 local]# cd /usr/local/docker-20108
[root@docker01 docker-20108]# ls -lh
total 106M
-rw-r--r--. 1 root root 256K Aug 23 2021 audit-2.8.5-4.el7.x86_64.rpm
-rw-r--r--. 1 root root 102K Aug 23 2021 audit-libs-2.8.5-4.el7.x86_64.rpm
-rw-r--r--. 1 root root 77K Aug 23 2021 audit-libs-python-2.8.5-4.el7