Docker-swarm 集群部署及swarm集群管理节点的高可用配置

更新于 2019-12-16  约 6 分钟

Docker-swarm 集群部署及swarm集群管理节点的高可用配置

一.Docker部署


yum  install -y yum-utils  device-mapper-persistent-data  lvm2


yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo


yum makecache fast


yum install docker-ce


service docker start

vim /usr/lib/systemd/system/docker.service
#添加
--graph /data/docker --storage-driver=overlay
systemctl daemon-reload
service docker restart
  • 需要老版本的话:

yum install https://download.docker.com/linux/centos/7/x86_64/stable/Packages/docker-ce-selinux-17.03.0.ce-1.el7.centos.noarch.rpm
yum install docker-ce-17.03.0.ce-1.el7.centos.x86_64 -y

二.Docker-swarm集群的搭建

1. 挑选一个节点作为管理节点


[root@jenkins-master ~]#docker swarm init --advertise-addr 192.168.0.46

docker swarm join-token worker命令是查看使用主节点的token添加节点到集群的命令
[root@jenkins-master ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-5vzw37ummd0h863jddbig798pbq3jpgoepf95g4uenodwhtc7v-543arzx838nj0pgo2yujyfko4 \
    192.168.0.46:2377
  • 添加节点到swarm集群中(在每台节点机上执行)
 [root@jenkins47~]# docker swarm join     --token SWMTKN-1-5vzw37ummd0h863jddbig798pbq3jpgoepf95g4uenodwhtc7v-543arzx838nj0pgo2yujyfko4     192.168.0.46:2377
  • 创建一个集群的network
docker network create -d overlay --subnet=10.0.1.0/24 --attachable sk-net
  • 查看集群节点信息
[root@jenkins-master ~]# docker node ls
ID                           HOSTNAME        STATUS  AVAILABILITY  MANAGER STATUS
5s0spx5wonjgsl8k63vfybq1v    zabbix.xxxx    Ready   Active        
ttfs9upr4bmhyt9ssfxfixkwm    jenkins47       Ready   Active        
uc40c8karvu3pq2eupllyicz8 *  jenkins-master  Ready   Active        Leader

三.配置docker-swarm管理节点高可用

如果swarm集群中只有一个管理节点,该管理节点如果宕机或者离开集群环境,那么该集群就不存在了。所以在一个具有N个管理节点的集群环境中,一定有管理节点总数的50%以上的节点来处理请求和保持可用。

Swarm中的管理节点都是通过实现Raft一致性算法来管理所有节点的状态。通过实现Raft Consensus Algorithm,可以确保集群中的所有任务、存储等都是一致的状态
通常情况下,一个Raft 集群包括了若干个服务器。在给定的任意时间点上,每个服务器都处在以下三种状态的一种:指挥者、跟随者,或候选者。在一般操作中,一定会有一个指挥者,剩下的服务器都是跟随者。跟随者是被动的:它们自己不提交任何需求,仅仅响应指挥者和候选者提出的需求。指挥者处理所有的客户端需求(如果客户端向跟随者发送了需求,跟随者会把它转交给指挥者)。至于第三种状态——候选者——则是用来选举一个新的指挥者。Raft 用一种心跳机制来触发指挥者选举。当服务器启动时,它们先从跟随者做起,并会在接收到指挥者或候选者发送的有效RPC 协议(远程过程调用协议)之前,一直执行跟随者的工作。指挥者定时向全体跟随者发送心跳信息,以保持它们的授权。如果一个跟随者超过一定时间没有接收到心跳信息(这段时间称为“选举超时”),它就会假设指挥者已经失效,然后启动选举,来选择一个新的指挥者。


[root@jenkins-master ~]# docker node promote zabbix.xxxx
[root@jenkins-master ~]# docker node ls
ID                           HOSTNAME        STATUS  AVAILABILITY  MANAGER STATUS
5s0spx5wonjgsl8k63vfybq1v    zabbix.xxxx    Ready   Active        Reachable
ttfs9upr4bmhyt9ssfxfixkwm    jenkins47       Ready   Active        
uc40c8karvu3pq2eupllyicz8 *  jenkins-master  Ready   Active        Leader
重启 Leader你会发现Leader节点会有变化
阅读 401更新于 2019-12-16

推荐阅读
目录