1.为什么用到Redis?2016-05-0815:54:43
- 在DWCS项目中需要使用到Redis数据库作为多个worker节点与Master节点进行数据交换的关键实现,因为Redis的<key,value>存储模式,可以很好地与MapReduce模型的实现——mincemeat.py 很好的搭配,实现数据的传输以及节点的通信。
- 而且Redis的数据是先写入内存来进行读取,速度很快,方便快捷是节省数据读取,尤其是数据量很大的情况下,的一种很好的方式。
- Redis的Master 与 slave作为主从的配置,主从复制机制可以使得Master 作为 数据“发布者”,对多个Slave (数据“订阅者”)进行数据的更新,只要slave 节点向master申请进行数据同步sync请求,master 节点的server便会开启一个后台程序,备份master的Redis数据库作为一个文件(记为 backups),如果在server备份还未完成时,Master节点上有Redis的客户端client连接其server并进行读写操作,这个时候Master并不会阻塞client的读写,此时两个进程(client和备份进程)都同步运行。<master 备份时的非阻塞>
- master 可以连接多台slave,但是读写数据是分离的,master复制数据库的“写”,slave则是只有“读”的权限。(这里说的读写操作对象是master节点上的Redis数据库),如果在slave上进行数据的写操作,那么数据只存在slave本地的数据库中,也就是<在master上set数据,在slave上可以get到数据;在slave上set数据,在master上是get不到的>。可以说这种master--slave的形式部署是一种数据的单向树状传输图。但是由于DWCS项目的数据是需要多对一的数据传输——所有worker节点将解析出来的url汇集给master节点处理,而Redis是一对多的“master--slaves”模式,而且<一台slave无法连接多台master>. 所以使用“在Master节点上部署Redis服务器,在worker节点上部署Redis的client,连接Master的Redis服务器,进行多client-->master的客户端群连接更新数据库”。这样做:
- 优点:在同一个Redis Server上进行每个worker节点client端数据的更新,快捷方便,简单。
- 缺点:不安全,由于Redis是存在内存中的,运算速度快,方便Redis Server 密码的暴力破解;多客户端保存数据容易发生误操作或者数据被其他客户端写入相同的key值而被覆盖的情况。
- 解决:设置密码?在存入数据前先对数据进行加密?在存入数据前判断是否key值重复,设置自动增长的key值避免重复?
2.Redis Server【Master节点上】的配置
- 目前支持Windows的Redis是非官方的微软Redis版本(MSOpenTech/redis),下载解压后,有以下文件:
- 其中的redis.windows.conf便是需要更改的配置文件。打开后:
- port 6379 表示其默认端口是6379
- 其中几个常用到的配置更改项:port 、logfile 、 slaveof(配置主从复制用到)、 save、slave-read-only、requirepass(配置主从复制用到)、masterauth(配置主从复制用到)、...
- 修改完配置文件后保存,DOS切换至Redis的目录下,启动Redis Server:
- 在DCWS中,只需要用到Master节点的Redis Server ,所以配置我只改了(因人而异),其他的都是默认值:
requirepass *******
3.Redis Client的配置【worker节点上】:
- 在worker节点的机子上进入DOS,切换至Redis的目录运行client,连接远程master节点服务器上的server:
- -h 后接 master ip,-p 后接 端口 , -a 后接 连接密码(就是requirepass 设置的密码)
4.连接成功后:
server端:
client端:
时间: 2024-11-01 00:50:28