婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 使用Docker Swarm搭建分布式爬蟲集群的方法示例

使用Docker Swarm搭建分布式爬蟲集群的方法示例

熱門標簽:西柏坡地圖標注 哈爾濱400電話去哪辦理 廣東如何申請400電話 400電話申請要什么條件 燃氣管線地圖標注顏色 話術外呼系統 i智能電話機器人yeta 寧波400電話辦理對企業的意義 北京人工外呼系統廠家

在爬蟲開發過程中,你肯定遇到過需要把爬蟲部署在多個服務器上面的情況。此時你是怎么操作的呢?逐一SSH登錄每個服務器,使用git拉下代碼,然后運行?代碼修改了,于是又要一個服務器一個服務器登錄上去依次更新?

有時候爬蟲只需要在一個服務器上面運行,有時候需要在200個服務器上面運行。你是怎么快速切換的呢?一個服務器一個服務器登錄上去開關?或者聰明一點,在Redis里面設置一個可以修改的標記,只有標記對應的服務器上面的爬蟲運行?

A爬蟲已經在所有服務器上面部署了,現在又做了一個B爬蟲,你是不是又得依次登錄每個服務器再一次部署?

如果你確實是這么做的,那么你應該后悔沒有早一點看到這篇文章。看完本文以后,你能夠做到:

2分鐘內把一個新爬蟲部署到50臺服務器上:

docker build -t localhost:8003/spider:0.01 .
docker push localhost:8002/spider:0.01
docker service create --name spider --replicas 50 --network host 45.77.138.242:8003/spider:0.01

30秒內把爬蟲從50臺服務器擴展到500臺服務器:

docker service scale spider=500

30秒內批量關閉所有服務器上的爬蟲:

docker service scale spider=0

1分鐘內批量更新所有機器上的爬蟲:

docker build -t localhost:8003/spider:0.02 .
docker push localhost:8003/spider:0.02
docker service update --image 45.77.138.242:8003/spider:0.02 spider

這篇文章不會教你怎么使用Docker,所以請確定你有一些Docker基礎再來看本文。

Docker Swarm是什么

Docker Swarm是Docker自帶的一個集群管理模塊。他能夠實現Docker集群的創建和管理。

環境搭建

本文將會使用3臺Ubuntu 18.04的服務器來進行演示。這三臺服務器安排如下:

Master:45.77.138.242

Slave-1:199.247.30.74

Slave-2:95.179.143.21

Docker Swarm是基于Docker的模塊,所以首先要在3臺服務器上安裝Docker。安裝完成Docker以后,所有的操作都在Docker中完成。

在Master上安裝Docker

通過依次執行下面的命令,在Master服務器上安裝Docker

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

創建Manager節點

一個Docker Swarm集群需要Manager節點。現在初始化Master服務器,作為集群的Manager節點。運行下面一條命令。

docker swarm init

運行完成以后,可以看到的返回結果下圖所示。

這個返回結果中,給出了一條命令:

復制代碼 代碼如下:
docker swarm join --token SWMTKN-1-0hqsajb64iynkg8ocp8uruktii5esuo4qiaxmqw2pddnkls9av-dfj7nf1x3vr5qcj4cqiusu4pv 45.77.138.242:2377

這條命令需要在每一個從節點(Slave)中執行。現在先把這個命令記錄下來。

初始化完成以后,得到一個只有1臺服務器的Docker 集群。執行如下命令:

docker node ls

可以看到當前這個集群的狀態,如下圖所示。

創建私有源(可選)

創建私有源并不是一個必需的操作。之所以需要私有源,是因為項目的Docker鏡像可能會涉及到公司機密,不能上傳到DockerHub這種公共平臺。如果你的鏡像可以公開上傳DockerHub,或者你已經有一個可以用的私有鏡像源,那么你可以直接使用它們,跳過本小節和下一小節。

私有源本身也是一個Docker的鏡像,先將拉取下來:

docker pull registry:latest

如下圖所示。

現在啟動私有源:

復制代碼 代碼如下:
docker run -d -p 8003:5000 --name registry -v /tmp/registry:/tmp/registry docker.io/registry:latest

如下圖所示。

在啟動命令中,設置了對外開放的端口為8003端口,所以私有源的地址為:45.77.138.242:8003

提示:

這樣搭建的私有源是HTTP方式,并且沒有權限驗證機制,所以如果對公網開放,你需要再使用防火墻做一下IP白名單,從而保證數據的安全。

允許docker使用可信任的http私有源(可選)

如果你使用上面一個小節的命令搭建了自己的私有源,由于Docker默認是不允許使用HTTP方式的私有源的,因此你需要配置Docker,讓Docker信任它。

使用下面命令配置Docker:

echo '{ "insecure-registries":["45.77.138.242:8003"] }' >> /etc/docker/daemon.json

然后使用下面這個命令重啟docker。

systemctl restart docker

如下圖所示。

重啟完成以后,Manager節點就配置好了。

創建子節點初始化腳本

對于Slave服務器來說,只需要做三件事情:

  • 安裝Docker
  • 加入集群
  • 信任源

從此以后,剩下的事情全部交給Docker Swarm自己管理,你再也不用SSH登錄這個服務器了。

為了簡化操作,可以寫一個shell腳本來批量運行。在Slave-1和Slave-2服務器下創建一個 init.sh 文件,其內容如下。

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
echo '{ "insecure-registries":["45.77.138.242:8003"] }' >> /etc/docker/daemon.json
systemctl restart docker 
docker swarm join --token SWMTKN-1-0hqsajb64iynkg8ocp8uruktii5esuo4qiaxmqw2pddnkls9av-dfj7nf1x3vr5qcj4cqiusu4pv 45.77.138.242:2377

把這個文件設置為可自行文件,并運行:

chmod +x init.sh
./init.sh

如下圖所示。

等待腳本運行完成以后,你就可以從Slave-1和Slave-2的SSH上面登出了。以后也不需要再進來了。

回到Master服務器,執行下面的命令,來確認現在集群已經有3個節點了:

docker node ls

看到現在集群中已經有3個節點了。如下圖所示。

到止為止,最復雜最麻煩的過程已經結束了。剩下的就是體驗Docker Swarm帶來的便利了。

創建測試程序

搭建測試Redis

由于這里需要模擬一個分布式爬蟲的運行效果,所以先使用Docker搭建一個臨時的Redis服務:

在Master服務器上執行以下命令:

復制代碼 代碼如下:
docker run -d --name redis -p 7891:6379 redis --requirepass "KingnameISHandSome8877"

這個Redis對外使用 7891 端口,密碼為 KingnameISHandSome8877 ,IP就是Master服務器的IP地址。

編寫測試程序

編寫一個簡單的Python程序:

import time
import redis


client = redis.Redis(host='45.77.138.242', port='7891', password='KingnameISHandSome8877')

while True:
  data = client.lpop('example:swarm:spider')
  if not data:
    break
  print(f'我現在獲取的數據為:{data.decode()}')
  time.sleep(10)

這個Python每10秒鐘從Redis中讀取一個數,并打印出來。

編寫Dockerfile

編寫Dockerfile,基于Python3.6的鏡像創建我們自己的鏡像:

from python:3.6
label mantainer='[email protected]'

user root
ENV PYTHONUNBUFFERED=0
ENV PYTHONIOENCODING=utf-8

run python3 -m pip install redis

copy spider.py spider.py
cmd python3 spider.py

構建鏡像

編寫完成Dockerfile以后,執行下面的命令,開始構建我們自己的鏡像:

docker build -t localhost:8003/spider:0.01 .

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

整個過程如下圖所示。

上傳鏡像到私有源

鏡像構建完成以后,需要把它上傳到私有源。此時需要執行命令:

docker push localhost:8003/spider:0.01

如下圖所示。

大家記住這個構建和上傳的命令,以后每一次更新代碼,都需要使用這兩條命令。

創建服務

Docker Swarm上面運行的是一個一個的服務,因此需要使用docker service命令創建服務。

復制代碼 代碼如下:
docker service create --name spider --network host 45.77.138.242:8003/spider:0.01

這個命令創建了一個名為 spider 的服務。默認運行1個容器。運行情況如下圖所示。

當然也可以一創建就用很多容器來運行,此時只需要添加一個 --replicas 參數即可。例如一創建服務就使用50個容器運行:

復制代碼 代碼如下:
docker service create --name spider --replicas 50 --network host 45.77.138.242:8003/spider:0.01

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

回到默認1個容器的情況下,這個容器可能在目前三臺機器在的任何一臺上面。通過執行下面的命令來觀察這一個默認的容器運行情況:

docker service ps spider

如下圖所示。

查看節點Log

根據上圖執行結果,可以看到這個運行中的容器的ID為 rusps0ofwids ,那么執行下面的命令動態查看Log:

docker service logs -f 容器ID

此時就會持續跟蹤這一個容器的Log。如下圖所示。

橫向擴展

現在,只有1臺服務器運行了一個容器,我想使用3臺服務器運行這個爬蟲,那么我需要執行一條命令即可:

docker service scale spider=3

運行效果如下圖所示。

此時,再一次查看爬蟲的運行情況,可以發現三臺機器上面會各自運行一個容器。如下圖所示。

現在,我們登錄slave-1機器上,看看是不是真的有一個任務在運行。如下圖所示。

可以看到確實有一個容器在上面運行著。這是Docker Swarm自動分配過來的。

現在我們使用下面的命令強行把slave-1上面的Docker給關了,再來看看效果。

systemctl stop docker

回到master服務器,再次查看爬蟲的運行效果,如下圖所示。

可以看到,Docker Swarm探測到Slave-1掉線以后,他就會自動重新找個機器啟動任務,保證始終有3個任務在運行。在這一次的例子中,Docker Swarm自動在master機器上啟動了2個spider容器。

如果機器性能比較好,甚至可以在3每臺機器上面多運行幾個容器:

docker service scale spider=10

此時,就會啟動10個容器來運行這些爬蟲。這10個爬蟲之間互相隔離。

如果想讓所有爬蟲全部停止怎么辦?非常簡單,一條命令:

docker service scale spider=0

這樣所有爬蟲就會全部停止。

同時查看多個容器的日志

如果想同時看所有容器怎么辦呢?可以使用如下命令查看所有容器的最新的20行日志:

復制代碼 代碼如下:
docker service ps robot | grep Running | awk '{print $1}' | xargs -i docker service logs --tail 20 {}

這樣,日志就會按順序顯示出來了。如下圖所示。

更新爬蟲

如果你的代碼做了修改。那么你需要更新爬蟲。

先修改代碼,重新構建,重新提交新的鏡像到私有源中。如下圖所示。

接下來需要更新服務中的鏡像。更新鏡像有兩種做法。一種是先把所有爬蟲關閉,再更新。

docker service scale spider=0
docker service update --image 45.77.138.242:8003/spider:0.02 spider
docker service scale spider=3

第二種是直接執行更新命令。

docker service update --image 45.77.138.242:8003/spider:0.02 spider

他們的區別在于,直接執行更新命令時,正在運行的容器會一個一個更新。

運行效果如下圖所示。

你可以用Docker Swarm做更多事情

本文使用的是一個模擬爬蟲的例子,但是顯然,任何可以批量運行的程序都能夠用Docker Swarm來運行,無論你用Redis還是Celery來通信,無論你是否需要通信,只要能批量運行,就能用Docker Swarm。

在同一個Swarm集群里面,可以運行多個不同的服務,各個服務之間互不影響。真正做到了搭建一次Docker Swarm集群,然后就再也不用管了,以后的所有操作你都只需要在Manager節點所在的這個服務器上面運行。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:珠海 張家口 阜陽 巴中 湘潭 襄陽 西藏 開封

巨人網絡通訊聲明:本文標題《使用Docker Swarm搭建分布式爬蟲集群的方法示例》,本文關鍵詞  使用,Docker,Swarm,搭建,分布式,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《使用Docker Swarm搭建分布式爬蟲集群的方法示例》相關的同類信息!
  • 本頁收集關于使用Docker Swarm搭建分布式爬蟲集群的方法示例的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    亚洲男同性视频| 久久99国产精品久久| 亚洲日本va午夜在线电影| 中文字幕国产一区二区| 国产亚洲视频系列| 中文字幕乱码一区二区免费| 欧美国产日韩亚洲一区| 国产精品久久午夜夜伦鲁鲁| 日韩毛片视频在线看| 一区二区视频免费在线观看| 悠悠色在线精品| 午夜精品一区二区三区三上悠亚| 亚洲6080在线| 久久精品免费观看| 国产91丝袜在线18| 一本大道久久a久久精二百| 欧美色综合久久| 91精品国产91热久久久做人人 | 在线播放视频一区| 欧美一二三区在线观看| 久久伊99综合婷婷久久伊| 国产人成一区二区三区影院| 中文字幕在线观看一区| 亚洲影视在线播放| 久久se精品一区二区| 丁香激情综合五月| 欧美色图激情小说| 日韩精品一区二区在线观看| 久久久久久久综合日本| 亚洲人成精品久久久久| 日韩中文欧美在线| 国产 欧美在线| 在线观看成人小视频| 欧美一区二区成人6969| 国产精品网站在线观看| 一区二区三区欧美久久| 久久国产精品99久久人人澡| 成人激情开心网| 欧美日韩国产一区| 久久精品人人做| 一区二区三区四区乱视频| 麻豆精品在线观看| 97成人超碰视| 精品人在线二区三区| 日韩毛片高清在线播放| 久久国产精品色婷婷| 色久综合一二码| 26uuu另类欧美亚洲曰本| 一区二区三区四区视频精品免费| 韩国成人在线视频| 欧美在线观看视频一区二区| 久久久久久99久久久精品网站| 亚洲自拍都市欧美小说| 国产一区二区三区| 在线观看91av| 亚洲视频在线一区| 国产精品一区二区在线观看网站| 欧美日韩欧美一区二区| 国产精品毛片高清在线完整版| 日本视频中文字幕一区二区三区| aaa亚洲精品| 久久综合丝袜日本网| 亚洲图片自拍偷拍| 99久久伊人网影院| 久久综合色婷婷| 人妖欧美一区二区| 91免费看片在线观看| 国产欧美日韩在线| 麻豆国产91在线播放| 欧洲视频一区二区| 中文字幕的久久| 韩国av一区二区三区在线观看| 欧美日韩国产片| 亚洲精品自拍动漫在线| 成人午夜伦理影院| 国产亚洲欧美一区在线观看| 免费观看91视频大全| 精品视频在线视频| 亚洲精品高清在线| 99久久国产综合色|国产精品| 久久久精品影视| 经典三级视频一区| 欧美电影免费观看高清完整版| 亚洲成人午夜电影| 在线观看区一区二| 亚洲精品国产高清久久伦理二区| 成人免费视频app| 国产欧美日韩久久| 国产激情一区二区三区| 国产亚洲婷婷免费| 国产不卡在线播放| 国产精品欧美精品| 成人久久18免费网站麻豆| 久久久精品日韩欧美| 精品在线免费视频| 精品精品国产高清a毛片牛牛| 蜜桃一区二区三区四区| 欧美丰满嫩嫩电影| 免费观看一级欧美片| 日韩欧美在线观看一区二区三区| 日韩av不卡在线观看| 91精品国产综合久久福利软件| 日韩影视精彩在线| 日韩美女视频在线| 韩国女主播一区| 中文字幕+乱码+中文字幕一区| 国产精品99久久久久久似苏梦涵 | 亚洲国产裸拍裸体视频在线观看乱了| 色综合一区二区| 夜夜精品视频一区二区 | 亚洲国产精品尤物yw在线观看| 欧美色网站导航| 视频在线在亚洲| 欧美v亚洲v综合ⅴ国产v| 精品综合久久久久久8888| 国产亚洲综合av| 91在线你懂得| 亚洲国产欧美在线| 日韩欧美一级特黄在线播放| 激情综合亚洲精品| 国产嫩草影院久久久久| 色婷婷精品久久二区二区蜜臂av| 亚洲一区二区三区免费视频| 777久久久精品| 国产九色精品成人porny| 中文无字幕一区二区三区| 色又黄又爽网站www久久| 日本中文字幕一区二区视频| 2020国产精品自拍| 91老师国产黑色丝袜在线| 污片在线观看一区二区| 久久久久88色偷偷免费| 色综合网站在线| 免费三级欧美电影| 国产精品欧美一级免费| 欧美日韩国产精选| 国产成人午夜视频| 亚洲一区二区影院| 久久综合色播五月| 在线精品视频一区二区三四| 美腿丝袜亚洲一区| 国产精品久久久久久久久久免费看| 欧美在线一区二区| 国产精品自拍三区| 亚洲第一成人在线| 欧美国产1区2区| 欧美一卡二卡在线观看| 99久久婷婷国产综合精品电影| 日韩国产一区二| 国产精品久久看| 91精品国产综合久久久久久| 成人理论电影网| 免费成人av在线播放| 中文字幕一区二区三区不卡在线 | 欧美国产精品一区二区| 一本一道久久a久久精品 | 精品欧美乱码久久久久久| 99热精品国产| 国产在线视频一区二区三区| 亚洲第一狼人社区| 中文字幕一区在线观看| 精品日韩一区二区| 欧美日韩一区中文字幕| 成人av电影在线网| 久久精品免费观看| 天天色图综合网| 亚洲免费毛片网站| 久久久99精品免费观看| 欧美一区二区成人| 欧美日韩中文字幕精品| 波波电影院一区二区三区| 精品亚洲成a人| 秋霞电影一区二区| 亚洲成人av在线电影| 国产精品黄色在线观看| 国产三级欧美三级| 精品区一区二区| 日韩亚洲电影在线| 91精品国产综合久久国产大片| 日本电影欧美片| 99久久精品国产毛片| 成人黄色在线看| 成人综合日日夜夜| 国产精品一二三区| 国产一区欧美日韩| 久久99国产精品久久| 理论电影国产精品| 麻豆一区二区三| 久久国内精品自在自线400部| 青青草精品视频| 日本一区中文字幕| 蜜桃视频在线观看一区| 蜜臀av性久久久久蜜臀aⅴ| 美女在线观看视频一区二区| 五月天一区二区| 日韩av电影天堂| 蜜臀a∨国产成人精品| 看电视剧不卡顿的网站| 久久99国产精品久久99果冻传媒| 久草中文综合在线|