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)
s19930811s19930811
上一篇 2016-04-05
下一篇 2016-04-05

相关推荐

  • 计算机起源与Linux简述

    什么是计算机?  计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。 它由硬件系统和软件系统组成,没有安装任何软件的计算机被称为裸机。硬件系统由运算器,控制器,存储器,输入设备,输出设备几部分组成;…

    Linux干货 2017-03-29
  • 集中练习7-bash脚本

    集中练习7-bash脚本

    Linux干货 2017-12-05
  • Linux计划任务

    Linux任务计划 Linux任务计划、周期性执行任务 未来某一时间点执行一次任务:at,batch 周期性计划任务:crontab     默认执行结果会通过邮件形式发送给用户 本地电子邮件服务 smtp:Simple Mail Transfer Protocol,既简单邮件传输协议,主…

    Linux干货 2016-09-14
  • Ansible中文权威

    福利贴 运维神器 Ansible 本土化在际,除了每日分享,定期更新外,还有大虾不定期解惑,更多福利可关注  http://www.178linux.com/doc/ansible/  或 扫描二维码入( 372011984 )群关注.

    Linux干货 2015-08-13
  • ifconfig命令学习

    ifconfig命令 网络配置 ifconfig命令被用于配置和显示Linux内核中网络接口的网络参数。用ifconfig命令配置的网卡信息,在网卡重启后机器重启后,配置就不存在。要想将上述的配置信息永远的存的电脑里,那就要修改网卡的配置文件了。 语法 ifconfig(参数) 参数 add<地址>:设置网络设备IPv6的ip地址; del&lt…

    Linux干货 2017-07-02
  • linux操作系统rpm软件包管理

    软件包管理 软件包运行环境: API:Application Programming Interface     使用标准:POSIX:     源代码运行步骤:预处理(如处理注释)—>编译成汇编代码—>链接其他库文件 ABI:applicatio…

    2016-08-22