Redis配置主从架构,实现读写分离

Redis的主从架构,能帮助我们实现读多,写少的情况,下面配置Redis架构,很简单。

这里写图片描述

准备环境 vmware + rhel-server-7.0(101,102,103)+redis-3.2.0

1、在192.168.137.101安装好redis3.2.0,我安装的目录如下

这里写图片描述

redis的安装参考http://blog.csdn.net/yingxiake/article/details/51469364

2、通过ssh将redis文件夹copy到102和103的linux上

 
  1. scp -rf redis/ root@192.168.137.102:/home/redis

  2. scp -rf redis/ root@192.168.137.103:/home/redis

  • 1
  • 2
  • 3

102,103的redis目录如下,说明copy成功

这里写图片描述

这里写图片描述

3、配置master和slave关系,有如下俩种方式

a) 在redis.conf中设置slaveof,永久性

slaveof <masterip> <masterport>
  • 1

b)使用redis-cli客户端设置redis服务,暂时,redis重启失效

slaveof <masterip> <masterport>
  • 1

在102和103的conf/redis.conf的配置文件配置为101的slave关系

这里写图片描述

master的密码可以直接在配置文件里面配置

这里写图片描述

4、查看设置情况,使用如下命令

info replication
  • 1

101的主从关系,可以看slaves的连接数还有ip地址,端口

这里写图片描述

102,103的主从关系,可以看master]的ip地址,端口

这里写图片描述

若发现配置没有问题,但是master_link_status一直是down,connected_slaves一直是0,查找下,是不是三个ip之间不能拼通,如果能拼通,查看下端口是否能拼通,可以在windows上通过telnet

telnet 192.168.137.101 6379
  • 1

如果发现不能拼通,修改下配置文件,将

bind 127.0.0.1
  • 1

注释掉,重启服务,再试试,参考下http://blog.csdn.net/yingxiake/article/details/51472810

5、测试是否数据同步

在master设置一个key和value

这里写图片描述

在101和102上分别get数据

这里写图片描述

说明数据同步成功,接下来把102down掉,再重启,然后get数据

这里写图片描述

说明数据恢复成功,另外也说明在主从结构中,slave不能写数据

 

Redis复制工作原理:
1. 如果设置了一个Slave,无论是第一次连接还是重连到Master,它都会发出一个SYNC命令;
2. 当Master收到SYNC命令之后,会做两件事:
a) Master执行BGSAVE,即在后台保存数据到磁盘(rdb快照文件);
b) Master同时将新收到的写入和修改数据集的命令存入缓冲区(非查询类);
3. 当Master在后台把数据保存到快照文件完成之后,Master会把这个快照文件传送给Slave,而Slave则把内存清空后,加载该文件到内存中;
4. 而Master也会把此前收集到缓冲区中的命令,通过Reids命令协议形式转发给Slave,Slave执行这些命令,实现和Master的同步;
5. Master/Slave此后会不断通过异步方式进行命令的同步,达到最终数据的同步一致;
6. 需要注意的是Master和Slave之间一旦发生重连都会引发全量同步操作。但在2.8之后版本,也可能是部分同步操作。

部分复制
2.8开始,当Master和Slave之间的连接断开之后,他们之间可以采用持续复制处理方式代替采用全量同步。
Master端为复制流维护一个内存缓冲区(in-memory backlog),记录最近发送的复制流命令;同时,Master和Slave之间都维护一个复制偏移量(replication offset)和当前Master服务器ID(Master run id)。当网络断开,Slave尝试重连时:
a. 如果MasterID相同(即仍是断网前的Master服务器),并且从断开时到当前时刻的历史命令依然在Master的内存缓冲区中存在,则Master会将缺失的这段时间的所有命令发送给Slave执行,然后复制工作就可以继续执行了;
b. 否则,依然需要全量复制操作;

Redis 2.8 的这个部分重同步特性会用到一个新增的 PSYNC 内部命令, 而 Redis 2.8 以前的旧版本只有 SYNC 命令, 不过, 只要从服务器是 Redis 2.8 或以上的版本, 它就会根据主服务器的版本来决定到底是使用 PSYNC 还是 SYNC :

如果主服务器是 Redis 2.8 或以上版本,那么从服务器使用 PSYNC 命令来进行同步。
如果主服务器是 Redis 2.8 之前的版本,那么从服务器使用 SYNC 命令来进行同步。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值