配置
建立复制
建立复制有三种方式:
- 在配置文件中加入配置,跟随Redis启动生效
slaveof <masterip> <masterport>
- 在redis-server启动命令后加入 “–slaveof masterip masterport”。
redis-server --slaveof 127.0.0.1 6379
- 在客户端直接使用命令,slaveof masterip masterport
slaveof 127.0.0.1 6379
断开复制
直接执行命令断开复制,slaveof no one
slaveof no one
Redis可以直接通过slaveof命令切换主节点
Redis在切换主节点过程中,会先清理删除本地旧数据,在进行复制操作。
安全性
一般在设置Redis配置中,我们会通过设置requirepass参数进行密码验证。所以在从节点复制主节点就需要配置参数masterauth来配置主节点密码。
在复制过程中,一般需要配置从节点为只读属性,防止修改从节点数据导致主从节点数据不一致,通过设置参数slave-read-only
slave-read-only yes
传输延迟
复制过程中,会存在网络延迟等问题。Redis提供了一个配置可以设置进行优化
//默认下此配置为关闭
repl-disable-tcp-nodelay no
当关闭时,主节点产生的命令数据无论大小都会及时地发送给从节点,这样主从节点的延迟会变小,但是会增加网络带宽消耗。
当开启时,主节点会合并较小的TCP数据包从而减少带宽。默认发送时间间隔取决于Linux的内核,一般默认为40毫秒。
原理
复制过程
数据同步
数据同步过程分为全量同步和部分同步两种方式。通过使用psync命令操作同步。
psync runId offset
psync命令运行需要组件支持:
- 主从节点各自复制偏移量。
- 主节点复制积压缓冲区。
- 主节点运行id。
主节点运行id每次启动都会变更,可以采用 debug reload命令执行重启,不会变更run_id
psync命令运行流程
参数offset是当前从节点保存的复制偏移量,如果是第一次参数复制,则默认值是-1
如果主节点回复 +FULLRESYNC 那么从节点将触发全量复制
如果主节点回复 +CONTINUE,从节点触发部分复制
如果主节点回复 -ERR 说明主节点不识别psync命令。可能是主节点版本过低。
全量复制
全量复制流程图:
部分复制
部分复制流程图: