2020-11-29

分布式爬虫往往都需要多个环境,多个进程,如果手动去管理这些环境是很费事的,使用Docker集群就能很好地帮你解决这些问题,让你的爬虫管理变得简单。

主节点安装Docker

这里主节点建议大家使用Ubuntu,从节点随意。

  • Ubuntu

  1. apt-get update

  2. apt-get install -y apt-transport-https ca-certificates curl software-properties-common

  3. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

  4. add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

  5. apt-get update

  6. apt-get install -y docker-ce

  • Centos

  1. yum update -y

  2. yum install -y yum-utils device-mapper-persistent-data lvm2

  3. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  4. yum makecache fast

  5. yum -y install docker-ce

启动Docker

所用ip为本机公网ip

  1. systemctl start docker --advertise-addr 33.22.11.123

新建Manager节点

 
  1. docker swarm init

运行后会产生如下结果

从返回结果中保存以下命令 每个Salve节点都需要使用此命令加入集群

 
  1. docker swarm join --token SWMTKN-1-u4959x22226d0588888888ep3rnnnnnnnnnccepdmmmmmdu-3d4444444444444444pm68ow 2.3.4.5:2377

如果忘了这条命令可以使用以下命令重置

 
  1. docker swarm join-token manager

查看集群状态

你可以看到有一个主节点在运行

 
  1. docker node ls

创建私有源

  • 使用Docker自带的私有源

 
  1. # 拉取私有源镜像

  2. docker pull registry:latest

  3. # 启动私有源

  4. docker run -d -p 8181:5000 --name registry -v /tmp/registry:/tmp/registry docker.io/registry:latest

  5. # 为此http私有源添加信任

  6. echo '{ "insecure-registries":["33.22.11.123:8181"] }' >> /etc/docker/daemon.json

  7. # 重启Docker

  8. systemctl restart docker

搭建Redis进行测试

参考以下文章进行安装配置centos7安装redis - 知乎

编写脚本往Redis里放入测试数据

 
  1. import redis

  2.  

  3. client = redis.Redis(host='33.22.11.123', port=6379)

  4.  

  5. for i in range(100):

  6. client.lpush('test', '测试数据 {}'.format(i))

编写Dockerfile

 
  1. from python:3.6

  2. label mantainer='test-spider'

  3. user root

  4. ENV PYTHONUNBUFFERED=0

  5. ENV PYTHONIOENCODING=utf-8

  6. run python3 -m pip install redis

  7. copy spider.py spider.py

  8. cmd python3 spider.py

编写测试爬虫

 
  1. import time

  2. import redis

  3.  

  4. client = redis.Redis(host='33.22.11.123', port=6379)

  5.  

  6. while True:

  7. data = client.lpop('test')

  8. if data:

  9. print('spider ' + data)

  10. time.sleep(10)

构建Docker镜像

将Dockerfile跟测试爬虫都放在同一目录

 
  1. docker build -t localhost:8003/spider:0.01 .

上传镜像到私有云

这里需要特别注意,由于我们要把这个镜像上传到私有源供Slave服务器上面的从节点下载,所以镜像的命名方式需要满足localhost:8003/自定义名字:版本号这样的格式。其中的自定义名字和版本号可以根据实际情况进行修改。在本文的例子中,我由于要模拟一个爬虫的程序,所以给它取名为spider,由于是第1次构建,所以版本号用的是0.01

 
  1. docker push localhost:8181/spider:0.01

新建Salve节点

 
  1. yum update -y

  2. yum install -y yum-utils device-mapper-persistent-data lvm2

  3. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  4. yum makecache fast

  5. yum -y install docker-ce

  6. echo '{ "insecure-registries":["33.22.11.123:8181"] }' >> /etc/docker/daemon.json

  7. systemctl start docker

  8. docker swarm join --token SWMTKN-1-23fg5ptocob5u2oeyh0984444444229990o2fp8ga4sl-5qwkvghtnzbqjnvk5dxqdqym7 33.22.11.123:2377

使用3个容器创建spider的服务

--replicas 用来指定开启的容器数量

但是一般一开始的代码可能会有不少bug,所以建议先使用1个容器来运行,观察日志,发现没有问题以后再进行扩展。

 
  1. docker service create --name spider --replicas 3 --network host 45.77.138.242:8003/spider:0.01

查看容器的运行状况

 
  1. docker service ps spider

查看容器运行日志

 
  1. # 查看指定ID的服务日志

  2. docker service logs -f 容器ID

 
  1. # 查看所有spider服务的日志

  2. docker service ps spider | grep Running | awk '{print $1}' | xargs -i docker service logs --tail 20 {}

横向扩展

如果你的机器数量小于你开启的服务数量,将会在1台机器上开启多个镜像

 
  1. docker service scale spider=10

更新爬虫

  • 提交新的镜像到私有源

 
  1. docker build -t 33.22.11.123:8003/spider:0.02 .

  2. docker push 33.22.11.123:8181/spider:0.02

  • 更新Salve中的镜像 如果不关闭现有服务直接更新就会依次次更新

 
  1. # 关闭服务再更新

  2. docker service scale spider=0

  3. docker service update --image 33.22.11.123:8181/spider:0.02 spider

  4. docker service scale spider=10

是不是觉得如果在100台服务器上安装Docker,还是很麻烦?下一篇 我们使用Fabric就可以自动化配置Docker集群,让你解放双手。

往期文章 

一周一技 | 批量插入数据到MongoDB并去重

一周一技 | Scrapy如何POST提交空JSON数据

一周一技 | 盘点Python的骚操作

一周一技 | 把很多小姐姐合成一个小姐姐的马赛克拼图

一周一技 | 如何让Python-Pyinstaller打包的程序小于10M

一周一技 | 登陆淘宝如何绕过滑块验证

一周一技 | 利用爬虫技术做一个短信轰炸鸡

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547647.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用php实现随机点名,使用javascript做的一个随机点名程序

这篇文章主要介绍了使用javascript做的一个随机点名程序,经测试,效果相当不错,需要的朋友可以参考下/p>"http://www.w3.org/TR/html4/loose.dtd">点名var status 1;var name new Array(范 鹏,张子涵,代天明,孙 季,孙 磊,王鸿罡,曾凡丁…

C#模拟POST表单提交 --- WebClient

WebClient:http://msdn.microsoft.com/zh-cn/library/system.net.webclient(vVS.80).aspx(MSDN) 代码: string postString "arg1a&arg2b";//这里即为传递的参数,可以用工具抓包分析,也可以自…

nginx反向代理配置实例分享

nginx反向代理配置一例。 配置内容如下: user www www; worker_processes 8; error_log /usr/local/webserver/nginx/logs/nginx_error.log crit; pid /usr/local/webserver/nginx/logs/nginx.pid; worker_rlimit_nofile 51200; events { use epoll; worker_connections 51200;…

八伟大的工具,Windows用户永远都不想错过

有许多的应用程序你可以找到,但是获得免费并且好用 的程序不是一件容易的事情,每当你需要这样的软件的时候,你就会网上搜啊搜,结果下载下来一运行达不到想要的效果,这就是今天我分享我收藏的8个工具原因,这…

Python3网络设备巡检(交换机篇)

介绍 只写了交换机的,路由器、防火墙、负载等其它设备以后,有需求再写,下面以一组交换机为例。 思路 1、收取交换机的信息 需要哪些信息,哪些命令,不同品牌交换机命令不同(本篇以H3C为例)&a…

java免费游戏,java – 分配免费游戏

我的代码基本上是免费分配的,但是当60fps时,GC每30秒运行一次.使用DDMS检查应用程序以进行分配显示有大量的SimpleListIterator被分配.还有一些东西被分配,因为我使用Exchanger.SimpleListIterator来自(T obj:objs){}的每个循环.我的印象是编译器/翻译器会优化那些不…

python字典键值对转化为相应的变量名和变量值

将python字典键值对转化为相应的变量名和变量值可以使用以下方法: globals().update({"name":"value"}) locals().update({"var":"val"}) 举例如下: >>> D{a:1,b:2,c:3} >>> globals().updat…

IE与IE内核浏览器的那点事

真正的IE浏览器与IE内核的浏览器是不是一回事呢,是不是完全一样咧?如果不一样又有什么关系咧?下面一起来找答案吧! 知识补给: 1.浏览内核 简介 2.IE内核浏览器 简介 我的结论:根据以往的经验和上面资料可…

Python 代码优化常见技巧

代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗 80% 的工作量。优化通常包含两方面的内容:减小代码的体积&…

adb shell——Android虚拟机调试必须知道的命令

2019独角兽企业重金招聘Python工程师标准>>> 之前开发Android的时候喜欢用自己的手机来调试,特别是数据库!!!因为是自己的手机嘛,可以安装一些类似数据库编辑器的工具,调试起来非常方便&#xf…

mysql6.10,MySQL经典50题-第6-10题

MySQL50-4-第6-10题本文中介绍的是第6-10题,涉及到的主要知识点:模糊匹配和通配符使用表的自连接in/not in连接查询的条件筛选image题目6题目需求查询“李”姓老师的数量分析过程使用通配符和like来解决SQL实现select count(t_name) from Teacher where …

增加系统右键菜单

本文介绍添加系统右键菜单,效果如下图: 原理很简单就是给注册表添加值,以下是添加系统右键菜单所要涉及的值。 KEY值:HKEY_CLASSES_ROOT\*\shell(所有文件的右键菜单)HKEY_CLASSES_ROOT\directory\shell&am…

Nginx-ingress部署及使用

目录 一 手动部署-官网版 1.1 获取资源1.2 安装RBAC1.3 安装基础资源1.4 安装ingress controllers1.5 创建ingress controllers service二 手动部署-github社区版(推荐) 2.1 获取资源2.2 创建default backend2.3 确认验证三 ingress使用 3.1 创建demo环境3.2 创建i…

转:数字对讲机常识介绍

一、国内外数字对讲机发展动态 从整个移动通信的应用来划分,通信网络可分为公众移动通信和专业移动通信两大类,其中公众移动通信就是社会上广大消费者正在使用的2G、3G移动手机,它是为广大公众提供移动通信服务的,任何人都有权购买…

mac 启动php70 fpm,mac 启动php-fpm

Mac OS X 10.9已经自带有php-fpm,对于有干净系统强迫症的人,或者原装控来说,用brewhome重装一遍总感觉心里会有小兔子,下面把原装的php-fpm配置起来。直接运行,有报错找不到配置文件。$ php-fpm[11-Jan-2014 16:03:03]…

WinRAR(WinZip)压缩与解压实现(C#版Window平台)

本文的原理是借助Windows平台安装的WinRAR(WinZip)实现C#程序的调用(注:WinRAR压缩解压WinZip同样适用)。 先来看WinRAR(WinZip)自身的支持调用命令: 压缩命令:a {0} {1} -r 【{0}:…

Docker Consul 安装及使用服务发现

更多配置和原理:https://blog.csdn.net/liuzhuchen/article/details/81913562 从2016年起就开始接触Consul,使用的主要目的就是做服务发现,后来逐步应用于生产环境,并总结了少许使用经验。最开始使用Consul的人不多,为…

Visual Studio扩展工具添加与卸载

简介:vs 作为主流的开发工具之一,其强大的功能无可厚非,但日益增加的需求就使得vs的扩展工具成为优秀dev所必备的利器之一。 Visual Studio扩展工具添加 Visual Studio扩展工具的添加很简单,只需要选择需要的扩展工具然后一般安装…

python代码风格检查工具──pylint

pylint是一个python代码检查工具,可以帮助python程序员方便地检查程序代码的语法和风格,通过这个工具,可以使你的python代码尽量保持完美,哈哈。具体可以检查什么东西呢?比如你写了 from XXX import * 了,它…

php充值注入,PHP注入一路小跑

PHP注入一路小跑[ 2006-04-20 14:16:55 | 作者: 承諾 ]字体大小: 大 | 中 | 小很老的了,我是给我自己看的。忘了好多,补习一下‘ or ‘11‘/*‘%23‘ and password‘mypassid-1 union select 1,1,1id-1 union select char(97),char(97),char(97)id1 unio…