使用Docker部署大型分布式爬蟲

分布式爬蟲往往都需要多個環(huán)境及老,多個進程抽莱,如果手動去管理這些環(huán)境是很費事的,使用Docker集群就能很好地幫你解決這些問題骄恶,讓你的爬蟲管理變得簡單食铐。

  1. 主節(jié)點安裝Docker
    這里主節(jié)點建議大家使用Ubuntu,從節(jié)點隨意僧鲁。
  • Ubuntu
apt-get update
apt-get install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
apt-get update
apt-get install -y docker-ce
  • Centos
yum update -y
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
  1. 啟動Docker
    所用ip為本機公網ip
systemctl start docker --advertise-addr 33.22.11.123
  1. 新建Manager節(jié)點
docker swarm init

運行后會產生如下結果
docker swarm init.png

從返回結果中保存以下命令
每個Salve節(jié)點都需要使用此命令加入集群

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

如果忘了這條命令可以使用以下命令重置

docker swarm join-token manager
  1. 查看集群狀態(tài)
    你可以看到有一個主節(jié)點在運行
docker node ls
  1. 創(chuàng)建私有源
  • 使用Docker自帶的私有源
# 拉取私有源鏡像
docker pull registry:latest
# 啟動私有源
docker run -d -p 8181:5000 --name registry -v /tmp/registry:/tmp/registry docker.io/registry:latest
# 為此http私有源添加信任
echo '{ "insecure-registries":["33.22.11.123:8181"] }' >> /etc/docker/daemon.json
# 重啟Docker
systemctl restart docker
  1. 搭建Redis進行測試
    參考以下文章進行安裝配置
    centos7安裝redis - 知乎
  2. 編寫腳本往Redis里放入測試數據
import redis

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

for i in range(100):
    client.lpush('test', '測試數據 {}'.format(i))
  1. 編寫Dockerfile
from python:3.6
label mantainer='test-spider'
user root
ENV PYTHONUNBUFFERED=0
ENV PYTHONIOENCODING=utf-8
run python3 -m pip install redis
copy spider.py spider.py
cmd python3 spider.py
  1. 編寫測試爬蟲
import time
import redis

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

while True:
    data = client.lpop('test')
    if data:
        print('spider ' + data)
        time.sleep(10)
  1. 構建Docker鏡像

    將Dockerfile跟測試爬蟲都放在同一目錄
    image.png
docker build -t localhost:8003/spider:0.01 .
  1. 上傳鏡像到私有云

這里需要特別注意虐呻,由于我們要把這個鏡像上傳到私有源供Slave服務器上面的從節(jié)點下載,所以鏡像的命名方式需要滿足localhost:8003/自定義名字:版本號這樣的格式寞秃。其中的自定義名字和版本號可以根據實際情況進行修改斟叼。在本文的例子中,我由于要模擬一個爬蟲的程序春寿,所以給它取名為spider朗涩,由于是第1次構建,所以版本號用的是0.01绑改。

docker push localhost:8181/spider:0.01
  1. 新建Salve節(jié)點
yum update -y
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum makecache fast
yum -y install docker-ce
echo '{ "insecure-registries":["33.22.11.123:8181"] }' >> /etc/docker/daemon.json
systemctl start docker
docker swarm join --token SWMTKN-1-23fg5ptocob5u2oeyh0984444444229990o2fp8ga4sl-5qwkvghtnzbqjnvk5dxqdqym7 33.22.11.123:2377
  1. 使用3個容器創(chuàng)建spider的服務
    --replicas 用來指定開啟的容器數量

但是一般一開始的代碼可能會有不少bug谢床,所以建議先使用1個容器來運行,觀察日志厘线,發(fā)現沒有問題以后再進行擴展识腿。

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

14.查看容器的運行狀況

docker service ps spider
  1. 查看容器運行日志
# 查看指定ID的服務日志
docker service logs -f 容器ID
# 查看所有spider服務的日志
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 .
docker push 33.22.11.123:8181/spider:0.02
  • 更新Salve中的鏡像
    如果不關閉現有服務直接更新就會依次次更新
# 關閉服務再更新
docker service scale spider=0
docker service update --image 33.22.11.123:8181/spider:0.02 spider
docker service scale spider=10

是不是覺得如果在100臺服務器上安裝Docker造壮,還是很麻煩渡讼?下一章 我們使用Fabric就可以自動化配置Docker集群,讓你解放雙手耳璧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末成箫,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子楞抡,更是在濱河造成了極大的恐慌伟众,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件召廷,死亡現場離奇詭異凳厢,居然都是意外死亡账胧,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門先紫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來治泥,“玉大人,你說我怎么就攤上這事遮精【蛹校” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵本冲,是天一觀的道長准脂。 經常有香客問我,道長檬洞,這世上最難降的妖魔是什么狸膏? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮添怔,結果婚禮上湾戳,老公的妹妹穿的比我還像新娘。我一直安慰自己广料,他們只是感情好砾脑,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著艾杏,像睡著了一般韧衣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糜颠,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天汹族,我揣著相機與錄音,去河邊找鬼其兴。 笑死顶瞒,一個胖子當著我的面吹牛,可吹牛的內容都是我干的元旬。 我是一名探鬼主播榴徐,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼匀归!你這毒婦竟也來了坑资?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤穆端,失蹤者是張志新(化名)和其女友劉穎袱贮,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體体啰,經...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡攒巍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年嗽仪,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柒莉。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡闻坚,死狀恐怖,靈堂內的尸體忽然破棺而出兢孝,到底是詐尸還是另有隱情窿凤,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布跨蟹,位于F島的核電站雳殊,受9級特大地震影響,放射性物質發(fā)生泄漏喷市。R本人自食惡果不足惜相种,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望品姓。 院中可真熱鬧,春花似錦箫措、人聲如沸腹备。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽植酥。三九已至,卻和暖如春弦牡,著一層夾襖步出監(jiān)牢的瞬間友驮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工驾锰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留卸留,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓椭豫,卻偏偏與公主長得像耻瑟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子赏酥,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內容