在爬虫开发过程中,你肯定遇到过需要把爬虫部署在多个服务器上面的情况。此时你是怎么操作的呢?逐一ssh登录每个服务器,使用git拉下代码,然后运行?代码修改了,于是又要一个服务器一个服务器登录上去依次更新?
有时候爬虫只需要在一个服务器上面运行,有时候需要在200个服务器上面运行。你是怎么快速切换的呢?一个服务器一个服务器登录上去开关?或者聪明一点,在redis里面设置一个可以修改的标记,只有标记对应的服务器上面的爬虫运行?
a爬虫已经在所有服务器上面部署了,现在又做了一个b爬虫,你是不是又得依次登录每个服务器再一次部署?
如果你确实是这么做的,那么你应该后悔没有早一点看到这篇文章。看完本文以后,你能够做到:
2分钟内把一个新爬虫部署到50台服务器上:
30秒内把爬虫从50台服务器扩展到500台服务器:
30秒内批量关闭所有服务器上的爬虫:
1分钟内批量更新所有机器上的爬虫:
这篇文章不会教你怎么使用docker,所以请确定你有一些docker基础再来看本文。
docker swarm是什么
docker swarm是docker自带的一个集群管理模块。他能够实现docker集群的创建和管理。
环境搭建
本文将会使用3台ubuntu 18.04的服务器来进行演示。这三台服务器安排如下:
master:45.77.138.242
slave-1:199.247.30.74
slave-2:95.179.143.21
docker swarm是基于docker的模块,所以首先要在3台服务器上安装docker。安装完成docker以后,所有的操作都在docker中完成。
在master上安装docker
通过依次执行下面的命令,在master服务器上安装docker
创建manager节点
一个docker swarm集群需要manager节点。现在初始化master服务器,作为集群的manager节点。运行下面一条命令。
运行完成以后,可以看到的返回结果下图所示。
这个返回结果中,给出了一条命令:
这条命令需要在每一个从节点(slave)中执行。现在先把这个命令记录下来。
初始化完成以后,得到一个只有1台服务器的docker 集群。执行如下命令:
可以看到当前这个集群的状态,如下图所示。
创建私有源(可选)
创建私有源并不是一个必需的操作。之所以需要私有源,是因为项目的docker镜像可能会涉及到公司机密,不能上传到dockerhub这种公共平台。如果你的镜像可以公开上传dockerhub,或者你已经有一个可以用的私有镜像源,那么你可以直接使用它们,跳过本小节和下一小节。
私有源本身也是一个docker的镜像,先将拉取下来:
如下图所示。
现在启动私有源:
如下图所示。
在启动命令中,设置了对外开放的端口为8003端口,所以私有源的地址为:45.77.138.242:8003
提示:
这样搭建的私有源是http方式,并且没有权限验证机制,所以如果对公网开放,你需要再使用防火墙做一下ip白名单,从而保证数据的安全。
允许docker使用可信任的http私有源(可选)
如果你使用上面一个小节的命令搭建了自己的私有源,由于docker默认是不允许使用http方式的私有源的,因此你需要配置docker,让docker信任它。
使用下面命令配置docker: