美文网首页
使用Docker部署大型分布式爬虫

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

作者: 绝世一只猫 | 来源:发表于2018-12-23 16:53 被阅读0次

    分布式爬虫往往都需要多个环境,多个进程,如果手动去管理这些环境是很费事的,使用Docker集群就能很好地帮你解决这些问题,让你的爬虫管理变得简单。

    1. 主节点安装Docker
      这里主节点建议大家使用Ubuntu,从节点随意。
    • 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节点
    docker swarm init
    
    运行后会产生如下结果 docker swarm init.png

    从返回结果中保存以下命令
    每个Salve节点都需要使用此命令加入集群

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

    如果忘了这条命令可以使用以下命令重置

    docker swarm join-token manager
    
    1. 查看集群状态
      你可以看到有一个主节点在运行
    docker node ls
    
    1. 创建私有源
    • 使用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服务器上面的从节点下载,所以镜像的命名方式需要满足localhost:8003/自定义名字:版本号这样的格式。其中的自定义名字和版本号可以根据实际情况进行修改。在本文的例子中,我由于要模拟一个爬虫的程序,所以给它取名为spider,由于是第1次构建,所以版本号用的是0.01

    docker push localhost:8181/spider:0.01
    
    1. 新建Salve节点
    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个容器创建spider的服务
      --replicas 用来指定开启的容器数量

    但是一般一开始的代码可能会有不少bug,所以建议先使用1个容器来运行,观察日志,发现没有问题以后再进行扩展。

    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集群,让你解放双手。

    相关文章

      网友评论

          本文标题:使用Docker部署大型分布式爬虫

          本文链接:https://www.haomeiwen.com/subject/uksykqtx.html