四、主从复制单机 Redis 存在单点风险机器宕机服务即中断数据也可能丢失。主从复制通过建立多个相同数据的副本为读写分离与故障转移提供基础。4.1 配置在从节点执行 slaveof 命令即可建立复制关系新版可使用 replicaof本机示例把 6380 端口实例设为 6379 的从节点# 从节点 6380 执行 127.0.0.1:6380 slaveof 127.0.0.1 6379 OK 127.0.0.1:6380 info replication # Replication role:slave master_host:127.0.0.1 master_port:6379 master_link_status:up建立复制的完整过程大致分为六个步骤从保存主节点信息到命令持续复制保存主节点信息从节点只记录主节点地址此时复制流程尚未开始master_link_status 为 down主从建立连接从节点内部定时任务发现新主节点后建立基于 TCP 的网络连接失败会持续重试发送 ping确认主节点应用层工作正常回复超时则断开重连权限验证主节点要求认证时从节点发送密码同步数据集进入数据同步阶段命令持续复制同步完成后主节点把后续写命令持续发给从节点4.2 拓扑结构复制拓扑支持单层或多层关系常见的三种结构各有适用场景一主一从最简单的拓扑主节点宕机时从节点提供故障转移支持。写并发高且需要持久化时可以只在从节点开启 AOF避免持久化干扰主节点性能一主多从应用端利用多个从节点实现读写分离读比重大的场景可以把读命令均衡到不同从节点耗时读命令可以指定专门的从节点执行树形主从结构从节点既能复制数据也能作为下层从节点的主节点继续向下复制4.3 原理1复制偏移量与数据集标识主从节点各自维护复制偏移量主节点发送命令后累加自身偏移量从节点接收执行后累加自身偏移量。对比两个偏移量可以判断数据是否一致replid 与 offset 共同标识一个数据集两个节点的 replid 和 offset 都相同说明持有的数据一致。偏移量可以类比“学习进度”——主节点准备了多少内容、从节点学到哪里一目了然。2psync 与同步流程Redis 使用 psync 命令完成数据同步分为全量复制与部分复制两类。psync 携带 replid 与 offset 参数从节点的响应分支有几种情况回复 FULLRESYNC replid offset进入全量复制流程回复 CONTINUE进入部分复制流程回复 -ERR主节点版本过低不支持 psync可回退使用 syncpsync 由 Redis 在主从模式下自动调用一般不需要手动执行与旧版 sync 相比sync 会阻塞服务器处理其他请求psync 则不会。3全量复制全量复制是主从第一次建立复制时的必经阶段代价也最高主节点 bgsave 生成快照、RDB 文件网络传输、从节点清空旧数据并加载 RDB期间耗时随数据集增大而拉长。2.8.18 版本起支持无磁盘复制主节点不落盘直接把生成的 RDB 数据通过网络发送给从节点省去一轮磁盘读写。4部分复制部分复制针对网络闪断或命令丢失的场景。从节点断线重连后携带之前的 replid 与 offset 请求补发主节点依据 offset 在复制积压缓冲区中查找数据缓冲区是先进先出的定长队列能保存最近已复制的数据5心跳机制主从之间的长连接靠应用层心跳维护区别于 TCP 自带心跳。主从节点彼此模拟对方的客户端进行通信主节点定期向从节点发送 ping从节点定期上报复制偏移量用于监控连接状态与数据一致性。
阅读完成 · 觉得有帮助?