单机的问题
- 机器故障(高可用问题,这是主从复制可以解决的问题);
- 容量瓶颈;
- QPS 瓶颈;
主从复制的作用
- 提供数据副本;
- 扩展读性能,即读写分离;
主从复制要点
- 一个 master 可以有多个 slave;
- 一个 slave 只能有一个 master;
- 数据流是单向的,master 到 slave;
主从复制的两种实现方式
- 命令
-
slaveof
这个命令是异步的,执行完会立即返回,具体完成时间和数据量有关; -
slaveof no one
不再是谁的 slave,但之前的数据不会被清除;
-
- 配置
slaveof ip port
slave-read-only yes
slave 第一次连上 master 进行全量复制的步骤
- s: <- psync ? - 1
- m: -> FULLRESYNC {runid} {offset}
- s: save master info
- m: bgsave
- m: -> send RDB
- m: -> send buffer
- s: flush old data
- s: load RDB
网络抖动后的部分复制
- s: <- connection lost
- m: write to repl_back_buffer
- s: <- connection to master
- s: <- pysnc {offset} {runid}
- m: -> continue
- m: -> send partial data