redis 复制
配置:
配置项:slaveof <masterip> <masterport>
信息查询:INFO REPLICATION
完全重新同步:
当从实例第一次连接到主实例时,总是需要进行完全重新同步。在进行完全重新同步时,为了将所有数据复制到从实例中,主实例将数据转储到一个RDB文件(保存到磁盘,占用内存),然后发送给从实例;从实例接受到RDB文件后,会先将内存中的数据清空,然后将RDB文件中的数据导入。主实例上的复制过程时完全异步的,因此不会阻碍请求的处理。
部分重新同步:
当主实例与从实例断开连接后,主实例会将期间所做的操作记录到命令积压缓冲区replication backlog中;当从实例重连后使用PSYNC命令来发送最后一个的master_replid和最后一个master_repl_offset;主实例首先会检查请求中的master_replid是否与自己的一致,然后再检查请求中的offset能否从replication backlog中获取,如果master_repl_offset在缓冲区范围内,主实例将从master_repl_offset开始到队列结束的数据传给slave,从而达到同步,降低了使用全量复制的开销。否则,如果主实例在连接断开期间,写入的命令数量超出了缓冲区的容量,那么部分重新同步就会被拒绝,完全重新同步将会开启。
backlog缓冲区的大小默认事1M,可以利用以下公式估算缓冲区合适大小:
t*(master_repl_offset2-master_repl_offset1)/(t2-t1)
t是断开连接的时间。公式是先用两个时间节点的偏移量除以时间差算出平均流量,然后乘以断开时间。