如何使用Docker Swarm搭建分布式爬虫集群


今天小编给大家分享一下如何使用Docker Swarm搭建分布式爬虫集群的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。2分钟内把一个新爬虫部署到50台服务器上:30秒内把爬虫从50台服务器扩展到500台服务器:30秒内批量关闭所有服务器上的爬虫:1分钟内批量更新所有机器上的爬虫:这篇文章不会教你怎么使用docker,所以请确定你有一些docker基础再来看本文。docker swarm是什么docker swarm是docker自带的一个集群管理模块。他能够实现docker集群的创建和管理。环境搭建本文将会使用3台ubuntu 18.04的服务器来进行演示。这三台服务器安排如下:master:45.77.138.242slave-1:199.247.30.74slave-2:95.179.143.21docker swarm是基于docker的模块,所以首先要在3台服务器上安装docker。安装完成docker以后,所有的操作都在docker中完成。在master上安装docker通过依次执行下面的命令,在master服务器上安装docker创建manager节点一个docker swarm集群需要manager节点。现在初始化master服务器,作为集群的manager节点。运行下面一条命令。运行完成以后,可以看到的返回结果下图所示。这个返回结果中,给出了一条命令:复制代码代码如下:docker swarm join –token swmtkn-1-0hqsajb64iynkg8ocp8uruktii5esuo4qiaxmqw2pddnkls9av-dfj7nf1x3vr5qcj4cqiusu4pv 45.77.138.242:2377这条命令需要在每一个从节点(slave)中执行。现在先把这个命令记录下来。初始化完成以后,得到一个只有1台服务器的docker 集群。执行如下命令:可以看到当前这个集群的状态,如下图所示。创建私有源(可选)创建私有源并不是一个必需的操作。之所以需要私有源,是因为项目的docker镜像可能会涉及免费云主机域名到公司机密,不能上传到dockerhub这种公共平台。如果你的镜像可以公开上传dockerhub,或者你已经有一个可以用的私有镜像源,那么你可以直接使用它们,跳过本小节和下一小节。私有源本身也是一个docker的镜像,先将拉取下来:如下图所示。现在启动私有源:复制代码代码如下:docker run -d -p 8003:5000 –name registry -v /tmp/registry:/tmp/registry docker.io/registry:latest如下图所示。在启动命令中,设置了对外开放的端口为8003端口,所以私有源的地址为:45.77.138.242:8003提示:这样搭建的私有源是http方式,并且没有权限验证机制,所以如果对公网开放,你需要再使用防火墙做一下ip白名单,从而保证数据的安全。允许docker使用可信任的http私有源(可选)如果你使用上面一个小节的命令搭建了自己的私有源,由于docker默认是不允许使用http方式的私有源的,因此你需要配置docker,让docker信任它。使用下面命令配置docker:然后使用下面这个命令重启docker。如下图所示。重启完成以后,manager节点就配置好了。创建子节点初始化脚本对于slave服务器来说,只需要做三件事情:安装docker加入集群信任源从此以后,剩下的事情全部交给docker swarm自己管理,你再也不用ssh登录这个服务器了。为了简化操作,可以写一个shell脚本来批量运行。在slave-1和slave-2服务器下创建一个init.sh文件,其内容如下。把这个文件设置为可自行文件,并运行:如下图所示。等待脚本运行完成以后,你就可以从slave-1和slave-2的ssh上面登出了。以后也不需要再进来了。回到master服务器,执行下面的命令,来确认现在集群已经有3个节点了:看到现在集群中已经有3个节点了。如下图所示。到止为止,最复杂最麻烦的过程已经结束了。剩下的就是体验docker swarm带来的便利了。创建测试程序搭建测试redis由于这里需要模拟一个分布式爬虫的运行效果,所以先使用docker搭建一个临时的redis服务:在master服务器上执行以下命令:复制代码代码如下:docker run -d –name redis -p 7891:6379 redis –requirepass “kingnameishandsome8877″这个redis对外使用7891端口,密码为kingnameishandsome8877,ip就是master服务器的ip地址。编写测试程序编写一个简单的python程序:这个python每10秒钟从redis中读取一个数,并打印出来。编写dockerfile编写dockerfile,基于python3.6的镜像创建我们自己的镜像:构建镜像编写完成dockerfile以后,执行下面的命令,开始构建我们自己的镜像:这里需要特别注意,由于我们要把这个镜像上传到私有源供slave服务器上面的从节点下载,所以镜像的命名方式需要满足localhost:8003/自定义名字:版本号这样的格式。其中的自定义名字版本号可以根据实际情况进行修改。在本文的例子中,我由于要模拟一个爬虫的程序,所以给它取名为spider,由于是第1次构建,所以版本号用的是0.01。整个过程如下图所示。上传镜像到私有源镜像构建完成以后,需要把它上传到私有源。此时需要执行命令:如下图所示。大家记住这个构建和上传的命令,以后每一次更新代码,都需要使用这两条命令。创建服务docker swarm上面运行的是一个一个的服务,因此需要使用docker service命令创建服务。复制代码代码如下:docker service create –name spider –network host 45.77.138.242:8003/spider:0.01这个命令创建了一个名为spider的服务。默认运行1个容器。运行情况如下图所示。当然也可以一创建就用很多容器来运行,此时只需要添加一个--replicas参数即可。例如一创建服务就使用50个容器运行:复制代码代码如下:docker service create –name spider –replicas 50 –network host 45.77.138.242:8003/spider:0.01但是一般一开始的代码可能会有不少bug,所以建议先使用1个容器来运行,观察日志,发现没有问题以后再进行扩展。回到默认1个容器的情况下,这个容器可能在目前三台机器在的任何一台上面。通过执行下面的命令来观察这一个默认的容器运行情况:如下图所示。查看节点log根据上图执行结果,可以看到这个运行中的容器的id为rusps0ofwids,那么执行下面的命令动态查看log:此时就会持续跟踪这一个容器的log。如下图所示。横向扩展现在,只有1台服务器运行了一个容器,我想使用3台服务器运行这个爬虫,那么我需要执行一条命令即可:运行效果如下图所示。此时,再一次查看爬虫的运行情况,可以发现三台机器上面会各自运行一个容器。如下图所示。现在,我们登录slave-1机器上,看看是不是真的有一个任务在运行。如下图所示。可以看到确实有一个容器在上面运行着。这是docker swarm自动分配过来的。现在我们使用下面的命令强行把slave-1上面的docker给关了,再来看看效果。回到master服务器,再次查看爬虫的运行效果,如下图所示。可以看到,docker swarm探测到slave-1掉线以后,他就会自动重新找个机器启动任务,保证始终有3个任务在运行。在这一次的例子中,docker swarm自动在master机器上启动了2个spider容器。如果机器性能比较好,甚至可以在3每台机器上面多运行几个容器:此时,就会启动10个容器来运行这些爬虫。这10个爬虫之间互相隔离。如果想让所有爬虫全部停止怎么办?非常简单,一条命令:这样所有爬虫就会全部停止。同时查看多个容器的日志如果想同时看所有容器怎么办呢?可以使用如下命令查看所有容器的最新的20行日志:复制代码代码如下:docker service ps robot | grep running | awk ‘{print $1}’ | xargs -i docker service logs –tail 20 {}这样,日志就会按顺序显示出来了。如下图所示。更新爬虫如果你的代码做了修改。那么你需要更新爬虫。先修改代码,重新构建,重新提交新的镜像到私有源中。如下图所示。接下来需要更新服务中的镜像。更新镜像有两种做法。一种是先把所有爬虫关闭,再更新。第二种是直接执行更新命令。他们的区别在于,直接执行更新命令时,正在运行的容器会一个一个更新。运行效果如下图所示。你可以用docker swarm做更多事情本文使用的是一个模拟爬虫的例子,但是显然,任何可以批量运行的程序都能够用docker swarm来运行,无论你用redis还是celery来通信,无论你是否需要通信,只要能批量运行,就能用docker swarm。在同一个swarm集群里面,可以运行多个不同的服务,各个服务之间互不影响。真正做到了搭建一次docker swarm集群,然后就再也不用管了,以后的所有操作你都只需要在manager节点所在的这个服务器上面运行。以上就是“如何使用Docker Swarm搭建分布式爬虫集群”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注百云主机行业资讯频道。

相关推荐: 电脑打不开php文件如何解决

本篇内容主要讲解“电脑打不开php文件如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“电脑打不开php文件如何解决”吧! 一、为什么电脑打不开PHP文件?1.未安装PHP环境如果你想在电脑上运行PHP程序,必…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 07/20 22:21
下一篇 07/20 22:21

相关推荐