麒麟v10 上部署 TiDB v5.1.2 生产环境优化实践
669
2023-04-03
分布式集群之redis数据库操作
如果采用redis数据库集群操作方式爬取数据源,那么爬虫客户端最好设置redis数据库的密码,否则对方将无法进行数据库链接操作,并且会报未知错误。
redis-cli -h 192.168.1.53 -p 6379 -a 12345 (依次是 目标主机地址,端口号,对方数据库密码) 如此能确保集群的正常拼通
如果出现爬取页面url与请求url冲突,则可以设置settings下的配置:
SPIDER_MIDDLEWARES = { 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': None,}
将crawlspider改写为分布式爬虫的实现:
from scrapy_redis.spiders import RedisCrawlSpider
首先导入分布式redis爬虫类
1.首先将爬虫文件的继承类由 crawl spider改写为RedisCrawlSpider
2.此时继承类不在支持allowed_domains和start_urls这两个配置参数,直接注释掉
3.redis_key='当前类名:start_urls'替代start_urls,作为程序的启动执行指令。
4.动态域范围获取的初始化方法,固定格式,且必须实现。
#动态域范围获取 def __init__(self,*args,**kwargs): domain=kwargs.pop('domain','') self.allowed_domains=filter(None,domain.split(',')) super(ReadSpider,self).__init__(*args,**kwargs)
爬虫文件修改完成,对配置文件settings进行设置:
# 使用scrapy-redis里的去重组件,不使用scrapy默认的去重方式DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"# 使用scrapy-redis里的调度器组件,不使用默认的调度器SCHEDULER = "scrapy_redis.scheduler.Scheduler"# 允许暂停,redis请求记录不丢失SCHEDULER_PERSIST = True# 默认的scrapy-redis请求队列形式(按优先级)SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderPriorityQueue"# 队列形式,请求先进先出#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderQueue"# 栈形式,请求先进后出#SCHEDULER_QUEUE_CLASS = "scrapy_redis.queue.SpiderStack"# LOG_LEVEL = 'DEBUG'
在settings里指定数据库的配置:
# 指定数据库的主机IPREDIS_HOST = "127.0.0.1"# 指定数据库的端口号REDIS_PORT = 6379#数据库密码REDIS_PARAMS = {'password': '123456'}
最好默认就将上文提到的spider_middlewares中间件开启,并安上述配置为None
SPIDER_MIDDLEWARES = { 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': None,}
最后在管道文件添加scrapy_redis的管道类
ITEM_PIPELINES = { 'qd.pipelines.QdPipeline': 300, 'scrapy_redis.pipelines.RedisPipeline': 400,}
至此爬虫修改完成。
执行流程:进入当前项目的爬虫文件目录下,执行 scrapy runspider read.py
爬虫将被唤醒,处于阻塞状态,监听指定数据库的IP和端口,
redis数据库发送指令:
爬虫启动,开始采集数据。
*************************************************************************************
如果想实现两台或者多台计算机的分布式爬虫策略:
若客户端还没有爬虫项目,且爬虫项目已经在其他主机上开发完成,则可以直接远程推送给客户端。
1.将爬虫项目打成tar包 :tar -cvf qidian.tar.gz qidian qidian.tar
2.连接至客户端:sftp 用户名@IP地址 -----> sftp lisa@192.168.1.53
3.输入客户端用户的密码,连接成功
4. ls查看客户端下当前目录,lls查看本机所在目录。
5.发包到客户端 put qidian.tar
6.客户端解包项目:tar -xvf qidian.tar
那么客户端就可以部署项目了,部署时一定要更改成当前redis的IP和端口
关于redis数据库服务:若是没有关闭远程保护,会禁止客户端的远程连接:在redis server xxx.cfg配置文件里
将protected-mode配置项设为no,注意 要在配置文件中修改,若直接在客户端中通过config set protected-mode no命令修改,只对本次有效,redis-server重启后,还是为yes
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。