命令:
- slave <masterip> <masterport>
主从第一次同步是全量同步,slave重启后同步,则执行增量同步。
全量同步: master将完整内存数据生成RDB,发送RDB到slave,后续命令则记录在repl_baklog,逐个发送给slave。
增量同步:slave提交自己的offset到master,master获取repl_baklog中从offset之后的命令给slave。
注意:repl_baklog大小有上限,写满后会覆盖最早的数据。如果slave断开时间过久,导致数据被覆盖,则无法实现增量同步,只能再次全量同步。
全量同步流程:
- slave节点请求增量同步。
- master节点判断replid,发现不一致,拒绝增量同步。
- master将完整内存数据生成RDB,发送RDB到slave。
- slave清空本地数据,加载master的RDB。
- master将RDB期间的命令记录在repl_baklog,并持续将log中的命令发送给slave。
- slave执行接受到的命令,保持与master之间的同步。
优化Redis主从集群
- 在master中配置repl-diskless-sync yes启用无磁盘赋值,避免全量同步时的磁盘IO。
- Redis单节点上的内存占用不要太大,减少RDB导致的过多磁盘IO。
- 适当提高repl_baklog的大小,发现slave宕机尽快实现故障恢复,尽可能避免全量同步。
- 限制一个master上的slave节点数量,如果实在太多slave,则可以采用主-从-从链式结构,减少master压力。