docker分布式部署pyspider爬虫系统

2024-05-26 08:18

本文主要是介绍docker分布式部署pyspider爬虫系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

阅读准备

  1. docker基础命令,docker-compose基础
  2. pyspider基础

如果您不熟悉上面的内容,可以先网上查阅有关资料。

1. 创建网络接口

首先,创建一个Driver为bridge的网络接口,命名为pyspider
docker network create --driver bridge pyspider

  • 说明1: 需要创建该网络接口的原因是:在下面创建Docker容器的过程中,我们使用了dockerdocker-compose分别创建了不同的服务。按正常来说,如果都使用docker-compose来创建服务会更好;但是这里有些特殊需求,所有就混合使用dockerdocker-compose来创建服务了。

  • 说明2:直接使用docker命令创建容器时,容器的默认网络接口使用的是NAMEbridge的接口;而使用docker-compose时,默认的网络接口使用的不是NAMEbridge的接口,而是根据docker-compose.yml文件所在目录命名的网络接口。如,我的docker-compose.yml文件在目录Pyspider下,则使用docker-compose时的默认网络接口就是pyspider_default。所以,如果我们使用dockerdocker-compose时,默认的情况下它们属于不同的子网,网络不互通,这不是我们想要的。dokcerdocker-compose的网络接口都可以通过参数自定义,从而实现它们的服务的网络互通,所有我们才自己创建一个网络接口。

  • 说明3:

    • 可以通过命令docker network ls查看已有的网络接口,如下图:
      docker网络接口
    • 可以通过docker network inspect bridge命令查看网络接口的详细信息。如NAMEbridge的详细信息如下图:
      查看网络接口信息

资料: https://docs.docker.com/engine/userguide/networking/

2. 创建Redis服务

运行命令:docker run --network=pyspider --name redis -d -p 6379:6379 redis 创建Redis服务。

  • 说明1:其中,参数--network=pyspider指定使用pyspider网络接口。我们可以使用docker inspect redis | grep IPA查看该容器的ip地址,如下图:
    查看容器ip地址

    我们还可以通过docker logs reids查看容器redis的日志输出,来观察redis服务是否正常运行。

3. 创建mysql服务

运行:docker run --network pyspider -p 3306:3306 --name pymysql -v /Users/andy/Pyspider/mysql/conf/my.cnf:/etc/mysql/my.cnf -v /Users/andy/Pyspider/mysql/logs:/logs -v /Users/andy/Pyspider/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root123 -d mysql以创建mysql服务。

  • 说明:
    • 指定网络接口--network=pyspider
    • -p 3306:3306指定端口号
    • -v /Users/andy/Pyspider/mysql/conf/my.cnf:/etc/mysql/my.cnf指定mysql配置文件
    • -v /Users/andy/Pyspider/mysql/logs:/logs指定日志目录
    • -v /Users/andy/Pyspider/mysql/data:/var/lib/mysql指定mysql的数据文件存储目录
    • -e MYSQL_ROOT_PASSWORD=root123指定root账户的密码为root123

docker inspect pymysql | grep IPA查看mysql容器的ip地址。

mysql容器ip地址

4. 创建pyspider的scheduler服务

运行:docker run --network=pyspider --name scheduler -d -p 23333:23333 --restart=always binux/pyspider --taskdb "mysql+taskdb://root:root123@172.20.0.2:3306/taskdb" --resultdb "mysql+projectdb://root:root123@172.20.0.2:3306/resultdb" --projectdb "mysql+projectdb://root:root123@172.20.0.2:3306/projectdb" --message-queue "redis://172.20.0.3:6379/0" scheduler --inqueue-limit 10000 --delete-time 3600

  • 参数说明

    • --network=pyspider指定网络接口
    • -p 23333:23333指定端口
    • root:root123@172.20.0.2:3306为mysql服务的ip地址,端口,用户名和密码
    • redis://172.20.0.3:6379/0为redis服务的配置。
    • 命令运行成功后,可以通过docker logs scheduler查看scheduler服务的运行情况。
  • 查看scheduler的ip地址为:172.20.0.4,方便后边使用。

  • pyspider分布式部署中,scheduer服务只能创建一个。

5. 使用docker-compose创建pyspider的其它组件

配置文件docker-compose.yml的内容如下:

version: '2'
services:phantomjs:image: 'binux/pyspider:latest'command: phantomjscpu_shares: 256environment:- 'EXCLUDE_PORTS=5000,23333,24444'expose:- '25555' # 暴露端口25555给link到此service的容器mem_limit: 256mrestart: alwaysphantomjs-lb:image: 'dockercloud/haproxy:latest' # 使用haproxy使用负载均衡links:- phantomjsvolumes:- /var/run/docker.sock:/var/run/docker.sock # docker-compose v2版本中haproxy需要指定docker socket(MAC系统中)restart: alwaysfetcher:image: 'binux/pyspider:latest'command: '--message-queue "redis://172.20.0.3:6379/0" --phantomjs-proxy "phantomjs:80" fetcher --xmlrpc' # fetcher以rpc的方式启动cpu_shares: 256environment:- 'EXCLUDE_PORTS=5000,25555,23333'links:- 'phantomjs-lb:phantomjs'mem_limit: 256mrestart: alwaysfetcher-lb:image: 'dockercloud/haproxy:latest' # 使用haproxy使用负载均衡links:- fetchervolumes:- /var/run/docker.sock:/var/run/docker.sock # docker-compose v2版本中haproxy需要指定docker socket(MAC系统中)restart: alwaysprocessor:image: 'binux/pyspider:latest'command: '--projectdb "mysql+projectdb://root:root123@172.20.0.2:3306/projectdb" --message-queue "redis://172.20.0.3:6379/0" processor'cpu_shares: 256mem_limit: 256mrestart: alwaysresult-worker:image: 'binux/pyspider:latest'command: '--taskdb "mysql+taskdb://root:root123@172.20.0.2:3306/taskdb"  --projectdb "mysql+projectdb://root:root123@172.20.0.2:3306/projectdb" --resultdb "mysql+resultdb://root:root123@172.20.0.2:3306/resultdb" --message-queue "redis://172.20.0.3:6379/0" result_worker'cpu_shares: 256mem_limit: 256mrestart: alwayswebui:image: 'binux/pyspider:latest'command: '--taskdb "mysql+taskdb://root:root123@172.20.0.2:3306/taskdb"  --projectdb "mysql+projectdb://root:root123@172.20.0.2:3306/projectdb" --resultdb "mysql+resultdb://root:root123@172.20.0.2:3306/resultdb" --message-queue "redis://172.20.0.3:6379/0" webui --max-rate 0.3 --max-burst 3 --scheduler-rpc "http://172.20.0.4:23333/" --fetcher-rpc "http://fetcher/"'cpu_shares: 256environment:- 'EXCLUDE_PORTS=24444,25555,23333'ports:- '5000:5000' # webui的对外的端口为5000,可以通过http://localhost:5000访问webui服务。links:- 'fetcher-lb:fetcher' # link到其它负载均衡haproxy的服务。mem_limit: 256mrestart: alwaysnetworks:default:external:name: pyspider #指定docker-compose的网络接口为:pyspider;实现和docker run方式创建容器的互通。
  • webui服务说明
    • --fetcher-rpc "http://fetcher/"是以服务名的方式指定webui链接到的fetcher服务,因为fetcher实例可以有很多个,我们如果用ip指定就不能起到负载均衡的目的了。
    • --scheduler-rpc "http://172.20.0.4:23333/"是webui直接用ip和port的方式链接到scheduler服务,因为scheduler只有一个。
    • command的其它参数可以参考pyspider的文档:http://docs.pyspider.org/en/latest/
  • haproxy的文档:https://github.com/docker/dockercloud-haproxy
  • docker-compose的文档:https://docs.docker.com/compose/

docker-compose.yml文件写好后,运行docker-compose up(要在docker-compose.yml所在目录)命令,docker-compose开始创建容器服务,如下图:

docker-compose up

所有组件服务创建完成后,访问:http://localhost:5000,即可看到webui界面。

如果想创建更多的fetcher, result_work, phantomjs容器实例,可以使用:docker-compose scale phantomjs=2 processor=4 result-worker=2docker-compose会自动帮你创建2个phantomjs服务,4个processor服务,2个result-worker服务;haproxy会自动实现负载均衡,如下图:

docker-compose scale

最后说明

  1. redis, mysql, scheudler服务的ip地址需要根据您的容器的ip具体而定。

这篇关于docker分布式部署pyspider爬虫系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1003922

相关文章

闲置电脑也能活出第二春?鲁大师AiNAS让你动动手指就能轻松部署

对于大多数人而言,在这个“数据爆炸”的时代或多或少都遇到过存储告急的情况,这使得“存储焦虑”不再是个别现象,而将会是随着软件的不断臃肿而越来越普遍的情况。从不少手机厂商都开始将存储上限提升至1TB可以见得,我们似乎正处在互联网信息飞速增长的阶段,对于存储的需求也将会不断扩大。对于苹果用户而言,这一问题愈发严峻,毕竟512GB和1TB版本的iPhone可不是人人都消费得起的,因此成熟的外置存储方案开

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟 开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚 第一站:海量资源,应有尽有 走进“智听

阿里开源语音识别SenseVoiceWindows环境部署

SenseVoice介绍 SenseVoice 专注于高精度多语言语音识别、情感辨识和音频事件检测多语言识别: 采用超过 40 万小时数据训练,支持超过 50 种语言,识别效果上优于 Whisper 模型。富文本识别:具备优秀的情感识别,能够在测试数据上达到和超过目前最佳情感识别模型的效果。支持声音事件检测能力,支持音乐、掌声、笑声、哭声、咳嗽、喷嚏等多种常见人机交互事件进行检测。高效推

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

软考系统规划与管理师考试证书含金量高吗?

2024年软考系统规划与管理师考试报名时间节点: 报名时间:2024年上半年软考将于3月中旬陆续开始报名 考试时间:上半年5月25日到28日,下半年11月9日到12日 分数线:所有科目成绩均须达到45分以上(包括45分)方可通过考试 成绩查询:可在“中国计算机技术职业资格网”上查询软考成绩 出成绩时间:预计在11月左右 证书领取时间:一般在考试成绩公布后3~4个月,各地领取时间有所不同