b、从库进行数据恢复的时候,RDB 的恢复效率也要高于 AOF。 @H_502_0@ @H_502_0@how: @H_502_0@ 第一次全量复制: @H_502_0@ 分3个阶段:连接建立阶段(即准备阶段)-> 主库同步数据到从库阶段 -> 发送同步期间新写命令到从库阶段 @H_502_0@
offset:记录复制进度偏移量,第一次复制为-1; @H_502_0@ @H_502_0@ 数据同步:master 执行 bgsave命令生成 RDB 文件,并将文件发送给从库,同时主库为每一个 slave 开辟一块 replication buffer 缓冲区记录从生成 RDB 文件开始收到的所有写命令; slave收到 RDB 文件后保存到磁盘,并清空当前数据库的数据,再加载 RDB 文件数据到内存中; @H_502_0@ @H_502_0@ 发送同步期间新写命令到从库:从节点加载 RDB 完成后,主节点将 replication buffer 缓冲区的数据发送到从节点,Slave 接收并执行,从节点同步至主节点相同的状态; @H_502_0@ replication buffer 缓冲区的数据:
1)master 执行 bgsave 产生 RDB 的期间的写操作;
2)master 发送 rdb 到 slave 网络传输期间的写操作;
3)slave load rdb 文件把数据恢复到内存的期间的写操作; @H_502_0@ replication buffer注意:太小会导致主从复制连接断开,由 client-output-buffer-limit slave 设置。 @H_502_0@ @H_502_0@ 增量复制: @H_502_0@ 用于网络中断等情况后的复制,只将中断期间主节点执行的写命令发送给从节点,与全量复制相比更加高效(redis 2.8之后增加)。 @H_502_0@ 原理:repl_backlog_buffer。不管在什么时候 master 都会将写指令操作记录在 repl_backlog_buffer 中。因为内存有限, repl_backlog_buffer 是一个定长的环形数组,如果数组内容满了,就会从头开始覆盖前面的内容。master 使用
master_repl_offset
记录自己写到的位置偏移量,slave 则使用 slave_repl_offset
记录已经读取到的偏移量。
@H_502_0@master_repl_offset
与 slave_repl_offset
之间的命令同步给从库即可
@H_502_0@ 注意:一旦被覆盖就会执行全量复制-
@H_502_0@+
@H_502_0@版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。