数据同步的过程
主从复制的数据同步阶段大概有5步:
- slave创建同步请求。
- master创建RDB同步数据。
- slave恢复RDB同步数据。
- slave请求部分同步数据。
- slave恢复部分同步数据。
至此,同步完成,稍微详细一些的内容可以看下图。
数据同步注意事项
master
- 如果master数据量巨大,数据同步应该避开高峰期,避免造成master阻塞,影响正常业务。
- 复制缓冲区大小设置不合理,会导致数据溢出。如果全量复制时间太长,部分复制时发现数据有丢失,又要进行全量复制,会让master陷入死循环。
设置缓冲区大小:repl-backlog-size 1mb
- master单机内存占用主机内存的比例不宜过大,建议使用内存的50%~70%,留下一定空间执行bgsave和创建缓冲区。
slave
- 为避免slave进行全量复制、部分复制时,服务器响应阻塞或数据不同步,建议关闭此期间对外的服务:
slave-serve-stale-data yes|no
。 - 数据同步阶段,master发送给slave信息可以理解master时slave的客户端,主动向slave发送命令。
- 多个slave同时对master请求数据,master发送的RDB文件增多,会对带宽造成冲击,如果带宽不足,需要适量错峰。
- slave过多时,建议调整拓扑结构,由一主多从变为树状结构,中间的节点既是slave又是master。但是,由于层级深度,深度越大的slave与顶端的master数据同步延迟较大,数据一致性变差,要谨慎选择。