复制原理
复制特点
- 一个master可以有多个slave
 - 一个slave只能有一个master
 - 数据流向是单项的,master到slave
 
run id、偏移量
- run id: redis实例的标识,每次重启后会重新生成run id,当master端run id发生变化,slave会重新全量复制一遍master
 - 偏移量: 主要用来描述主从之间数据情况,如果master、slave不同说明可能存在不一致的请,通过info replication
slave0:ip=127.0.0.1,port=6380,state=online,offset=339588,lag=0 master_repl_offset:339588 
简单原理
草图
](../assets/master_slave_replication_simple_flow.jpg)
简单描述
- slave保存master的地址信息,例如IP端口
 - slave发起连接master ip:port
 - 如果连接成功slave则发送ping命令检测,master端能否正常处理命令
 - 如果master端能够返回pong的话,说明master端当前正常
 - 检测master是否开启密码验证,如果开启了密码验证,slave通过masterauth密码进行验证
 - 验证成功则开始请求同步master数据,master调用bgsave生成rdb数据文件,然后把数据发送给slave
 - slave清空本地老数据,载入新的数据到内存中
 - slave持续接收master发送的写入数据
 
补充说明
全量复制

部分复制

全量复制开销
- master:bgsave时间
 - master:rdb传输时间
 - slave:清空数据时间
 - slave:载入rdb时间
 - slave:aof开启时可能会发生重写aof