主从数据同步流程

主从全量同步

Untitled

总结一下以上步骤:

  1. 从节点发起请求给主节点 Master,想要同步数据。此时需要判断是否为第一次请求,如果是第一次请求那么就进行全量同步
  2. 主节点 Master 会执行全量同步,将 RDB 文件发送给从节点去执行
  3. 在全量同步生成 RDB 文件期间,主节点记录期间产生的所有命令,并将命令发送给从节点去执行

主从数据增量同步

当 Slave 重启或主从数据变化之后,触发增量同步

Untitled

总结一下以上步骤:

  1. 从节点发送同步请求,主节点判断是不是第一次请求,并且获得到了从节点传过来的 offset 值
  2. 主节点从日志文件中获取 offset 之后的数据,并发送给从节点

总结

主从复制共有三种模式:全量复制、基于长连接的命令传播、增量复制

主从服务器第一次同步的时候,就是采用全量复制,此时主服务器会两个耗时的地方,分别是生成 RDB 文件和传输 RDB 文件。为了避免过多的从服务器和主服务器进行全量复制,可以把一部分从服务器升级为「经理角色」,让它也有自己的从服务器,通过这样可以分摊主服务器的压力。

第一次同步完成后,主从服务器都会维护着一个长连接,主服务器在接收到写操作命令后,就会通过这个连接将写命令传播给从服务器,来保证主从服务器的数据一致性。

如果遇到网络断开,增量复制就可以上场了,不过这个还跟 repl_backlog_size 这个大小有关系。

如果它配置的过小,主从服务器网络恢复时,可能发生「从服务器」想读的数据已经被覆盖了,那么这时就会导致主服务器采用全量复制的方式。所以为了避免这种情况的频繁发生,要调大这个参数的值,以降低主从服务器断开后全量同步的概率。