Scrapy-Redis分布式策略
三台服务器
192.168.3.242 VM-2-2
192.168.3.243 VM-2-3
192.168.3.244 VM-2-4
1 2 3 Master端(核心服务器):使用VM-2-2,搭建一个Redis数据库,不负责爬取,只负责url指纹判重、Request的分配,以及数据的存储 Slaver端(爬虫程序执行端):使用VM-2-3、VM-2-4,负责执行爬虫程序,运行过程中提交新的Request给Master
1 2 3 4 5 6 7 首先Slaver端从Master端拿任务(Request、url)进行数据抓取,Slaver抓取数据的同时,产生新任务的Request便提交给Master处理; Master端只有一个Redis数据库,负责将未处理的Request去重和任务分配,将处理后的Request加入待爬队列,并且存储爬取的数据。 Scrapy-Redis默认使用的就是这种策略,我们实现起来很简单,因为任务调度等工作Scrapy-Redis都已经帮我们做好了,我们只需要继承RedisSpider、指定redis_key就行了。 缺点是,Scrapy-Redis调度的任务是Request对象,里面信息量比较大(不仅包含url,还有callback函数、headers等信息),可能导致的结果就是会降低爬虫速度、而且会占用Redis大量的存储空间,所以如果要保证效率,那么就需要一定硬件水平。
安装Redis
安装Redis
1 2 3 4 [root@VM-2-2 ~] [root@VM-2-2 ~] [root@VM-2-2 ~] [root@VM-2-2 redis-3.2.9]
1 安装完成后,拷贝一份Redis安装目录下的redis.conf到任意目录,建议保存到:/etc/redis/redis.conf
1 2 3 [root@VM-2-2 redis-3.2.9] [root@VM-2-2 redis-3.2.9] -rw-r--r-- 1 root root 46695 7月 6 11:54 redis.conf
1 2 3 注意:Slave端无需启动redis-server,Master端启动即可 只要Slave端读取到了Master端的Redis数据库,则表示能够连接成功,可以实施分布式。
修改配置文件 redis.conf 1 2 3 4 5 打开你的redis.conf配置文件,示例: vi /etc/redis/redis.conf Master端redis.conf里注释bind 127.0.0.1,Slave端才能远程连接到Master端的Redis数据库 bind 127.0.0.1限制,只能本机访问
1 2 [root@VM-2-2 redis-3.2.9]
1 2 3 daemonize no表示Redis默认不作为守护进程运行,即在运行redis-server /etc/redis/redis.conf时,将显示Redis启动提示画面; daemonize yes则默认后台运行,不必重新启动新的终端窗口执行其他命令,看个人喜好和实际需要。
将master上配置好的Redis安装目录发送到slave节点 1 2 [root@VM-2-2 redis-3.2.9] [root@VM-2-2 redis-3.2.9]
启动Redis matser
Master端按指定配置文件启动 ./redis-server /etc/redis/redis/conf
1 [root@VM-2-2 redis-3.2.9]
Master端启动本地redis-cli 1 2 3 4 5 6 7 8 9 10 [root@VM-2-2 ~] 127.0.0.1:6379> ping PONG 127.0.0.1:6379> flushdb OK 127.0.0.1:6379> set key1 'v1' OK 127.0.0.1:6379> set key2 'v2' OK 127.0.0.1:6379> exit
slave端启动redis-cli -h 192.168.3.242,-h 参数表示连接到指定主机的redis数据库 1 2 3 注意:Slave端无需启动redis-server,Master端启动即可 只要Slave端读取到了Master端的Redis数据库,则表示能够连接成功,可以实施分布式
VM-2-3[slave节点]
1 2 3 4 5 6 [root@VM-2-3 ~] 192.168.3.242:6379> get key1 "v1" 192.168.3.242:6379> get key2 "v2" 192.168.3.242:6379> exit
VM-2-4[slave节点]
1 2 3 4 5 6 [root@VM-2-4 ~] 192.168.3.242:6379> get key1 "v1" 192.168.3.242:6379> get key2 "v2" 192.168.3.242:6379> exit
Redis数据库桌面管理工具 1 这里推荐Redis Desktop Manager,支持 Windows、Mac OS X、Linux 等平台
下载地址