iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > VUE >如何使用Docker Swarm搭建分布式爬虫集群
  • 838
分享到

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

2024-04-02 19:04:59 838人浏览 薄情痞子
摘要

今天小编给大家分享一下如何使用Docker Swarm搭建分布式爬虫集群的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获

今天小编给大家分享一下如何使用Docker Swarm搭建分布式爬虫集群的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

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搭建分布式爬虫集群

这个返回结果中,给出了一条命令:

复制代码 代码如下:

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

这条命令需要在每一个从节点(slave)中执行。现在先把这个命令记录下来。

初始化完成以后,得到一个只有1台服务器的docker 集群。执行如下命令:

docker node ls

可以看到当前这个集群的状态,如下图所示。

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

创建私有源(可选)

创建私有源并不是一个必需的操作。之所以需要私有源,是因为项目的docker镜像可能会涉及到公司机密,不能上传到dockerhub这种公共平台。如果你的镜像可以公开上传dockerhub,或者你已经有一个可以用的私有镜像源,那么你可以直接使用它们,跳过本小节和下一小节。

私有源本身也是一个docker的镜像,先将拉取下来:

docker pull reGIStry:latest

如下图所示。

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

现在启动私有源:

复制代码 代码如下:

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

如下图所示。

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

在启动命令中,设置了对外开放的端口为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

如下图所示。

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

重启完成以后,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

如下图所示。

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

等待脚本运行完成以后,你就可以从slave-1和slave-2的ssh上面登出了。以后也不需要再进来了。

回到master服务器,执行下面的命令,来确认现在集群已经有3个节点了:

docker node ls

看到现在集群中已经有3个节点了。如下图所示。

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

到止为止,最复杂最麻烦的过程已经结束了。剩下的就是体验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 Swarm搭建分布式爬虫集群

上传镜像到私有源

镜像构建完成以后,需要把它上传到私有源。此时需要执行命令:

docker push localhost:8003/spider:0.01

如下图所示。

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

大家记住这个构建和上传的命令,以后每一次更新代码,都需要使用这两条命令。

创建服务

docker swarm上面运行的是一个一个的服务,因此需要使用docker service命令创建服务。

复制代码 代码如下:

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

这个命令创建了一个名为 spider 的服务。默认运行1个容器。运行情况如下图所示。

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

当然也可以一创建就用很多容器来运行,此时只需要添加一个 --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

如下图所示。

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

查看节点log

根据上图执行结果,可以看到这个运行中的容器的id为 rusps0ofwids ,那么执行下面的命令动态查看log:

docker service logs -f 容器id

此时就会持续跟踪这一个容器的log。如下图所示。

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

横向扩展

现在,只有1台服务器运行了一个容器,我想使用3台服务器运行这个爬虫,那么我需要执行一条命令即可:

docker service scale spider=3

运行效果如下图所示。

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

此时,再一次查看爬虫的运行情况,可以发现三台机器上面会各自运行一个容器。如下图所示。

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

现在,我们登录slave-1机器上,看看是不是真的有一个任务在运行。如下图所示。

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

可以看到确实有一个容器在上面运行着。这是docker swarm自动分配过来的。

现在我们使用下面的命令强行把slave-1上面的docker给关了,再来看看效果。

systemctl stop docker

回到master服务器,再次查看爬虫的运行效果,如下图所示。

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

可以看到,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 Swarm搭建分布式爬虫集群

更新爬虫

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

先修改代码,重新构建,重新提交新的镜像到私有源中。如下图所示。

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

接下来需要更新服务中的镜像。更新镜像有两种做法。一种是先把所有爬虫关闭,再更新。

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做更多事情

本文使用的是一个模拟爬虫的例子,但是显然,任何可以批量运行的程序都能够用docker swarm来运行,无论你用redis还是celery来通信,无论你是否需要通信,只要能批量运行,就能用docker swarm。

在同一个swarm集群里面,可以运行多个不同的服务,各个服务之间互不影响。真正做到了搭建一次docker swarm集群,然后就再也不用管了,以后的所有操作你都只需要在manager节点所在的这个服务器上面运行。

以上就是“如何使用Docker Swarm搭建分布式爬虫集群”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网VUE频道。

--结束END--

本文标题: 如何使用Docker Swarm搭建分布式爬虫集群

本文链接: https://www.lsjlt.com/news/96383.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何使用Docker Swarm搭建分布式爬虫集群
    今天小编给大家分享一下如何使用Docker Swarm搭建分布式爬虫集群的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获...
    99+
    2024-04-02
  • 如何分析docker + swarm集群
    这篇文章主要为大家分析了如何分析docker + swarm集群的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“如何分析docker + swarm集群”的知...
    99+
    2023-06-28
  • docker下怎么搭建fastdfs分布式集群
    这篇文章主要讲解了“docker下怎么搭建fastdfs分布式集群”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“docker下怎么搭建fastdfs分布式集群”吧!本文在centos6.8下...
    99+
    2023-06-19
  • 如何进行HA分布式集群搭建
    今天就跟大家聊聊有关如何进行HA分布式集群搭建,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一:HA分布式配置的优势:  1,防止由于一台namenode挂掉,集群失败的情形  2,...
    99+
    2023-06-03
  • docker swarm快速部署redis分布式集群的详细过程
    目录环境准备Docker搭建Swarm集群打开防火墙(Swarm需要)创建Swarm加入Swarm服务约束单机集群创建容器启动容器进入容器启动集群分布式集群部署docker comp...
    99+
    2022-11-13
    docker swarm部署redis redis分布式集群 docker 部署redis
  • docker swarm快速部署redis分布式集群的详细过程
    目录环境准备docker搭建Swarm集群打开防火墙(Swarm需要)创建Swarm加入Swarm服务约束单机集群创建容器启动容器进入容器启动集群分布式集群部署docker compose.ymlwait-for-it....
    99+
    2024-04-02
  • mysql分布式集群怎么搭建
    要搭建一个 MySQL 分布式集群,可以采用以下步骤: 选择合适的分布式架构:MySQL 分布式集群可以采用主从复制、主从同步复制...
    99+
    2024-04-18
    mysql
  • docker如何搭建kafka集群
    本文小编为大家详细介绍“docker如何搭建kafka集群”,内容详细,步骤清晰,细节处理妥当,希望这篇“docker如何搭建kafka集群”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、原生Docker命令 ...
    99+
    2023-06-30
  • docker如何搭建redis集群
    要搭建Redis集群,可以使用Docker来进行部署。下面是一种常见的方法:1. 创建一个文件夹,在文件夹中创建一个名为`docke...
    99+
    2023-08-23
    docker redis
  • 如何使用Centos7系统搭建Hadoop-3.1.4完全分布式集群
    本篇内容主要讲解“如何使用Centos7系统搭建Hadoop-3.1.4完全分布式集群”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Centos7系统搭建Hadoop-3.1.4完全分布...
    99+
    2023-06-15
  • Hadoop2.7.5+Spark2.2.1分布式集群怎么搭建
    这篇文章主要介绍“Hadoop2.7.5+Spark2.2.1分布式集群怎么搭建”,在日常操作中,相信很多人在Hadoop2.7.5+Spark2.2.1分布式集群怎么搭建问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-03
  • windows怎么搭建Redis分布式集群
    要搭建Redis分布式集群,您可以按照以下步骤进行操作:1. 下载Redis的稳定版本,并解压到不同的目录,例如:redis1、re...
    99+
    2023-09-11
    windows redis
  • Docker-Compose如何搭建Redis集群
    本篇内容介绍了“Docker-Compose如何搭建Redis集群”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. 集群配置3主+3从由于...
    99+
    2023-07-05
  • 如何使用docker compose搭建consul集群环境
    这篇文章主要介绍如何使用docker compose搭建consul集群环境,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!consul基本概念server模式和client模式server模式和client模式是co...
    99+
    2023-06-15
  • 如何使用Scrapy-Redis实现分布式爬虫
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-15
  • 分布式爬虫的搭建-糗事百科(案例)
    1:scrapy-redis的工作原理     有相关scrapy经验者可仔细研究一些,无经验者可直接看下一节内容,等走完流程可在回头看       1,spider打开某网页,获取到一个或者多个request,经由scra...
    99+
    2023-01-31
    爬虫 糗事 分布式
  • redis分片集群如何搭建与使用
    本文小编为大家详细介绍“redis分片集群如何搭建与使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“redis分片集群如何搭建与使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • Hadoop完全分布式集群搭建(超详细)
    目录 1.1.1 完全分布式介绍 1.1.2 平台软件说明 1.1.3 守护进程布局 1.2.1 集群搭建准备 1.2.2 总纲 1.2.3防火墙关闭 1.2.4 主机映射 1.2.5 免密登陆 1.2.6 jdk安装和hadoop安装及...
    99+
    2023-10-23
    hadoop 分布式 hdfs
  • 怎么使用docker compose搭建etcd集群
    本文小编为大家详细介绍“怎么使用docker compose搭建etcd集群”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用docker compose搭建etcd集群”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-07-02
  • CentOS 7如何搭建Hadoop 2.7.3完全分布式集群环境
    这篇文章将为大家详细讲解有关CentOS 7如何搭建Hadoop 2.7.3完全分布式集群环境,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。(一)软件准备1,hadoop-2.7.3.tar.gz(包)2...
    99+
    2023-06-03
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作