1、复制缓冲区(client-output-buffer-limit slave)
全量复制时使用到的一个缓冲区,每个从节点都会有一个该缓冲区,其主要存放全量复制过程中主节点开始执行bgsave到从节点载入rdb文件这个时间段中主节点的写命令。但是当主节点数据量太大或者网络延迟太大导致上面的时间段太长,即要写入的数据超过缓冲区的大小,导致主节点断开与从节点的连接。可能还会引起全量复制->复制缓冲区溢出导致连接中断->重连->全量复制->复制缓冲区溢出导致连接中断的循环。
复制缓冲区的大小由client-output-buffer-limit slave {hard limit} {soft limit} {soft seconds}配置,默认值为client-output-buffer-limit slave 256MB 64MB 60,其含义是:如果buffer大于256MB,或者连续60s大于64MB,则主节点会断开与该从节点的连接。
2、复制积压缓冲区(repl-backlog-size)
主节点维护的一个缓冲区,在主节点开始有从节点时创建(不管几个从节点都只有一个),其是长度固定且为先进先出的队列,默认大小为1MB。主要用来备份主节点最近发送给从节点的写命令,同时还会存储该写命令对应的偏移量(offset),当主从节点offset的差距过大超过缓冲区长度时,将无法执行部分复制,只能执行全量复制。由于该缓冲区长度有限,因此备份的命令也有限,又因为其为先进先出的队列,所以先进入缓冲区的命令会随着命令的增加被挤出缓冲区。因为部分复制效率高,所以为了能够提高部分复制的几率,可以适当增加积压缓冲区的大小,即设置配置 repl-backlog-size 的大小。
3、总结
复制缓冲区是客户端输出缓冲区的一种,主节点会为每一个从节点都创建一个复制缓冲区,主要用于全量复制使用。复制缓冲区,主要用于首次rdb后的首次增量同步数据,复制积压缓冲区主要用于常规的增量数据同步。当无法完成增量同步时,就会全量同步,全量同步后的第一次增量,仍是使用复制缓冲区。
复制积压缓冲区则是一个主节点只有一个,与从节点数量无关。