集群是一组运行docker并且加入在一个群组的多台机器,加入集群之后,你还可以继续运行自己的docker命令,但是现在这些机器由集群管理器在集群上执行的。

1、集群介绍

集群是一组运行docker并且加入在一个群组的多台机器,加入集群之后,你还可以继续运行自己的docker命令,但是现在这些机器由集群管理器在集群上执行的。集群中的机器可以是物理或者虚拟的,加入群组后,每台机器都被称之为节点。

集群管理器可以使用不同的策略来管理运行的容器,例如:emptiest node,这个命令用来填充那些利用最少的容器;global来确保每台机器只能获得指定容器的一个实例。你可以将这些策略写入就像上一章节写的那样的文件里面来执行集群管理器的策略。

集群管理器是在集群中唯一能够执行命令的机器,你也可以授权其它机器加入集群管理工作。被授权的机器只能够xxxx(Workers are just there to provide capacity,不知道怎么翻译),而不能让其它机器做什么或者不做什么。

到目前为止,你已经可以在你的本地机器上以单机的方式使用docker,但是docker也可以切换到集群模式,开启集群模式后,你的机器就成为了一台集群管理器,然后docker所运行的命令将是管理集群的命令,而不仅仅是在你当前机器上运行。

2、设置集群

集群是由多个节点组成的,不管是物理的还是虚拟的。基本概念很简单:运行”docker swarm init”命令来开启集群模式,使当前机器成为集群管理器,然后在其它机器上运行”docker swarm join”让他们加入到集群中。

如果你的机器上没有安装docker-machine,则需要先安装docker-mackine,下载链接:

curl -L https://github.com/docker/machine/releases/download/v0.12.0/docker-machine-uname -s-uname -m >docker-machine ,可以下载最新版的,这里以下载的是0.12.0版本,由于官方介绍的是用virtualbox安装docker机器,所以需要下载安装virtualbox,下载链接:

http://download.virtualbox.org/virtualbox/5.1.22/VirtualBox-5.1-5.1.22_115126_el7-1.x86_64.rpm

当我们使用 rpm -ivh VirtualBox-5.1-5.1.22_115126_el7-1.x86_64.rpm 安装vitualbox时,会提示如下错误,可以看出是安装virtualbox所需要的依赖包:

docker rocketmq集群 docker 集群管理_docker rocketmq集群


这时,我们只需要运行 yum install *.rpm 命令,就可以安装所有的依赖包和virtualbox,提示如下:

docker rocketmq集群 docker 集群管理_docker rocketmq集群_02


这个命令会自动检查安装包所需要的依赖包并且自动安装。

接下来使用docker-machine命令安装两台虚拟机用来部署集群:

docker-machine create –driver virtualbox myvm1


这里又提示有错误了,所示要运行sudo /sbin/vboxconfig 这个命令,那么就运行吧,这个是初始化virtualbox的命令。

docker rocketmq集群 docker 集群管理_docker集群_03


根据提示运行命令,又提示如下错误,意思是需要安装kernel-devel-3.10.0-514.21.1.el7.x86_64和kernel-devel如果安装过了可以忽略这个步骤。

docker rocketmq集群 docker 集群管理_docker rocketmq集群_04


再次运行sudo /sbin/vboxconfig ,提示virtualbox服务启动成功。

docker rocketmq集群 docker 集群管理_docker集群_05


又报错了,大致意思就是这个电脑不支持VT_X/AMD-v,需要在BISO里面进行设置。

docker rocketmq集群 docker 集群管理_集群_06


我是在vmware里面安装的centos,所以,现在我们要关闭虚拟机,对虚拟机进行设置,打开虚拟机CPU的VT_X/AMD-v支持,选择处理器,在右边的虚拟化引擎中,选择虚拟化Intel VT-x/EPT 或AMD-V/RVI(V),如果你是真机环境,那么就需要去BOIS里面设置了。

docker rocketmq集群 docker 集群管理_docker rocketmq集群_07


重新开启虚拟机。

当我们再次安装的时候,没有报错,但是会下载一个叫boot2docker.iso的镜像文件,我这里下载比较慢,直接去官网下载,然后拷贝到指定目录:/home/xxxx/.docker/machine/cache/ 下即可。

docker rocketmq集群 docker 集群管理_docker集群_08


安装虚拟机1完成,然后安装虚拟机2

docker-machine create –driver virtualbox myvm2


然后通过docker-machine ls 命令查看安装的两个虚拟机,到此,两个虚拟机安装完成。

docker rocketmq集群 docker 集群管理_docker rocketmq集群_09


将myvm1 作为管理集群管理者,输入 docker-machine ssh myvm1 “docker swarm init” ,

docker rocketmq集群 docker 集群管理_docker_10


但是报错了,大意就是说这个虚拟机有两个ip地址,需要指定一个,使用的参数为:–advertise-addr ip地址,看到如下提示,表示设置成功。

docker rocketmq集群 docker 集群管理_docker_11


然后将myvm2添加到集群中,使用命令为:

docker-machine ssh myvm2 “docker swarm join –token SWMTKN-1-1rtc9oy15lzxvyhvqpug4krxhorsny3gos8upjjz4cdde0jer6-dmc9xeoo18wm1bfgge7wtly3v 192.168.99.100:2377”


出现如下提示则表示加入集群成功。

docker rocketmq集群 docker 集群管理_docker rocketmq集群_12


使用命令docker-machine ssh myvm1进入myvm1对集群进行管理,在myvm1中输入命令docker node ls查看集群节点,如下图所示,当然也可以用docker-machine提供的交互命令查看,docker-machine ssh myvm1 “docker node ls”,退出myvm1使用exit命令。

docker rocketmq集群 docker 集群管理_docker集群_13

好了,所有的环境已经配置完毕,接下来我们需要在集群中部署我们的应用了,

我们将在上一章节中的docker-compose.yml文件拷贝到myvm1中,这里使用命令为:

docker-machine scp docker-compose.yml myvm1:~


然后在myvm1中运行应用部署命令:

docker-machine ssh myvm1 “docker stack deploy -c docker-compose.yml getstartedlab”


docker rocketmq集群 docker 集群管理_virtualbox_14


到此为止,应用程序就创建完毕了,访问集群的ip,可以看到返回的结果是不同id的,说明集群部署成功。

注意点:如果返回curl: (7) Failed connect to 192.168.99.101:80; Connection refused的错误,需要等一下,虽然返回成功了,但是集群里面还在创建应用,稍等再进行访问即可。

docker rocketmq集群 docker 集群管理_集群_15


从一个集群中删除某一个节点,命令为:

docker-machine ssh myvm2 “docker swarm leave”


如果要删除整个集群,命令为:

docker-machine ssh myvm1 “docker swarm leave –force”