分散式爬蟲的部署之Scrapyd批量部署

崔慶才丨靜覓發表於2018-06-04

我們在上一節實現了Scrapyd和Docker的對接,這樣每臺主機就不用再安裝Python環境和安裝Scrapyd了,直接執行一句Docker命令執行Scrapyd服務即可。但是這種做法有個前提,那就是每臺主機都安裝Docker,然後再去執行Scrapyd服務。如果我們需要部署10臺主機的話,工作量確實不小。

一種方案是,一臺主機已經安裝好各種開發環境,我們取到它的映象,然後用映象來批量複製多臺主機,批量部署就可以輕鬆實現了。

另一種方案是,我們在新建主機的時候直接指定一個執行指令碼,指令碼里寫好配置各種環境的命令,指定其在新建主機的時候自動執行,那麼主機建立之後所有的環境就按照自定義的命令配置好了,這樣也可以很方便地實現批量部署。

目前很多服務商都提供雲主機服務,如阿里雲、騰訊雲、Azure、Amazon等,不同的服務商提供了不同的批量部署雲主機的方式。例如,騰訊雲提供了建立自定義映象的服務,在新建主機的時候使用自定義映象建立新的主機即可,這樣就可以批量生成多個相同的環境。Azure提供了模板部署的服務,我們可以在模板中指定新建主機時執行的配置環境的命令,這樣在主機建立之後環境就配置完成了。

本節我們就來看看這兩種批量部署的方式,來實現Docker和Scrapyd服務的批量部署。

一、映象部署

以騰訊云為例進行說明。首先需要有一臺已經安裝好環境的雲主機,Docker和Scrapyd映象均已經正確安裝,Scrapyd映象啟動加到開機啟動指令碼中,可以在開機時自動啟動。

進入騰訊雲後臺,點選更多選項製作映象,如下圖所示。

分散式爬蟲的部署之Scrapyd批量部署

輸入映象的一些配置資訊,如下圖所示。

分散式爬蟲的部署之Scrapyd批量部署

確認製作映象,稍等片刻即可製作成功。

接下來,建立新的主機,在新建主機時選擇已經制作好的映象即可,如下圖所示。

分散式爬蟲的部署之Scrapyd批量部署

後續配置過程按照提示進行即可。

配置完成之後登入新到雲主機,即可看到當前主機Docker和Scrapyd映象都已經安裝好,Scrapyd服務已經正常執行。

我們就通過自定義映象的方式實現了相同環境的雲主機的批量部署。

二、模板部署

Azure的雲主機在部署時都會使用一個部署模板,這個模板實際上是一個JSON檔案,裡面包含了很多部署時的配置選項,如主機名稱、使用者名稱、密碼、主機型號等。在模板中我們可以指定新建完雲主機之後執行的命令列指令碼,如安裝Docker、執行映象等。等部署工作全部完成之後,新建立的雲主機就已經完成環境配置,同時執行相關服務。

這裡提供一個部署Linux主機時自動安裝Docker和執行Scrapyd映象的模板,模板內容太多,原始檔可以檢視:https://github.com/Python3WebSpider/ScrapydDeploy/blob/master/azuredeploy.json。模板中Microsoft.Compute/virtualMachines/extensions部分有一個commandToExecute欄位,它可以指定建立主機後自動執行的命令。這裡的命令完成的是安裝Docker並執行Scrapyd映象服務的過程。

首先安裝一個Azure元件,安裝過程可以參考:https://docs.azure.cn/zh-cn/xplat-cli-install。之後就可以使用azure命令列進行部署。

登入Azure,這裡登入的是中國區,命令如下:

azure login -e AzureChinaCloud複製程式碼

如果沒有資源組的話,需要新建一個資源組,命令如下:

azure group create myResourceGroup chinanorth複製程式碼

其中,myResourceGroup是資源組的名稱,可以自行定義。

使用該模板進行部署,命令如下:

azure group deployment create --template-file azuredeploy.json myResourceGroup myDeploymentName複製程式碼

其中,myResourceGroup是資源組的名稱,myDeploymentName是部署任務的名稱。

例如,部署一臺Linux主機的過程如下:

azure group deployment create --template-file azuredeploy.json MyResourceGroup SingleVMDeploy
info:    Executing command group deployment create
info:    Supply values for the following parameters
adminUsername:  datacrawl
adminPassword:  DataCrawl123
vmSize:  Standard_D2_v2
vmName:  datacrawl-vm
dnsLabelPrefix:  datacrawlvm
storageAccountName:  datacrawlstorage複製程式碼

執行命令後會提示輸入各個配置引數,如主機使用者名稱、密碼等。之後等待整個部署工作完成即可,命令列會自動退出。然後,我們登入雲主機即可檢視到Docker已經成功安裝並且Scrapyd服務正常執行。

三、結語

以上內容便是批量部署的兩種方法。在大規模分散式爬蟲架構中,如果需要批量部署多個爬蟲環境,使用如上方法可以快速批量完成環境的搭建工作,而不用再去逐個主機配置環境。

到此為止,我們解決了批量部署的問題,建立主機完畢之後即可直接使用Scrapyd服務。


本資源首發於崔慶才的個人部落格靜覓: Python3網路爬蟲開發實戰教程 | 靜覓

如想了解更多爬蟲資訊,請關注我的個人微信公眾號:進擊的Coder

weixin.qq.com/r/5zsjOyvEZ… (二維碼自動識別)


相關文章