Redis 序列之三——Redis的M/S(主从机制)

一、M/S主从复制特征

                redis主从(M/S)复制配置和使用都非常简单。通过主从复制可以允许多个slave server拥有和master server相同的数据库副本。下面是关于redis主从复制的一些特点:   

                (1)master可以有多个slave;

                (2)一个slave可以接收其他slave的链接,即不仅仅能连接一个master所属的slaves,而且能连接到slave的slave,从而形成了“图”结构;

                (3)主从复制不会阻塞master。也就是说当一个或多个slave与master进行初次同步数据时,master可以继续处理client发来的请求。相反slave在初次同步数据时则会阻塞不能处理client的请求。 

                (4)主从复制可以用来提高系统的可伸缩性,我们可以用多个slave专门用于client的读请求,比如sort操作可以使用slave来处理,也可以用来做简单的数据冗余。

                (5)可以在master禁用数据持久化,只需要注释掉master 配置文件中的所有save配置,然后只在slave上配置数据持久化。

二、M/S主从复制过程

             (1) Slave端在配置文件中添加了slave of指令,于是Slave启动时读取配置文件,初始状态为REDIS_REPL_CONNECT

      (2) Slave端在定时任务serverCron(Redis内部的定时器触发事件)中连接Master,发送sync命令,然后阻塞等待master发送回其内存快照文件(最新版的Redis已经不需要让Slave阻塞)

      (3) Master端收到sync命令简单判断是否有正在进行的内存快照子进程,没有则立即开始内存快照,有则等待其结束,当快照完成后会将该文件发送给Slave端;

      (4)Slave端接收Master发来的内存快照文件,保存到本地,待接收完成后,清空内存表,重新读取Master发来的内存快照文件,重建整个内存表数据结构,并最终状态置位为 REDIS_REPL_CONNECTED状态,Slave状态机流转完成;

      (5)Master端在发送快照文件过程中,接收的任何会改变数据集的命令都会暂时先保存在Slave网络连接的发送缓存队列里(list数据结构),待快照完成后,依次发给Slave,之后收到的命令相同处理,并将状态置位为 REDIS_REPL_ONLINE

三、M/S主从复制缺陷

            M/S主从复制是全量复制,不是增量复制,这样的话,当一台slave因为某种原因与master断开,那么当重新进行连接后,就需要重新获取整个内存快照,这样不仅恢复比较慢,而且还会给master带来压力。

四、M/S主从配置方式

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

            slaveof  192.168.1.1 6379  #指定master的ip和端口

猜你喜欢

转载自guwq2014.iteye.com/blog/2123320