概念
Redis主从复制,参与复制的Redis实例分为主节点和从节点。以一主多从 的模式建立分布系统,是redis搭建高可用 集群的基础,为容错 、故障转移 提供支持
配置
默认情况下,Redis都是主节点。
每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。
建立复制
配置从节点的方法
- 在配置文件中加入
slaveof {masterHost} {masterPort} - 启动命令+参数,
redis-server --slaveof {masterHost} {masterPort} - 直接命令,
slaveof {masterHost} {masterPort}
查看节点复制相关状态
info replication
断开复制
断开复制 slaveof no one ,断开后从节点晋升为主节点
切主操作 slaveof {newMasterIP} {newMasterPort}
安全性
当主节点设置requirepass 参数进行密码验证时,从节点需配置masterauth 参数与主节点密码保持一致
只读
从节点使用slave-read-only=yes 配置为只读模式
传输延迟
主从节点部署在不同机器上,复制时的网络延迟就成为需要考虑的问题。
repl-disable-tcp-nodelay 参数用于控制是否关闭tcp-delay
- 当关闭时,主节点产生的命令数据无论大小都会及时发送给从节点,这样主从之间延迟会变小,但增加了网络带宽的消耗
- 当开启时,主节点会合并较小的TCP数据包从而节省宽带。默认发送时间间隔取决于linux内核,一般默认为40毫秒。
原理
复制过程
- 保存主节点信息:保存地址信息,命令返回
- 建立连接,ping,权限验证
- 数据同步: 分为两种:全量复制、部分复制
- 命令持续复制:主节点持续将写入命令发送给从节点,保证主从一致性
数据同步
redis 同步有 2 个命令:
sync 和 psync,前者是 redis 2.8 之前的同步命令,后者是 redis 2.8 为了优化 sync 新设计的命令。我们会重点关注 2.8 的 psync 命令。
psync 命令需要 3 个组件支持:
- 主从节点各自复制偏移量
- 主节点复制积压缓冲区
- 主节点运行 ID
psync流程
如果回复+FULLRESYNC, 那么从节点触发全量复制流程
如果回复+CONTINUE,从节点将触发部分复制流程
全量复制
部分复制
心跳
主节点默认每隔10秒对从节点发送ping命令
从节点在主线程中每隔1秒发送replconf ack {offset}, 给主节点上报自生当前复制偏移量
异步复制
写命令的发送过程是异步完成,也就是说主节点自身处理完写命令后直接返回给客户端,并不等待从节点复制完成
|