美文网首页程序员
pyspider: swarm分布式爬虫

pyspider: swarm分布式爬虫

作者: 彭金虎 | 来源:发表于2017-06-02 21:37 被阅读201次

目录


  • 起点
  • 搭建swarm
  • 编写docker-compose.yml
  • 部署服务
  • 感想

1. 起点


学习爬虫有一段时间了,使用过Scrapy, 就想试试其它的爬虫框架,选择pyspider也是因为想通过pyspider了解一下分布式爬虫,由于docker技术的成熟,也就顺理成章的选择docker来完成这件事。

2. 搭建swarm


创建节点

创建三个docker machine:

$ docker-machine create --driver virtualbox manager1
$ docker-machine create --driver virtualbox worker1
$ docker-machine create --driver virtualbox worker2

执行如下命令可查看新创建的docker machine, 以及docker machine对用的IP地址

$ docker-machine ls
NAME       ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
default    *        virtualbox   Running   tcp://192.168.99.100:2376           v17.05.0-ce
manager1   -        virtualbox   Running   tcp://192.168.99.101:2376           v17.05.0-ce
worker1    -        virtualbox   Running   tcp://192.168.99.102:2376           v17.05.0-ce
worker2    -        virtualbox   Running   tcp://192.168.99.103:2376           v17.05.0-ce

创建swarm

登陆 manager1:

$ docker-machine ssh manager1

执行如下命令,创建一个新的swarm

docker@manager1:~$ docker swarm init --advertise-addr 192.168.99.101

Swarm initialized: current node (wpf2jcvhhvfosv3c9ac6c50dh) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-69wvyxsrnjtm11z38eus20tm0z9cof2ks9khzyv7fdo8it0dln-drdoszuykjp1uvhmn2spaa8vj \
    192.168.99.101:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

将节点加入swarm

登陆worker1, 将worker1加入swarm:

docker@worker1:~$ docker swarm join \
>     --token SWMTKN-1-69wvyxsrnjtm11z38eus20tm0z9cof2ks9khzyv7fdo8it0dln-drdoszuykjp1uvhmn2spaa8vj \
>     192.168.99.101:2377
This node joined a swarm as a worker.

登陆worker2, 将worker2加入swarm:

docker@worker2:~$ docker swarm join \
>     --token SWMTKN-1-69wvyxsrnjtm11z38eus20tm0z9cof2ks9khzyv7fdo8it0dln-drdoszuykjp1uvhmn2spaa8vj \
>     192.168.99.101:2377
This node joined a swarm as a worker.

查看当前swarm状态

docker@manager1:~$ docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
k926754fhudg5tu51rnlp2fdj     worker2             Ready               Active
q1seyrwugtdceqd515tmp8ph3     worker1             Ready               Active
wpf2jcvhhvfosv3c9ac6c50dh *   manager1            Ready               Active              Leader

至此,三个节点的swarm已经创建完成。

3. 编写docker-compose.yml


docker-compose.yml请参考

docker-compose.yml

注意事项

  • compose file使用version: 3
  • 部署多replicas时,不需要使用HAproxy的Load Balance,swarm服务本身自带VIP,如:
  • command中需要连接其它服务时,配置参数不可写在文件中,如scheduler需要连接mysql, redis等,不能使用config.json文件

    command: -c config.json scheduler
    
  • 在使用stack deploy时,docker-compose file中 link, depends_on等命令被忽略,具体信息请参考compose file版本3

  • 所有服务使用同一网络段,如cars

  • 如果需要连接远端mysql, redis修改连接地址即可,如

    command: '--taskdb "mysql+taskdb://root:root@10.208.20.94:3306/taskdb" --resultdb "mysql+resultdb://root:root@10.208.20.94:3306/resultdb" --projectdb "mysql+projectdb://root:root@10.208.20.94:3306/projectdb" --message-queue "redis://10.208.20.94:6379/db" webui --max-rate 10 --max-burst 3 --scheduler-rpc "http://scheduler:23333/" --fetcher-rpc "http://fetcher/"'
    

4. 部署服务


部署

登陆manager1, 执行如下命令:

docker@manager1:~$ docker stack deploy -c docker-compose.yml myspider

注意事项

swarm服务部署没有严格的顺序,所以会出现mysql, redis服务启动较晚,在service部署要设置restart_policy, 如

docker@manager1:~$ docker stack deploy -c docker-compose.yml myspider
Creating network myspider_cars
Creating service myspider_fetcher
Creating service myspider_processor
Creating service myspider_result-worker
Creating service myspider_webui
Creating service myspider_redis
Creating service myspider_mysql
Creating service myspider_scheduler
Creating service myspider_phantomjs

5. 感想


由于本身对swarm stack缺乏经验,中途一度想放弃swarm, 转而采用k8s,还好坚持下来,所以也就有了这篇记录,列出了当前踩的一些坑。

相关文章

  • pyspider: swarm分布式爬虫

    目录 起点 搭建swarm 编写docker-compose.yml 部署服务 感想 1. 起点 学习爬虫有一段时...

  • PySpider

    PySpider 国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多...

  • 实现Pyspider爬虫结果的自定义ResultWorker

    前言 最近在用pyspider实现项目的爬虫系统,鉴于我们需要自定义的爬虫结果。所有需要重写pyspider自身的...

  • 1.python爬虫——开源项目scrapy

    PySpider PySpider详细介绍 PySipder是一个Python爬虫程序 演示地址:http://d...

  • Pyspider基本使用

    pyspider web爬虫框架简单使用 pip3 install pyspider 在桌面创建一个pyspide...

  • Python爬虫之爬虫框架概述

    一,pyspider pyspider的设计基础是:以python脚本驱动的抓取环模型爬虫 通过python脚本进...

  • pyspider 爬虫教程

    注:采转归档,自己学习查询使用 pyspider 爬虫教程(1):HTML 和 CSS 选择器pyspider 爬...

  • pyspider爬虫框架

    官方文档:http://docs.pyspider.org/ PySpider:一个国人编写的强大的网络爬虫系统并...

  • Pyspider 启用 webdav 编辑模式

    Pyspider 是国人开发一款特性(去重、定时、分布式等)比较丰富的爬虫,易用性也很不错,甚至还有一个 web ...

  • Python pyspider 安装与开发

    PySpider 简介 PySpider是一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python...

网友评论

    本文标题:pyspider: swarm分布式爬虫

    本文链接:https://www.haomeiwen.com/subject/ixnufxtx.html