docker swarm 集群容器节点的性能_docker


一、简介

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台服务器购买完毕!

docker swarm 集群容器节点的性能_服务器_02

连接服务器

使用xshell连接到刚购买的4台服务器:

docker swarm 集群容器节点的性能_Docker_03

安装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.配置镜像加速器

docker swarm 集群容器节点的性能_Docker_04

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

docker swarm 集群容器节点的性能_docker_05


先使用 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 swarm 集群容器节点的性能_服务器_06


解决:关闭Docker-1服务的防火墙

#查看防火墙状态
systemctl status firewalld.service
#关闭防火墙
systemctl stop firewalld.service

加入后在管理节点Docker-1运行命令查看节点列表

docker node ls

docker swarm 集群容器节点的性能_Docker_07


其他服务器也要加入到当前管理节点时,可在管理几点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台!