Redis主从复制

来源:互联网 发布:js舞蹈培训中心靠谱么 编辑:程序博客网 时间:2024/06/07 00:32
一. 主从复制介绍:
一般来说,要将Redis运用于工程项目中,只使用一台Redis是万万不能的,原因如下:
从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;
从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内容容量为256G,也不能将所有内容用作Redis存储内存,一般来说,单台Redis最大使用内存不应该超过20G。
本文先讨论第一点的解决方案:Redis主从复制,第二点可以使用Redis集群解决(请参考后面的文章)。


二. 典型应用场景:
电子商务网站上的商品,一般都是一次上传,无数次浏览的,说专业点也就是”多读少写”。

对于这种场景,我们可以使如下这种架构:


如图中所示,我们将一台Redis服务器作主库(Matser),其他三台作为从库(Slave),主库只负责写数据,每次有数据更新都将更新的数据同步到它所有的从库,而从库只负责读数据。这样一来,就有了两个好处:
1)读写分离,不仅可以提高服务器的负载能力,并且可以根据读请求的规模自由增加或者减少从库的数量,棒极了;
2)数据被复制成了了好几份,就算有一台机器出现故障,也可以使用其他机器的数据快速恢复。

三. redis 主从复制特点: 

(1)、master可以拥有多个slave 
(2)、多个slave可以连接同一个 master 外,还可以连接到其他 slave 
(3)、主从复制不会阻塞 master,在同步数据时,master可以继续处理 client请求 
(4)、提高系统的伸缩性 


接下来我们来实现一主一从模式:


四. redis 主从复制过程

当配置好 slave 后,slave 与 master 建立连接,然后发送 sync 命令。无论是第一次连接还是重新连接,master 都会启动一个后台进程,将数据库快照保存到文件中,同时 master 主进程会开始收集新的写命令并缓存。后台进程完成写文件后, master就发送文件给slave, slave将文件保存到硬盘上,再加载到内存中,接着 master就会把缓存的命令转发给 slave,后续master 将收到的写命令发送给 slave。如果 master 同时收到多个slave 发来的同步连接命令,master 只会启动一个进程来写数据库镜像,然后发送给所有的 slave。


五.如何配置

配置slave服务器很简单,只需要在 slave的配置文件中加入如下配置


在没有重启slave到redis服务前,我们来看下slave里面有没有数据


发现啥数据都没有

重启slave到redis服务再观察:

输入info命令

127.0.0.1:6379>  info


划线处明显标识角色是slave。

进入master服务器,

127.0.0.1:6379> info


划线处会标识角色是master

并且下面会列出所有的slave机器。

然后我们可以在slave机器上看到master数据库里面的信息,说明主从复制成功了