最近都在忙,久不更新博客了,今天更新下Docker swarm集群和集群容错测试:
1、如下拓扑:

2、环境说明:
1
2
3
|
Master /nfs 服务器:192.168.63.217
Worker:192.168.63.217
Worker:192.168.63.216
|
3、创建一个nfs挂载目录,用于存放wordpress代码(63.217):
1
2
3
4
5
6
7
|
[root@master ~]
[root@master ~]
/web 192.168.63.0 /24 (rw, sync ,fsid=0)
[root@master ~]
[root@master ~]
[root@master ~]
[root@master ~]
|
4、挂载/web目录(worker):
1
2
3
4
5
|
[root@node2 ~]
[root@node2 ~]
[root@node2 ~]
[root@webstatus ~]
|
5、把我们在Dockerfile构建的镜像推送到本地仓库(这一块可以参考之前的博客,Dockerfile章节)
1
2
3
4
5
6
|
[root@masterwordpress]
[root@masterwordpress]
[root@masterwordpress]
[root@master wordpress]
[root@master wordpress]
[root@master wordpress]
|
##为了worker节点下载速度快点,我们建议先docker pull到本地
6、构建Docker swarm集群63.217操作:
1
2
3
4
5
6
|
[root@master~]
To add a worker to this swarm, run the following command :
docker swarm join \
--tokenSWMTKN-1-37fe5tarzcy50mazbe1e3ewyblkfk7xf9kx9ncanz0wx3q70e1-a7wn9tiepd114if6smuiqlez3\
192.168.63.217:2377
|
##在worker节点上面操作,加入这个集群:
7、查看集群的节点状态:
1
2
3
4
5
|
[root@master wordpress]
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
e9naz0ctzaaer4bwleruo34x6 * master Ready Active Leader
rfcbavxd8yrixximm9e1i6dsn node1 Ready Active
shrzku0k3xx87526lkkkyrxsi node2 Ready Active
|
8、为了使得Docker swarm集群容器互相通讯,我们先创建一个overlay网络:
##注意内核版本要3.18以上,不够的话要升级
9、随机创建调度一个9000端口的Php service运行Docker容器:
1
2
3
4
|
[root@masterwordpress]
[root@masterwordpress]
ID NAME MODE REPLICAS IMAGE
ira3ezabroai php replicated 1 /1 192.168.63.217:5000 /lnmp/php :1.0
|
10、启动nginx service:
11、再启动mysql service:
12、我们也可以在复制出一个web service:
1
2
|
[root@master wordpress]
web scaled to 2
|
13、看一下我们的容器到底运行在哪个linux主机上呢:
1
2
3
4
5
|
[root@master wordpress]
ID NAME MODE REPLICAS IMAGE
ira3ezabroai php replicated 1 /1 192.168.63.217:5000 /lnmp/php :1.0
kcxqzxwe0dzb mysql replicated 1 /1 192.168.63.217:5000 /lnmp/mysql :1.0
ufn1n5phtsqn web replicated 2 /2 192.168.63.217:5000 /lnmp/nginx :1.0
|
#####
1
2
3
4
5
6
7
8
9
10
|
[root@master wordpress]
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ptxokpvq1b7s php.1 192.168.63.217:5000 /lnmp/php :1.0 master Running Running 5 minutes ago
[root@master wordpress]
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
zowbxqnr9toi mysql.1 192.168.63.217:5000 /lnmp/mysql :1.0 node2 Running Running 2 minutes ago
[root@master wordpress]
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
vhk44hij7gnu web.1 192.168.63.217:5000 /lnmp/nginx :1.0 node1 Running Running 3 minutes ago
u1vdnr0ujzl7 web.2 192.168.63.217:5000 /lnmp/nginx :1.0 node2 Running Running about a minute ago
|
14、我们已经确认所有的容器都已经起起来并且正常运行了,访问一下web就可以进行80端口的访问了,192.168.63.217:

###

####直接到安装完成:

15、为了测试高可用性,我们把node1节点关闭掉,看容器是否转移:
我们在node1执行关闭docker:
16、在master节点上查看一下状态:
1
2
3
4
5
|
[root@master web]
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
e9naz0ctzaaer4bwleruo34x6 * master Ready Active Leader
rfcbavxd8yrixximm9e1i6dsn node1 Down Active
shrzku0k3xx87526lkkkyrxsi node2 Ready Active
|
17、我们可以看到node1节点已经Down,然后我们的Docker 容器也已经转移到了别的worker节点上:
1
2
3
4
5
6
7
8
9
10
11
|
[root@master web]
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
ptxokpvq1b7s php.1 192.168.63.217:5000 /lnmp/php :1.0 master Running Running 18 minutes ago
[root@master web]
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
zowbxqnr9toi mysql.1 192.168.63.217:5000 /lnmp/mysql :1.0 node2 Running Running 15 minutes ago
[root@master web]
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
jqcuqzjdgi9y web.1 192.168.63.217:5000 /lnmp/nginx :1.0 master Running Running 2 minutes ago
vhk44hij7gnu \_web.1 192.168.63.217:5000 /lnmp/nginx :1.0 node1 Shutdown Running 2 minutes ago
u1vdnr0ujzl7 web.2 192.168.63.217:5000 /lnmp/nginx :1.0 node2 Running Running 14 minutes ago
|
##我们可以看到在node1节点上之前运行的容器已经shutdown了,然后转移到了master和node2上,再次访问也是不影响的:

##到处已经完成了,我们可以看到通过Docker swarm构建集群是非常简单的,那么有没有compose可以结合swarm呢?在compose v3版本之后就体现了这个功能的强大。
Docker详情与集群架构部分可以查看http://www.roncoo.com/course/view/3e9d9c48f76f4c698b8349d04b763467
本文转自 小罗ge11 51CTO博客,原文链接:http://blog.51cto.com/xiaoluoge/1920377,如需转载请自行联系原作者