7-1 什么是主从复制
单机有什么问题?
一个master可以由多个slave,但是一个slave只能由一个master。
数据流是单向的,只能由master到slave。
master和slave原则上不应在一台物理机上,那样就失去了高可用的意义。
7-2 主从复制配置
有两种方式:
- slaveof命令。
-
命令实现
让一个节点称为另一个节点的Slave
让6380称为6379的slave:

注意: 执行slaveof命令,会先清空当前从节点的数据,再从主节点复制。
- 这里的slaveof命令会立即返回,但复制并没有完成。redis会在后台继续完成复制工作,复制时间长短取决于数据量大小和带宽。
取消复制
让6380不再作为6379的slave:

注意:
- 执行完该命令后,并不会清空从节点数据,只是从主节点断开连接,不再从主节点复制数据。
配置实现
slaveof ip port # 设置主节点slave-read-only yes # 让从节点只负责读
查看复制状态
在redis-cli中执行:info replication
7-3 runid和复制偏移量
run_id
每次一个redis节点启动之后,该节点都会随机生成一个标识该节点的run_id,可以通过info命令查看到。当节点重启之后,该run_id会发生变化。在主从复制中,当从节点发现主节点的run_id发生了变化,则说明主节点可能发生了重启,那么会执行一次全量复制,以保证数据一致性。复制偏移量
复制偏移量是一个整数,表示一个节点的数据状态(或者叫进度)。当修改了节点数据之后,这个数值会增大。主从节点之间,会尽力保证该值相等。如果相等,则说明主从节点的数据状态一致。
可通过info命令查看。7-4 全量复制
7-5 部分复制
全量复制的开销
salve宕机
master宕机
自动故障转移
sentinel提供了节点状态监控、自动转移故障、通知客户端可用节点等等功能。见下一章。
