一、简介
Docker Swarm 是Docker官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker资源。
二、名词解释
- swarm:集群的管理和编排。docker可以初始化一个swarm集群,其它节点可以加入。
- node:每一个docker主机就是一个docker节点,分为 manager 节点和 worker 节点。
- manager node:负责执行容器的编排和集群的管理工作,保持并维护swarm处于期望的状态。swarm可以有多个manager
node,他们会自动协调并选举一个leader执行编排任务。不能没有manager node。 - worker node:接受并执行由manager node派发的任务,并且默认manager node也是一个worker node,不过可以将它设置为manager-only node,让他只负责编排和管理工作。
- service:是指一组任务的集合,服务定义了任务的属性。
- task:是swarm中的最小调度单位,目前来说一个任务就是一个单一的docker容器。
购买服务器
我选择的是阿里云服务器,登录阿里云控制台,并进入【云服务器ESC】,本例中我购买4台1核2G服务器(1主3从),可选择按量付费,用完即释放,花费很少,不过前提是阿里云账户余额要不低于100元,镜像选择【CentOS】,进入下一步,安全组选默认即可,带宽峰值可随意,因为是按量付费,进入下一步,选择【自定义密码】,其余都默认即可,4台服务器购买完毕!
连接服务器
使用xshell连接到刚购买的4台服务器:
安装Docker
可使用xshell右键发送键输入到所有会话功能一次性操作4台服务器安装Dcoker
1.安装gcc
yum -y install gcc
yum -y install gcc-c++
2.卸载旧Docker,保证环境干净
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
3.安装需要的安装包
yum install -y yum-utils
4.添加yum源(推荐使用国内)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5.更新yum软件包索引
yum makecache fast
6.安装Docker引擎
yum install -y docker-ce docker-ce-cli containerd.io
7.启动Docker
systemctl start docker
8.验证Docker是否启动成功
docker version
9.配置镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://edfpljvp.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
开始搭建Docker Swam集群
初始化
docker swarm init --advertise-addr 172.18.135.220
先使用 ip addr命令查看 eth0 服务器的内网地址,为172.18.135.220,使用内网是不消耗流量的;
运行成功后解释:
#Swarm初始化完毕,当前是一个管理节点
Swarm initialized: current node (rzkzgfn0p2yr86ozmo54fevfi) is now a manager.
#你可以使用这个命令让其他几点加入进来
docker swarm join --token SWMTKN-1-0chuuf818l083x7qx8t2zy5icypj0wygkdf9pqz3sls3ecouzh-ar9tdt8gx2tdr4c81bspptv62 172.18.135.220:2377
#可以使用下列命令来添加一个管理节点
docker swarm join-token manager
生成加入令牌
#加入主节点
docker swarm join-token manager
#加入工作几点
docker swarm join-token worker
docker swarm join 加入一个节点
例:将 Docker-2 加入 Docker-1 的管理节点,加入后充当一个工作节点
docker swarm join --token SWMTKN-1-0chuuf818l083x7qx8t2zy5icypj0wygkdf9pqz3sls3ecouzh-ar9tdt8gx2tdr4c81bspptv62 172.18.135.220:2377
如果直接运行可能会报错:
解决:关闭Docker-1服务的防火墙
#查看防火墙状态
systemctl status firewalld.service
#关闭防火墙
systemctl stop firewalld.service
加入后在管理节点Docker-1运行命令查看节点列表
docker node ls
其他服务器也要加入到当前管理节点时,可在管理几点Docker-1中运行以下命令获取加入令牌:
docker swarm join-token manager
如果出现管理节点异常:The swarm does not have a leader
可运行:
docker swarm init --force-new-cluster
主动离开节点
docker swarm leave
离开后,集群中该节点仍然存在,但是状态显示为Down, 需要在Swarm的Manager节点执行以下命令来删除
docker node rm --force 节点id
Raft一致性算法
双主双从:假设一个几点挂了,其他节点是否可用?(不可用)
解释:
**Raft协议:**保证大多数节点存活才可以用,只要>1,所有得出结论:集群至少大于3台!