1. 程式人生 > >docker分散式部署pyspider爬蟲系統

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的詳細資訊如下圖:檢視網路介面資訊

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:[email protected]:3306/taskdb" --resultdb "mysql+projectdb://root:[email protected]:3306/resultdb" --projectdb "mysql+projectdb://root:[email protected]:3306/projectdb" --message-queue "redis://172.20.0.3:6379/0" scheduler --inqueue-limit 10000 --delete-time 3600

  • 引數說明

    • --network=pyspider指定網路介面
    • -p 23333:23333指定埠
    • root:[email protected]: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: phantomjs
    cpu_shares: 256
    environment:
      - 'EXCLUDE_PORTS=5000,23333,24444'
    expose:
      - '25555' # 暴露埠25555給link到此service的容器
    mem_limit: 256m
    restart: always

  phantomjs-lb:
    image: 'dockercloud/haproxy:latest' # 使用haproxy使用負載均衡
    links:
      - phantomjs
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # docker-compose v2版本中haproxy需要指定docker socket(MAC系統中)
    restart: always

  fetcher:
    image: 'binux/pyspider:latest'
    command: '--message-queue "redis://172.20.0.3:6379/0" --phantomjs-proxy "phantomjs:80" fetcher --xmlrpc' # fetcher以rpc的方式啟動
    cpu_shares: 256
    environment:
      - 'EXCLUDE_PORTS=5000,25555,23333'
    links:
      - 'phantomjs-lb:phantomjs'
    mem_limit: 256m
    restart: always

  fetcher-lb:
    image: 'dockercloud/haproxy:latest' # 使用haproxy使用負載均衡
    links:
      - fetcher
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock # docker-compose v2版本中haproxy需要指定docker socket(MAC系統中)
    restart: always
    
  processor:
    image: 'binux/pyspider:latest'
    command: '--projectdb "mysql+projectdb://root:[email protected]:3306/projectdb" --message-queue "redis://172.20.0.3:6379/0" processor'
    cpu_shares: 256
    mem_limit: 256m
    restart: always
 
  result-worker:
    image: 'binux/pyspider:latest'
    command: '--taskdb "mysql+taskdb://root:[email protected]:3306/taskdb"  --projectdb "mysql+projectdb://root:[email protected]:3306/projectdb" --resultdb "mysql+resultdb://root:[email protected]:3306/resultdb" --message-queue "redis://172.20.0.3:6379/0" result_worker'
    cpu_shares: 256
    mem_limit: 256m
    restart: always
    
  webui:
    image: 'binux/pyspider:latest'
    command: '--taskdb "mysql+taskdb://root:[email protected]:3306/taskdb"  --projectdb "mysql+projectdb://root:[email protected]:3306/projectdb" --resultdb "mysql+resultdb://root:[email protected]: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: 256
    environment:
      - 'EXCLUDE_PORTS=24444,25555,23333'
    ports:
      - '5000:5000' # webui的對外的埠為5000,可以通過http://localhost:5000訪問webui服務。
    links:
      - 'fetcher-lb:fetcher' # link到其它負載均衡haproxy的服務。
    mem_limit: 256m
    restart: always

networks:
  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只有一個。

docker-compose.yml檔案寫好後,執行docker-compose up(要在docker-compose.yml所在目錄)命令,docker-compose開始建立容器服務,如下圖:

docker-compose up

如果想建立更多的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爬蟲系統

閱讀準備docker基礎命令,docker-compose基礎pyspider基礎如果您不熟悉上面的內容,可以先網上查閱有關資料。1. 建立網路介面首先,建立一個Driver為bridge的網路介面,命名為pyspider:docker network create --dr

kubernetes叢集建立pyspider爬蟲系統

kubernetes叢集部署pyspider分散式爬蟲系統基礎 1. 已安裝、配置kubernetes 2. 叢集中有pyspider與mysql容器映象 3. 有docker基礎具體步驟部署mysql部署redis部署pyspider相關部件我們想要在kubernetes叢

Mesos+ZooKeeper+Marathon+Docker分散式部署打造PaaS雲平臺實踐(一)

【編者的話】本文先給出一個分散式部署的過程,在完成這種分散式部署的過程花費了我一個週末的時間,因為國內幾乎沒有找到分散式部署的實踐過程記錄,希望我的實踐過程能夠給有興趣的小夥伴在進行分散式部署中提供一定的幫助。最近開始對Mesos非常的感興趣,Mesos和Docker一樣是一

部署 Graylog 日誌系統 - 每天5分鐘玩轉 Docker 容器技術(92)

docker 教程 容器 Graylog 是與 ELK 可以相提並論的一款集中式日誌管理方案,支持數據收集、檢索、可視化 Dashboard。本節將實踐用 Graylog 來管理 Docker 日誌。Graylog 架構Graylog 架構如下圖所示:Graylog 負責接收來自各種設備和應用的日

docker簡易環境搭建實戰篇:以人人網開源專案(renren-fast)搭建分散式部署(後端篇)

docker簡易環境搭建實戰篇:以人人網開源專案(renren-fast)搭建分散式部署(後端篇) 寫在前面:注:閱讀本文前,請先閱讀docker標籤的docker簡易系列的文章。 後端最終實現的架構圖: 第一步 簡單瞭解人人開源專案renren-fast 官網:h

docker簡易環境搭建實戰篇:以人人網開源專案(renren-fast-vue)搭建分散式部署(前端篇)

docker簡易環境搭建實戰篇:以人人網開源專案(renren-fast-vue)搭建分散式部署(前端篇) 寫在前面:注:閱讀本文前,請先閱讀docker標籤的docker簡易系列的文章。 前端最終實現的架構圖: 第一步 修改前端專案配置 修改專案目錄中 static/co

攜程 Apollo 配置中心分散式部署Docker

在Spring Boot 2.0 整合攜程Apollo配置中心一文中,我們在本地快速部署試用了Apollo。本文將介紹如何按照分散式部署(採用Docker部署)的方式編譯、打包、部署Apollo配置中心,從而可以在開發、測試、生產等環境分別部署執行。 一、準備工作 本文將在CentO

Python爬蟲大戰、 Scrapy分散式原理以及分散式部署

Python爬蟲大戰 爬蟲與發爬蟲的廝殺,一方為了拿到資料,一方為了防止爬蟲拿到資料,誰是最後的贏家? 重新理解爬蟲中的一些概念 爬蟲:自動獲取網站資料的程式 反爬蟲:使用技術手段防止爬蟲程式爬取資料 誤傷:反爬蟲技術將普通使用者識別為爬蟲,這種情況多出現在封ip中,例如學校網路

python3網路爬蟲-破解天眼查+企業工商資料-分散式爬蟲系統-原始碼深度解析

Python爬蟲-2018年-我破解天眼查和啟信寶企業資料爬蟲--破解反爬技術那些事情 最近在自己用python3+mongdb寫了一套分散式多執行緒的天眼查爬蟲系統,實現了對天眼查整個網站的全部資料各種維度的採集和儲存,主要是為了深入學習爬蟲技術使用,並且根據天眼查網頁的

Docker部署ELK日誌分析系統

Docker中部署ELK環境 一直想嘗試部署一個ELK日誌系統,所以今晚就用Mac搭建一下,這裡記錄一下具體的搭建過程。 在上一節中已經學會來安裝Docker以及部署web應用,這次就不介紹來,直接在Docker中部署ELK日誌分析系統. 1.介紹 ELK是三個開源工具的縮寫

手把手教你搭建一個基於Java的分散式爬蟲系統

在不用爬蟲框架的情況下,我經過多方學習,嘗試實現了一個分散式爬蟲系統,並且可以將資料儲存到不同地方,類似 MySQL、HBase 等。 因為此係統基於面向介面的編碼思想來開發,所以具有一定的擴充套件性,有興趣的朋友直接看一下程式碼,就能理解其設計思想。 雖然程式碼目前

Docker部署Odoo伺服器 , 開源ERP系統

第一步:從docker中獲取postgres映象 docker pull postgres:9.6  第二步:docker上執行postgres容器 docker run -d -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=o

在linux系統建立部署scrapy爬蟲專案

我的主機最近一直出問題,所有的python環境全在物理機上面,現在裝新的第三方庫總是容易出問題,所以我決定把環境放到虛擬機器的環境中,然後存個快照,我的編譯器是pycharm,scrapy不像django一樣能夠直接建立,所以在建立專案的時候不能在本地建立,遇到了問題,不過現在已經解決,如果你也

搭建簡單JAVA分散式爬蟲系統

先貼一張架構圖  整體架構分三個部分: 排程器        :分配任務 爬蟲            :爬取資料並儲存 監控系統     :檢視爬蟲狀態(主要作用是某個節點down掉了可以今早發現,雖然不影響整體穩定性,但是影響爬蟲效率) 爬蟲部分 爬

分散式爬蟲系統隨筆

此文已在本人個人微信公眾號(iwoods100,不會下廚的健身愛好者不是一個好程式設計師)首發,關注可查閱全部文章。 本文主要記錄一些自己在爬蟲系統中加入分散式設計的開發感想。 背景 本文的爬蟲系統行為是:每隔一段時間就去固定頁面獲取內容更新,而不是去層層

docker部署pyspider

感覺pyspider不如scrapy好用 三臺機器, 首先從  git clone https://github.com/binux/pyspider 然後修改Dockerfile ,其中有些下載很慢的,需手動下載新增進去 FROM hub.c.163.com/l

分散式爬蟲系統——架構設計

前言: 在爬蟲的開發過程中,有些業務場景需要同時抓取幾百個甚至上千個網站,此時就需要一個支援多爬蟲的框架。在設計時應該要注意以下幾點: 程式碼複用,功能模組化。如果針對每個網站都寫一個完整的爬蟲,那其中必定包含了許多重複的工作,不僅開發效率不高,而且到後期

Ubuntu下使用Docker部署禪道任務管理系統

tao contex mys containe 連接 and lease tin zentaopms 寫此文目的:利用搭建禪道環境聯系Docker基本使用方法,加深對Docker容器的理解,Ubuntu下面才能原生運行Docker,因此選擇了Ubuntu 1、下載禪道開源

學習筆記——Ubuntu下使用Docker部署禪道任務管理系統

寫此文目的:利用搭建禪道環境聯絡Docker基本使用方法,加深對Docker容器的理解,Ubuntu下面才能原生執行Docker,因此選擇了Ubuntu 1、下載禪道開源版 wget http://dl.cnezsoft.com/zentao/docker/docker_zentao.zip

【雲星資料---mesos實戰系列002】:mesos全分散式部署實戰005--docker-register部署準備

一、docker私有倉庫部署原因 我們要有一個統一的地方來完成對docker映象的管理。docker社群提供的docker-register是一個不錯的工具。現在我們先儘快的將 環境建設起來,如果