redis主从同步收到以下参数影响
repl-ping-slave-period主从心跳ping的时间间隔。默认10
repl-timeout 从节点超时时间。默认60
repl-backlog-size 主节点保存操作日志的大小。默认1M
repl-backlog-ttl 主节点保存操作日志的时间。默认3600秒
client-output-buffer-limit 这个参数分为3部分,第二部分涉及slave。表示主节点输出给从节点的缓存(output-buffer)大小。默认是:256M 64M 60秒。意思是:如果output-buffer>256M则从节点需要重新全同步,如果256>output-buffer>64且持续时间60秒,则从节点需要重新全同步。
主从同步的健康监控项(info Replication ):
主节点:
master_repl_offset 主节点backlog偏移量
slave0: offset 从节点backlog偏移量
master_repl_offset-offset master_repl_offset与offset的差量为延迟backlog
从节点:
master_last_io_seconds_ago 从节点超时时间
从网络断开到恢复后。slave redis 重新链接上主库。判断是否需要做全同步,或者是增量恢复的流程图如下:
1. repl-timeout 从节点超时时间。超时了会怎样?
超时了,从节点会直接重新同步一份主节点的完整数据。没有超时,则根据其他参数还可能同步增量数据而已。
2. client-output-buffer-limit 这个参数分为3部分,第二部分涉及slave。表示主节点输出给从节点的缓存(output-buffer)大小。缓冲区里放的是什么?
这个参数针对有从库的主节点,output-buffer缓冲区里放的是主库待同步给从库的操作数据。
3. repl-backlog-size 主节点保存操作日志的大小。这个和client-output-buffer-limit有什么关联关系吗?
针对有从库的主节点,repl-backlog-size 设置主节点缓存操作数据的可用大小。如果网络阻塞,主节点操作数据未同步给从节点而积累在缓冲区,这个缓冲区大小超过repl-backlog-size 。网路恢复之后,slave节点就必须重新从主节点同步一份完整数据。
client-output-buffer-limit 和 repl-backlog-size没有什么紧密关联。
redis 4.0 从节点需要停止一段时间的时候,可以设置 repl-backlog-ttl 为0 。不释放backlog的内容,这样启动slave的时候 可以部分同步。当然与repl-backlog-size client-output-buffer-limit 的大小也有关