真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何使用DockerSwarm搭建分布式爬蟲集群

今天小編給大家分享一下如何使用Docker Swarm搭建分布式爬蟲集群的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

成都創(chuàng)新互聯(lián)專注于大同企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),成都商城網(wǎng)站開發(fā)。大同網(wǎng)站建設(shè)公司,為大同等地區(qū)提供建站服務(wù)。全流程定制開發(fā),專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)

2分鐘內(nèi)把一個新爬蟲部署到50臺服務(wù)器上:

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秒內(nèi)把爬蟲從50臺服務(wù)器擴展到500臺服務(wù)器:

docker service scale spider=500

30秒內(nèi)批量關(guān)閉所有服務(wù)器上的爬蟲:

docker service scale spider=0

1分鐘內(nèi)批量更新所有機器上的爬蟲:

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基礎(chǔ)再來看本文。

docker swarm是什么

docker swarm是docker自帶的一個集群管理模塊。他能夠?qū)崿F(xiàn)docker集群的創(chuàng)建和管理。

環(huán)境搭建

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

master:45.77.138.242

slave-1:199.247.30.74

slave-2:95.179.143.21

docker swarm是基于docker的模塊,所以首先要在3臺服務(wù)器上安裝docker。安裝完成docker以后,所有的操作都在docker中完成。

在master上安裝docker

通過依次執(zhí)行下面的命令,在master服務(wù)器上安裝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

創(chuàng)建manager節(jié)點

一個docker swarm集群需要manager節(jié)點?,F(xiàn)在初始化master服務(wù)器,作為集群的manager節(jié)點。運行下面一條命令。

docker swarm init

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

如何使用Docker Swarm搭建分布式爬蟲集群

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

復(fù)制代碼 代碼如下:

docker swarm join --token swmtkn-1-0hqsajb64iynkg8ocp8uruktii5esuo4qiaxmqw2pddnkls9av-dfj7nf1x3vr5qcj4cqiusu4pv 45.77.138.242:2377

這條命令需要在每一個從節(jié)點(slave)中執(zhí)行。現(xiàn)在先把這個命令記錄下來。

初始化完成以后,得到一個只有1臺服務(wù)器的docker 集群。執(zhí)行如下命令:

docker node ls

可以看到當(dāng)前這個集群的狀態(tài),如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

創(chuàng)建私有源(可選)

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

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

docker pull registry:latest

如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

現(xiàn)在啟動私有源:

復(fù)制代碼 代碼如下:

docker run -d -p 8003:5000 --name registry -v /tmp/registry:/tmp/registry docker.io/registry:latest

如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

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

提示:

這樣搭建的私有源是http方式,并且沒有權(quán)限驗證機制,所以如果對公網(wǎng)開放,你需要再使用防火墻做一下ip白名單,從而保證數(shù)據(jù)的安全。

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

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

使用下面命令配置docker:

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

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

systemctl restart docker

如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

重啟完成以后,manager節(jié)點就配置好了。

創(chuàng)建子節(jié)點初始化腳本

對于slave服務(wù)器來說,只需要做三件事情:

  • 安裝docker

  • 加入集群

  • 信任源

從此以后,剩下的事情全部交給docker swarm自己管理,你再也不用ssh登錄這個服務(wù)器了。

為了簡化操作,可以寫一個shell腳本來批量運行。在slave-1和slave-2服務(wù)器下創(chuàng)建一個 init.sh 文件,其內(nèi)容如下。

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

把這個文件設(shè)置為可自行文件,并運行:

chmod +x init.sh
./init.sh

如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

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

回到master服務(wù)器,執(zhí)行下面的命令,來確認(rèn)現(xiàn)在集群已經(jīng)有3個節(jié)點了:

docker node ls

看到現(xiàn)在集群中已經(jīng)有3個節(jié)點了。如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

到止為止,最復(fù)雜最麻煩的過程已經(jīng)結(jié)束了。剩下的就是體驗docker swarm帶來的便利了。

創(chuàng)建測試程序

搭建測試redis

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

在master服務(wù)器上執(zhí)行以下命令:

復(fù)制代碼 代碼如下:

docker run -d --name redis -p 7891:6379 redis --requirepass "kingnameishandsome8877"

這個redis對外使用 7891 端口,密碼為 kingnameishandsome8877 ,ip就是master服務(wù)器的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'我現(xiàn)在獲取的數(shù)據(jù)為:{data.decode()}')
  time.sleep(10)

這個python每10秒鐘從redis中讀取一個數(shù),并打印出來。

編寫dockerfile

編寫dockerfile,基于python3.6的鏡像創(chuàng)建我們自己的鏡像:

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

構(gòu)建鏡像

編寫完成dockerfile以后,執(zhí)行下面的命令,開始構(gòu)建我們自己的鏡像:

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

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

整個過程如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

上傳鏡像到私有源

鏡像構(gòu)建完成以后,需要把它上傳到私有源。此時需要執(zhí)行命令:

docker push localhost:8003/spider:0.01

如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

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

創(chuàng)建服務(wù)

docker swarm上面運行的是一個一個的服務(wù),因此需要使用docker service命令創(chuàng)建服務(wù)。

復(fù)制代碼 代碼如下:

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

這個命令創(chuàng)建了一個名為 spider 的服務(wù)。默認(rèn)運行1個容器。運行情況如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

當(dāng)然也可以一創(chuàng)建就用很多容器來運行,此時只需要添加一個 --replicas 參數(shù)即可。例如一創(chuàng)建服務(wù)就使用50個容器運行:

復(fù)制代碼 代碼如下:

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

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

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

docker service ps spider

如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

查看節(jié)點log

根據(jù)上圖執(zhí)行結(jié)果,可以看到這個運行中的容器的id為 rusps0ofwids ,那么執(zhí)行下面的命令動態(tài)查看log:

docker service logs -f 容器id

此時就會持續(xù)跟蹤這一個容器的log。如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

橫向擴展

現(xiàn)在,只有1臺服務(wù)器運行了一個容器,我想使用3臺服務(wù)器運行這個爬蟲,那么我需要執(zhí)行一條命令即可:

docker service scale spider=3

運行效果如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

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

如何使用Docker Swarm搭建分布式爬蟲集群

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

如何使用Docker Swarm搭建分布式爬蟲集群

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

現(xiàn)在我們使用下面的命令強行把slave-1上面的docker給關(guān)了,再來看看效果。

systemctl stop docker

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

如何使用Docker Swarm搭建分布式爬蟲集群

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

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

docker service scale spider=10

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

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

docker service scale spider=0

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

同時查看多個容器的日志

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

復(fù)制代碼 代碼如下:

docker service ps robot | grep running | awk '{print $1}' | xargs -i docker service logs --tail 20 {}

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

如何使用Docker Swarm搭建分布式爬蟲集群

更新爬蟲

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

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

如何使用Docker Swarm搭建分布式爬蟲集群

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

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

第二種是直接執(zhí)行更新命令。

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

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

運行效果如下圖所示。

如何使用Docker Swarm搭建分布式爬蟲集群

你可以用docker swarm做更多事情

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

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

以上就是“如何使用Docker Swarm搭建分布式爬蟲集群”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


當(dāng)前題目:如何使用DockerSwarm搭建分布式爬蟲集群
標(biāo)題鏈接:http://weahome.cn/article/ijgejh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部