您的位置:首页 > 运维架构 > Docker

使用docker swarm创建集群并进行效果验证

2017-02-27 17:05 826 查看
上一讲说明了如何安装docker,以及在docker下如何获取及启动容器。下面说说如何使用docker创建集群。docker作为一种全新的容器技术相比传统的虚拟机来说最大的优势就在于轻量化。本来我们使用虚拟机最主要的目的还是想使用虚拟机来启动一些隔离的应用程序。但为了启动这些应用程序不得不创建庞大的虚拟机。所以为什么我们不直接启动被隔离的程序而不需要启动虚拟机哪?这样岂不省去了很多硬盘及内存存储空间。

不仅如此,在当今BS+MS模式风靡全球的情况下,大家需要向别人提供在线服务,而一旦并发访问量增大的时候,我们的服务器往往难以承载。所以仅靠单台服务器来对外提供服务是很难满足应用需求的。这时候就需要多台机器并行提供服务,但无论后台有多少台机器运行对于用户来说都是不可知的,只需要按照统一的地址进行访问。这就是集群。集群技术被应用到互联网或政务云环境已经有很多年了。以往虚拟机的模式基本是通过“负载均衡器+逻辑主机”的模式运行的,也就是外部多个请求来了之后由负载均衡器进行分发,将请求分发给某个逻辑主机进行处理,并将处理结果返回给客户端。负载均衡器有硬件和软件两种。硬件的种类有很多,而且价格往往都不菲。软件负载均衡器有apache、nginx等好几种,大都免费,基本可以满足日常需求。但无论哪种方式,动态扩容都不是很容易,不是得停机就是得写复杂的模块挂载到apache或nginx上。

当docker容器出现后一切都变得那么简单,不仅配置变得简单,动态扩容或收缩都变得很容易。

如果想使用docker创建容器集群,较低版本的docker是不太好弄的,操作较为复杂,建议将docker升级到最新版(1.13版以上)。这里以1.13.1为例向大家介绍如何使用swarm搭建docker集群。

第一步:首先在宿主机的终端中执行如下命令:

$ sudo docker run --rm swarm create




此时生成的token 6cce80f59f4292ba8f4e085950c6f480一定得保存好,后面要用它来创建集群环境。

接下来,我们使用如下命令在宿主机上启动多个容器:

$docker run -i -t -d tomcat:latest /bin/bash




如上图所示,我们运行了两次命令,因此便创建了两个容器实例。命令中加上参数“-d”是为了让容器以守护模式运行,这样不至于在终端输入“exit”断开容器后容器自动关闭掉。

接下来查看一下每个容器的IP地址,在宿主机中输入如下命令以便查看所有运行的容器实例:

$sudo docker ps




从上图中可以看到有两个tomcat的容器实例在运行,接下来运行如下命令进入第一个容器:

$docker exec -it e7bc718f8429 /bin/bash
这时就进入到了ID为e7bc718f8429的容器内,再在容器内运行ip addr命令即可查看容器的IP地址:



可以看到,容器的IP地址为172.17.0.3,类似的,可以看到另一个容器的IP地址为172.17.0.2(说明:如果没有做额外的配置,同时启动容器时又没有指定IP地址,那么容器的IP地址一般从172.17.0.1或172.17.0.2开始的,如果宿主机的IP地址为127.17.0.1,则容器的IP地址就从172.17.0.2开始分配,否则就从172.17.0.1开始分配)。
第二步:在宿主机中运行如下命令将两个容器加入到集群中(如果像上图一样还在容器中,则在终端中输入exit命令即可返回宿主机):

$sudo docker run –-rm swarm join –addr=172.17.0.2:2375




出现上图中的提示信息就表示添加成功了,但是必须按下Ctrl+C组合键才可退出。类似地,我们可以将另外一个IP地址172.17.0.3也添加到swarm集群中。

第三步:在宿主机的终端中运行如下命令启动swarm manager:

$sudo docker run –d –p 2376:2375 swarm manage token://6cce80f59f4292ba8f4e085950c6f480




像上图一样执行完命令后出现了一个新的ID就表示启动成功了,到此swarm集群搭建完毕。可以运行如下命令查看集群中包含的节点:

$docker run –-rm swarm list token://6cce80f59f4292ba8f4e085950c6f480




可以看到,目前集群中有两个节点:172.17.0.3和172.17.0.2。下面我们来验证一下集群的效果。我们分别进入每个容器启动一下tomcat:



这时用宿主机的对外IP地址访问tomcat:



可以看到,已经可以通过集群访问tomcat了。
为了验证集群的效果,我们可以再次进入容器将其中的tomcat顺次关闭。首先进入172.17.0.2中关闭tomcat:

root@647d583c2f14:/usr/local/tomcat/bin#sh shutdown.sh
此时再在浏览器中刷新页面,会发现依然可以访问tomcat首页:



而再进入172.17.0.3中关闭tomcat:
root@e7bc718f8429:/usr/local/tomcat/bin#sh shutdown.sh


此时再在浏览器里刷新页面,会出现如下问题:



此时已经无法通过集群访问页面了!然后再进入172.17.0.3启动tomcat:



再刷新页面:



OK,swarm集群搞定!
回过头来我们再来分析一下。网上很多教程里对于swarm join命令里的IP地址说的不是很清楚,到底是哪个机器的IP?宿主机的还是容器的?经笔者测试后发现,swarm join只能写由本机启动的容器的IP地址,否则虽然能够添加成功,但集群机制却不起作用。
希望对大家学习docker集群有所帮助!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  集群 docker