尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Redis 主从复制的实现原理是什么?

Redis 主从复制的实现原理是什么? Redis主从复制实现原理面试结构化主从复制一个Master主节点负责写多个Slave从节点负责读主节点的数据同步给从节点实现读写分离、数据备份。Redis主从复制分为全量复制、部分复制增量复制。1. 完整流程① 建立连接slave向master发起socket连接完成握手发送ping校验密码建立通信通道。② 全量复制第一次同步、runid不匹配时触发slave向master发送同步命令PSYNC ? -1master执行bgsavefork子进程生成RDB快照。master在生成RDB期间新收到的写命令写入复制积压缓冲区(repl_backlog_buffer)。master把RDB快照发送给slaveslave清空自身本地数据加载RDB文件。RDB传输完毕后master把积压缓冲区里的写命令持续发送给slaveslave执行这些命令最终主从数据保持一致。注意RDB生成、传输期间master可以正常处理客户端请求。③ 命令持续传播正常运行阶段主节点每执行一条写命令就异步把命令转发给所有slaveslave接收并执行命令持续保持数据同步。④ 部分复制增量复制断线重连slave网络短暂断开重新连上master不需要全量同步。每个Redis实例有runid(节点唯一ID)、复制偏移量offset。slave重连master带上自己的runid和offset。master校验runid相同并且offset还存在于复制积压缓冲区中。master直接把offset之后的增量命令发给slaveslave执行完成完成同步。如果offset已经不在缓冲区缓冲区已经被覆盖则退化为全量复制。关键概念runid每个Redis启动生成唯一ID标识节点重启会变。offset偏移量主从各自记录已经同步到哪条命令。repl_backlog_buffer复制积压缓冲区环形缓冲区master写命令除了执行还会写进这里用于断线后增量同步是有限大小缓冲区满旧数据会被覆盖。主从复制的问题异步复制master执行完写直接返回客户端数据异步发给slave会出现主从延迟。master宕机还没同步给从机的数据会丢失。缓冲区设置过小网络抖动断开后容易触发全量复制网络压力大。旧版本SYNC命令无论什么断开都只能全量复制2.8版本引入PSYNC支持部分复制。总结第一次同步走PSYNC全量复制生成RDB传输 积压缓冲区补发增量命令。短暂断线重连优先走部分复制依赖runid、offset、复制积压缓冲区。正常运行阶段master持续异步传播写命令给从节点。主从是异步存在主从延迟有数据丢失风险。补充主从没有故障转移能力故障自动切换需要搭配Redis Sentinel哨兵。
返回列表