redis的主从复制机制是指可以让从服务器(slave)能精确复制主服务器(master)的数据,如下图所示:
或者
redis主从复制主要有两种模式:完整重同步(full resynchronization)和部分重同步(partial resynchronization)
完整同步机制,我们非常好理解。比如从机首次连接到主机后,那么就是完整同步了。此时主机把rdb文件打包发送给从机,从机同步即可。
如果在此期间,主机源源不断的有新的命令,那么全部放入到缓冲区中,然后进行部分同步,将缓冲区里面的数据发送给从机即可。
部分同步还有一种使用情况就是,网络不稳定,断了之后,从机和主机的同步。也是用到了部分同步机制。
部分重同步功能由以下三个部分构成:
执行复制的双方——主服务器和从服务器会分别维护一个复制偏移量:
通过对比主从服务器的复制偏移量,程序可以很容易地知道主从服务器是否处于一致状态:
如下面的情况:
如果发现偏移量不一样,那么就会需要用到缓冲区了。
复制积压缓冲区是由主服务器维护的一个固定长度(fixed-size)先进先出(fifo)队列,默认大小为1mb。
当主服务器进行命令传播时,它不仅会将写命令发送给所有从服务器,还会将写命令入队到复制积压缓冲区里面,如图所示。
当从服务器重新连上主服务器时,从服务器会通过psync命令将自己的复制偏移量offset发送给主服务器,主服务器会根据这个复制偏移量来决定对从服务器执行何种同步操作:
除了复制偏移量和复制积压缓冲区之外,实现部分重同步还需要用到服务器运行id(run id):
如对本文有疑问, 点击进行留言回复!!
MongoDB中数据的替换方法实现类Replace()函数功能详解
理解Redis持久化,RDB持久化和AOF持久化的不同处理方式
网友评论