本文主要讲分布式搭建最主要的redis数据库的按照和配置,以及实现分布式架构的流程。
1、按照redis数据库,可以参考视频教程:https://www.bilibili.com/video/av19057145?p=3
- 下载redis的官网链接:https://redis.io/download
- 启动redis可能会出现的错误问题:
- windows下安装Redis第一次启动报错:[2368] 21 Apr 02:57:05.611 # Creating Server TCP listening socket 127.0.0.1:6379: bind: No error
- 解决方法:在命令行中运行 redis-cli.exe
127.0.0.1:6379>shutdown
not connected>exit
然后重新运行redis-server 或 redis-server redis.windows.conf,启动成功!
2、相应的需要下载redis的可视化管理工具方便管理,redis-DesktopManager
- redis-DesktopManager目前在官网已经开始收费了,如果要使用免费的话可以去github上下载旧版本,我这里下载的是0.8.8版本的,可以使用。下载redis-DesktopManager的GitHub链接:https://github.com/uglide/RedisDesktopManager/releases?after=0.9.0-1
- github上下载可能会遇到下载缓慢超时等原因,我这里是通过有VPN的电脑下载安装包后通过QQ传给需要配置的电脑,再进行安装的方法解决。
3、要实现分布式搭建,最主要的就是能够将多台主机的redis连通互相连接。这里以Mac电脑为从机,Windows电脑为主机来设置,Mac电脑和Windows电脑共同爬取,数据存储到Windows电脑。
- 先在Windows下,进入到redis文件夹,输入--->ifconfig,得到这台电脑的IP地址。
- 然后在mac电脑尝试去连接Windows的redis数据库试试,(Mac电脑中输入--->redis-cli -h ip -p 6379)
- 会出现错误
- 需要去redis的文件夹中找到redis.windows.conf中,修改redis的bindIP和protected-mode no:这时候是默认只能通过127.0.0.1来访问redis服务器
- 改成自身本机的IP地址,就是之前通过ifconfig查找到的-->192.168.1.6,并且找到protected-mode 修改为no。
- protected-mode是redis默认的保护模式,如果不修改的话,其他电脑即使连接到另外的redis数据库也无法访问和写入数据的
- 修改完成之后,在Windows的cmd命令行下再次启动redis服务端,这时候需要携带conf文件启动,redis-server.exe redis.windows.conf
- 在mac下重新执行入--->redis-cli -h 192.168.1.6 -p 6379,就可以正常访问了。
在执行分布式爬虫的代码的时候,有时候有碰到两台电脑只有一台运行的情况出现,根本原因是共享队列request被清空所导致,因为Scrapy-redis的请求队列有一个机制是获取到共享队列中的请求后就会将其从请求队列中清空。要解决该问题的关键,就是能够保持有足够多的请求对象存储到请求队列中,才能使得多台机器协同爬取。
- 每次提取到的网页链接过少,放入Scrapy-redis的request请求队列后。一台电脑即可完成所有链接的请求会马上抢走,导致另外一台电脑获取不到请求对象,一直处于监听状态
- 另外也可能是settings.py文件里面的异步请求数CONCURRENT_REQUESTS设置过大导致的,将每台电脑的数值调小就能看到两台电脑都在进行爬取
- 若是项目爬取的网站本身一个页面能够提取的网页链接就是不多,且使用redis_key,然后扔入起始URL的操作。可以在扔入起始URL的时候多放入几个,且数值间隔较大来进行,也能够看到分布式爬取的效果。如扔入的页码为1000、4000、8000的网页链接。
至此,redis的互通就搭建好了,有兴趣的可以看看以下这两个教程中分布式项目的实现: