当前位置: 首页 > news >正文

Redis 主从复制的核心原理

Redis 主从复制(Master-Slave Replication)是 Redis 提供的一个重要功能,允许一个 Redis 实例作为主节点(Master),将数据同步到一个或多个从节点(Slave)。通过主从复制,Redis 可以实现数据的冗余备份、负载均衡和高可用性。

Redis 主从复制的核心原理

Redis 的主从复制基于 异步复制,具体过程包括主节点与从节点之间的数据同步,数据的传播等,以下是核心原理:

1. 主从节点的角色
  • 主节点(Master):主节点负责接收客户端的读写请求,处理数据修改操作,并将这些操作同步到从节点。
  • 从节点(Slave):从节点从主节点同步数据,只处理读请求。它会不断地从主节点拉取数据更新。
2. 连接和复制过程
  • 启动复制
    • 从节点通过 SLAVEOF 命令与主节点建立连接。此时,从节点开始接收主节点的数据同步请求。
    • 在连接建立后,从节点会发送同步请求,主节点会开始发送数据给从节点。
3. 全量复制(第一次同步)
  • 主节点进行全量复制
    • 当从节点第一次连接到主节点时,主节点会执行一次 全量同步,将主节点的整个数据集(即所有的数据库键值)发送给从节点。主节点会创建一个 RDB 快照,并将这个快照发送给从节点。
    • 从节点在接收到 RDB 快照后,将数据加载到自己的内存中,确保数据一致。
4. 增量复制(后续同步)
  • 增量同步:主节点会将自己的写操作(如 SETDEL 等)通过 复制流(Replication Stream)实时发送给所有从节点。
  • 从节点会接收到主节点的所有写操作,并在自己本地执行这些操作,以确保主从数据的一致性。
5. 复制过程的特点
  • 异步复制:主节点将写操作以异步的方式推送给从节点,因此主节点并不会等待从节点的确认,主节点仍然会继续处理其他客户端的请求。这样可以保证主节点的高吞吐量。
  • 数据一致性:尽管主从复制是异步的,但通过增量同步和全量同步的结合,可以确保从节点最终与主节点的数据一致性。但在网络问题或主节点宕机的情况下,可能会出现短时间的数据不一致问题。
6. 从节点的读请求
  • 从节点可以接收读请求,即客户端可以将读取操作发送给从节点,从而减轻主节点的负担。
  • 但是,主从复制并不保证立即一致性,可能存在 延迟(Replication Lag)。例如,从节点的写操作可能会滞后于主节点。
7. 断线恢复和重同步
  • 断线恢复:如果主从节点之间的连接中断,断开期间主节点的写操作可能会丢失。断开后重新连接时,从节点会执行 部分重同步,仅同步主节点在断开期间的增量数据,而不是再次执行全量同步。
  • 全量复制与增量复制:如果部分重同步无法进行,Redis 会执行全量同步,重新将主节点的全部数据发送给从节点。
8. 主从切换与高可用性
  • Redis 允许通过手动切换或工具(如 Redis Sentinel)进行主从切换。当主节点不可用时,Redis Sentinel 可以自动将某个从节点提升为新的主节点,保证系统的高可用性。
  • 在主节点发生故障时,Redis 会选择一个从节点提升为新的主节点,新的主节点会继续接受写请求,其他从节点会重新连接到新的主节点进行同步。
9. 复制延迟
  • 复制延迟是指主节点与从节点之间的数据同步滞后。这个延迟通常很小,但在高负载或网络不稳定时可能会增加,导致从节点的数据滞后于主节点。
  • 可以通过 info replication 命令查看复制延迟的情况。

Redis 主从复制的优势

  1. 数据备份:通过主从复制,可以在从节点中保持主节点数据的备份,增加数据的安全性。
  2. 负载均衡:主节点专注于处理写请求,从节点可以承担读请求,从而减轻主节点的负担,实现负载均衡。
  3. 高可用性:通过 Redis Sentinel 或其他高可用机制,能够在主节点宕机时自动进行主从切换,确保服务的可用性。

总结

Redis 主从复制的核心原理是通过 异步复制 实现主节点与从节点之间的数据同步。从节点在连接到主节点后,会执行全量同步和增量同步来保证数据一致性。尽管复制是异步的,但在大多数情况下,Redis 能够高效地实现数据备份、负载均衡和高可用性。

相关文章:

  • 问题记录汇总
  • CentOs - 服务器装机可用的基本操作
  • 由浅入深学习大语言模型RLHF(PPO强化学习- v1浅浅的)
  • TCP开发
  • Vue 计算属性(computed)
  • ImportError: cannot import name ‘FixtureDef‘ from ‘pytest‘
  • ArkTS与ArkUI深度解析:鸿蒙应用开发的未来之路
  • 【论文学习】RVS-FDSC:一种基于四方向条带卷积的视网膜血管分割方法以增强特征提取
  • 技术分享:MyBatis SQL 日志解析脚本
  • 第二章:16.5 决策树处理连续值特征
  • RLHF的改进算法DPO原理
  • Ubuntu安装Redis
  • 使用 Python 和 OpenCV 进行图像边缘检测:从基础到实战
  • idea-代码补全快捷键
  • 科普:“拉取镜像”和“下载安装”
  • 大厂算法面试常见问题总结:高频考点与备战指南
  • Kubernetes的Ingress和Service有什么区别?
  • Golang GORM系列:GORM无缝集成web框架
  • 基于Matlab实现永磁同步电机矢量控制仿真程序
  • 【JavaEE进阶】MyBatis通过注解实现增删改查
  • 乘客被地铁厕所门砸伤,南京地铁:突然坏的,已和乘客沟通处理
  • 4月金融数据前瞻:受去年低基数因素影响,社融增量有望同比大幅多增
  • 两部上戏学生作品亮相俄罗斯“国际大学生戏剧节”
  • 司法部:持续规范行政执法行为,加快制定行政执法监督条例
  • 一季度全国消协组织为消费者挽回经济损失23723万元
  • 西安碑林博物馆票价将调至85元,工作人员:10元属于改扩建期间惠民票