avatar

一条在知识海洋的咸鱼

这个家伙很懒,啥也没有留下😋

  • 首页
  • Linux
  • OCJP
  • Java核心技术卷
  • J2EE相关标准
  • 深入理解Java虚拟机
  • NIO与SOcket编程技术指南
  • Java多线程编程核心技术
  • Redis开发与运维
  • Spring Cloud Alibaba 微服务原理与实践
  • DevOps
  • Docker
  • MySQL必知必会
  • AI自学路线
  • Spring Boot 编程思想(核心篇)
主页 复制
文章

复制

发表于 2021-01-11 更新于 2026-06- 10
作者 Administrator
13~17 分钟 阅读

在分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他机器,满足故障恢复和负载均衡等要求。复制功能是高可用Redis的基础

  • 配置
    • 建立复制:从节点slaveof
      • 配置复制的方式
      • 操作流程
    • 断开复制、切换节点
      • 段开复制流程:从节点slaveof on one
      • 切换节点:slaveof
    • 安全性配置
    • 只读
    • 传输延迟
  • 拓扑
    • 一主一从结构
    • 一主多从结构
    • 树状主从结构
  • 原理
    • 复制原理
      • 保存主节点(master)信息
      • 建立连接
      • 发送ping命令
      • 权限验证
      • 同步数据集
      • 命令持续复制
    • 心跳
      • 心跳机制
  • 开发与运维中的问题

配置

建立复制:从节点slaveof

  • 复制的基础
    1.Redis实例划分为主节点(master)和从节点(slave)
    2.默认情况下Redis都是主节点
    3.每个从节点只能有一个主节点,每个主节点可以有多个从节点
    4.复制的数据流是单向的,只能由主节点复制到从节点

配置复制的方式

image.png
slaveof配置都是在从节点发起

  • 配置文件中加入slaveof
  • 启动redis时 redis-server --slaveof
  • 直接在cli中使用slaveof ,所以可以在运行期间动态配置

操作流程

slaveof为异步命令,执行slaveof时,节点只保存主节点信息后返回,后续复制流程在节点内部异步执行

  • 复制操作流程
    1.redis-server --port 6380
    image.png
    2.redis-cli -p 6380 执行slaveof localhost 6379 将6379作为主节点,开始复制
    image.png
    3.主节点info replication复制状态信息
    image.png
    4.从节点info replication复制状态信息
    image.png

断开复制、切换节点

段开复制流程:从节点slaveof on one

  • 主要流程:
    1.断开与主节点复制关系
    2.从节点晋升为主节点
    image.png

切换节点:slaveof

  • 主要流程:
    1.断开与主节点复制关系
    2.与新主节点建立复制关系
    3.删除从节点当前所有数据
    4.对新主节点进行复制操作
    image.png

特别注意:切主节点后从节点会清空之前所有数据

安全性配置

image.png

  • 主节点通过设置requirepass参数进行密码验证,所有客户端必须使用auth命令实行校验
  • 节点复制是通过一个特殊标识的客户端来完成的,因此从节点的masterauth参数与主节点密码保持一致

只读

image.png
slave-read-only yes配置为只读模式,建议不要修改节点的只读模式,会破坏造成数据不一致

传输延迟

主从节点部署在不同机器上需要考虑网络延迟问题
image.png
repl-disable-tcp-nodelay no 参数用于是否关闭TCP延迟

  • 关闭时,无论数据大小都会及时地发送给从节点,延迟变小,带宽增大。适用于同机架或同机房部署
  • 开启时,合并较小的TCP数据包节省带宽,发送时间间隔一般为40ms,取决于Linux内核。适用于跨机房部署,带宽紧张

如果考虑高荣在可以同城跨机房部署开启该选项

拓扑

Redis的拓扑复杂性可以分为三种:一主一从、一主多从、树状主从结构
image.png

一主一从结构

用于主节点出现宕机时从节点提供故障转移支持,从节点开启AOF,主节点不开启,且主节点要避免重启操作(因为重启后数据清空,从节点也会清空),保证数据安全性也避免持久化对主节点的干扰

一主多从结构

用于读写分离,主节点写,从节点读,用于分担主节点压力。但对于并发量较高的场景,多个从节点会导致主节点写命令的多次发送过多消耗网络带宽

树状主从结构

从节点不但可以复制主节点数据,同时还可以作为其他从节点的主节点继续向下复制。有效降低主节点负载和需要传送给从节点的数据量,降低主节点压力

原理

复制原理

分为6个过程

保存主节点(master)信息

执行slaveof后从节点只保存主节点的地址信息后直接返回,此时复制流程还没有开始

建立连接

从节点(slave)内部通过运行定时任务复制维护相关逻辑,与主节点建立网络连接,如果不成功则会无限重试,或者slaveof no noe取消复制

发送ping命令

验证网络套接字是否可用,检测主节点是否可以接受处理命令

权限验证

验证requirepass参数密码验证

同步数据集

首次建立复制场景会把所有数据全部发送给从节点,这部分操作时耗时最长的步骤
(新版本可以全量同步和部分同步)

命令持续复制

主节点会持续把写命令发送给从节点,保证数据一致性

心跳

主从节点在建立复制后,会维护长连接并彼此发送心跳命令

心跳机制

  • 主从节点都有心跳机制,各自模拟成对方的客户端进行通信
  • 主节点默认每10S对从节点发送ping命令,判断从节点的村或许和连接状态image.png
  • 从节点每个1S发送replconf ack 命令,给主节点上报自身当前的复制偏移量

开发与运维中的问题

Redis开发与运维
Redis
许可协议: 
分享

相关文章

1月 17, 2021

Redis监控运维云平台 CacheCloud

无论使用还是运维Redis,不要将其看作黑盒。当Redis达到了一定规模,这些命令会变得捉襟见肘,如果通过平台化的工具同意监控和管理将极大地提升开发和运维人员工作效率CacheCloud是什么现有问题部署成本实例碎片化监控、统计和管理不完善运维、经济成本CacheCloud功能主要功能快速部署Cac

1月 16, 2021

缓存设计

缓存能够有效地加速应用的读写速度,同时也可以降低后端负载,对日常用用的开发至关重要缓存的收益和成本缓存的收益缓存的成本缓存的使用场景缓存更新策略缓存的收益和成本缓存的收益加速度写因为缓存通常是全内存的(Redis、Memcache),存储层通常读写性能不够强悍(MySQL),通过缓存的使用可以有效地

1月 14, 2021

集群

Redis Cluster是Redis的分布式解决方案,有效地解决了Redis分布式方面的需求数据分布数据分布理论数据分布数据分布理论

下一篇

Redis的噩梦:阻塞

上一篇

持久化

最近更新

  • 55 异常兜底:工具失败、非法输出、空检索与超时
  • 54 Agent Memory:短期记忆、用户上下文与摘要
  • 53 Human-in-the-loop:让关键动作暂停、确认与恢复
  • 52 工单 Tool:字段校验、创建结果与失败补偿
  • 51 订单 Tool:Mock、鉴权、状态解析与脱敏

热门标签

java基础 微服务 maven Spring Tomcat DDD Linux Linux基础 SQL基础 数据结构算法

目录

©2026 一条在知识海洋的咸鱼. 保留部分权利。

使用 Halo 主题 Chirpy