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上
-
scp -rf redis/ aaa@qq.com:/home/redis
-
scp -rf redis/ aaa@qq.com:/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 命令来进行同步。
上一篇: varnish基本介绍