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

2020-06-17 06:43:13易采站长站整理

为了简化操作,可以写一个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