redis主从复制(2)— replication buffer与replication backlog

1、redis主从复制过程
先不解释replication buffer和replication backlog,而先看看redis主从复制的过程。

redis的主从复制分为两个阶段:

1)同步(sync rdb snapshot):slave复制master的某时间点(t)的全量数据,t为master接收到slave的sync命令后执行rdb bgsave的时间点。2.8增加psync,支持full resync和partial resync命令。master发送rdb文件到slave,slave读取rdb把数据加载到内存。

2)命令传播(commands propagation):同步时间点t后master上的数据更新到slave上, 发送的数据是redis的命令。

2、replication buffer的作用
redis的slave buffer(replication buffer,master端上)存放的数据是下面三个时间内所有的master数据更新操作。

1)master执行rdb bgsave产生snapshot的时间

2)master发送rdb到slave网络传输时间

3)slave load rdb文件把数据恢复到内存的时间

replication buffer太小会引发的问题:

replication buffer由client-output-buffer-limit slave设置,当这个值太小会导致主从复制链接断开。

1)当master-slave复制连接断开,server端会释放连接相关的数据结构。replication buffer中的数据也就丢失了,此时主从之间重新开始复制过程。

2)还有个更严重的问题,主从复制连接断开,导致主从上出现rdb bgsave和rdb重传操作无限循环。
查看[top redis headaches for devops – replication buffer]
因而推荐把slave replication buffer的hard/soft limit设置成512M

config set client-output-buffer-limit "slave 536870912 536870912 0"

3、replication backlog的出现

在2.8版本,redis使用了新的复制方式,引入了复制积压缓冲(replication backlog)。
查看[Designing Redis replication partial resync]
1.png

上图来自《redis设计与实现》
当主服务器进行命令传播的时候,maser不仅将所有的数据更新命令发送到所有slave的replication buffer,还会写入replication backlog。当断开的slave重新连接上master的时候,slave将会发送psync命令(包含复制的偏移量offset),请求partial resync。如果请求的offset不存在,那么执行全量的sync操作,相当于重新建立主从复制。

4、区分replication buffer 和 replication backlog

1) replication buffer对应于每个slave,通过config set client-output-buffer-limit slave 设置。

2) replication backlog是一个环形缓冲区,整个master进程中只会存在一个,所有的slave公用。backlog的大小通过repl-backlog-size参数设置,默认大小是1M,其大小可以根据每秒产生的命令、(master执行rdb bgsave) +( master发送rdb到slave) + (slave load rdb文件)时间之和来估算积压缓冲区的大小,repl-backlog-size值不小于这两者的乘积。

参考资料:

[1] redis设计与实现(黄健宏)

[2] redis replication(http://redis.io/topics/replication)

[3] [Designing Redis replication partial resync](http://antirez.com/news/31)

转自:http://mdba.cn/?p=804

原创文章,作者:s19930811,如若转载,请注明出处:http://www.178linux.com/2478

(1)
上一篇 2016-04-05 23:03
下一篇 2016-04-05 23:05

相关推荐

  • 对软连接进行cp,rm

    软连接的原理 图1 由 1 号inode 读取到连结档的内容仅有档名,根据档名链接到正确的目录去取得目标文件的inode , 最终就能够读取到正确的数据了。 软连接的使用 创建软连接,从下图可以看出软连接的大小是11个字节,对比/etc/passwd和passwdlns可知他们不是同一个文件。 在复制cp的时候对软连接的处理 对指向文件的的软连接:使用cp …

    Linux干货 2017-02-25
  • Linux小工具之cheat

    随着linux学习的深入,接触到的命令越来越多,此时,考验脑力的时候就到了,除非你是”脑王”,否则面对多如牛毛的linux命令,真的会崩溃!linux前辈们貌似也被同样的问题所困扰,所以,他们发明了cheat。cheat是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但…

    2017-08-10
  • 运维必备技能之磁盘管理

    磁盘分区的三个工具 1、fdisk交互式工具         fdisk /dev/sdb进入交互界面         交互式界面的几个常用命令        …

    Linux干货 2017-03-14
  • 随笔

    GREP正则表达式: 复习: glob文件通配符:     *:任意长度字符:     ?:任意单个字符:     []:括号内的任意单个字符:     [^]:括号内字符除外:  &nbs…

    Linux干货 2016-07-16
  • Linux基础目录名称及功用

    FHS目录规则 Filesystem Hierarchy Standard(文件系统目录标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。   FHS定义了两层规范,第一层是,…

    Linux干货 2016-10-30
  • 系统启动流程与GRUB管理

    系统启动流程: POST–>读取BootSequence(BIOS),决定引导次序–>读取引导设备的Bootloader(MBR grubstage1–>stage1.5/boot/filkeststem)–>boot–>/boot/grub.conf–>磁盘分区读取 kernel(ramd…

    Linux干货 2016-09-13