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
- 查看集群节点信息
[root@jenkins-master ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
5s0spx5wonjgsl8k63vfybq1v zabbix.skong 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.skong
[root@jenkins-master ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
5s0spx5wonjgsl8k63vfybq1v zabbix.skong Ready Active Reachable
ttfs9upr4bmhyt9ssfxfixkwm jenkins47 Ready Active
uc40c8karvu3pq2eupllyicz8 * jenkins-master Ready Active Leader
重启 Leader你会发现Leader节点会有变化