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

【Redis】主从复制:配置、管理与优化

文章目录

  • 主从复制
    • 1. 建立复制
    • 2. 配置从节点实例
    • 3. 验证复制状态
    • 4. 复制流程说明
    • 5. 断开复制关系
    • 6. 切换主节点
    • 7. 安全配置
    • 8. 只读模式配置
    • 9. 网络传输优化

主从复制

分布式系统中为了解决单点问题,通常会把数据复制多个副本部署到其他服务器,满足故障恢复和负载均衡等需求。

Redis 也提供了复制的功能,实现了相同数据的多个 Redis 副本。复制功能是高可用 Redis 的基础,哨兵和集群都是在复制的基础上构建的。


1. 建立复制

Redis 复制机制允许将数据从一个 Redis 实例(主节点/master)同步到一个或多个 Redis 实例(从节点/slave)。复制具有以下特点:

  • 复制关系是单向的:数据只能从主节点流向从节点
  • 每个从节点只能有一个主节点
  • 一个主节点可以拥有多个从节点

在这里插入图片描述

有三种方式可以建立 Redis 复制关系:

  1. 配置文件方式:在配置文件中添加 slaveof {masterHost} {masterPort} 指令,随 Redis 启动生效
  2. 启动命令方式:在 redis-server 启动时加入 --slaveof {masterHost} {masterPort} 参数
  3. 运行时命令方式:在 Redis 运行后使用 slaveof {masterHost} {masterPort} 命令

2. 配置从节点实例

以下是在 Linux 系统上配置 Redis 从节点的步骤:

  1. 复制主配置文件:

    cp /etc/redis/redis.conf /etc/redis/redis-slave.conf
    
  2. 修改从节点配置文件:

    # 启用守护进程模式
    sed -i "s/daemonize no/daemonize yes/" /etc/redis/redis-slave.conf
    
  3. 启动从节点实例:

    # Ubuntu 系统
    redis-server /etc/redis/redis-slave.conf --port 6380 --slaveof 127.0.0.1 6379# CentOS 系统
    redis-server /etc/redis-slave.conf --port 6380 --slaveof 127.0.0.1 6379
    

注意:主节点配置通常保持不变,主要修改从节点的配置。


3. 验证复制状态

  1. 检查 Redis 实例是否正常运行:

    netstat -nlpt
    

    预期输出应显示两个 Redis 实例:

    Proto Recv-Q Send-Q Local Address    Foreign Address   State       PID/Program name
    tcp   0      0      127.0.0.1:6379   0.0.0.0:*         LISTEN      49264/redis-server
    tcp   0      0      127.0.0.1:6380   0.0.0.0:*         LISTEN      272418/redis-server
    
  2. 测试数据同步:

    • 连接到主节点(6379端口):

      redis-cli
      

      执行命令:

      127.0.0.1:6379> set hello world
      OK
      127.0.0.1:6379> get hello
      "world"
      
    • 连接到从节点(6380端口):

      redis-cli -p 6380
      

      验证数据同步:

      127.0.0.1:6380> get hello
      "world"
      

4. 复制流程说明

当复制关系建立后,主节点的所有写操作都会自动同步到从节点。从节点会持续接收并应用主节点发送的数据更新,保持与主节点的数据一致性。

在这里插入图片描述

使用 info replication 命令可以查看 Redis 实例的复制状态信息,这对于监控和维护复制关系非常重要。

主节点 (6379) 复制状态示例:

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=127.0.0.1,port=6380,state=online,offset=100,lag=0
master_replid:2fbd35a8b8401b22eb92ff49ad5e42250b3e7a06
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:100
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:100

关键字段说明

  • role:master:标识当前节点为主节点
  • connected_slaves:显示已连接的从节点数量
  • slave0:详细显示第一个从节点的连接信息
  • master_repl_offset:主节点的复制偏移量

从节点 (6380) 复制状态示例:

127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:1
master_sync_in_progress:0
slave_repl_offset:170
slave_priority:100
slave_read_only:1
connected_slaves:0
master_replid:2fbd35a8b8401b22eb92ff49ad5e42250b3e7a06
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:170
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:170

关键字段说明

  • role:slave:标识当前节点为从节点
  • master_link_status:显示与主节点的连接状态
  • slave_read_only:从节点默认处于只读模式
  • slave_repl_offset:从节点已复制的数据偏移量

5. 断开复制关系

在从节点上执行 slaveof no one 命令可以断开与主节点的复制关系:

127.0.0.1:6380> slaveof no one
OK

断开复制的流程

  1. 终止与主节点的复制连接
  2. 从节点晋升为独立的主节点
  3. 保留断开时的所有数据,但不再接收原主节点的更新

注意:断开复制后,从节点将成为独立节点,原有数据不会被清除,但不再与原主节点保持同步。


6. 切换主节点

从节点可以通过 slaveof 命令切换到新的主节点:

127.0.0.1:6380> slaveof 127.0.0.1 6479
OK

切换主节点的流程

  1. 断开与当前主节点的复制关系
  2. 建立与新主节点的连接
  3. 清空当前所有数据(危险操作)
  4. 开始从新主节点进行完整同步

重要注意事项

  • 切换主节点会导致从节点现有数据被完全清除
  • 在生产环境中执行此操作前应充分评估影响
  • 建议在低峰期执行主节点切换操作
  • 切换后应密切监控复制状态和数据一致性

7. 安全配置

主从认证机制:

对于存储重要数据的 Redis 节点,必须配置访问密码以确保数据安全:

  1. 主节点配置
    redis.conf 中设置:

    requirepass strong_password
    
  2. 从节点配置
    在从节点的 redis.conf 中添加:

    masterauth strong_password
    

操作说明

  • 所有客户端访问主节点必须使用 AUTH 命令认证
  • 从节点通过特殊客户端连接主节点,必须配置匹配的 masterauth 才能建立复制
  • 建议使用强密码(长度≥16位,包含大小写字母、数字和特殊字符)

安全建议:定期更换密码,并在配置文件中设置严格的文件权限(如 600)


8. 只读模式配置

从节点写保护:

Redis 从节点默认配置为只读模式:

slave-read-only yes

关键注意事项

  1. 任何对从节点的写操作都会导致主从数据不一致
  2. 生产环境严禁修改此配置,避免以下风险:
    • 数据不一致导致业务逻辑错误
    • 从节点数据在故障转移时丢失
    • 复制中断风险

特殊场景处理
若必须临时启用从节点写入,应:

  1. 断开复制关系 (slaveof no one)
  2. 明确告知所有客户端此节点状态变化
  3. 记录操作日志备查

9. 网络传输优化

  1. 延迟与带宽权衡:

通过 repl-disable-tcp-nodelay 参数控制网络传输行为:

repl-disable-tcp-nodelay no  # 默认值
  1. 配置策略对比:
配置值网络行为延迟影响带宽消耗适用场景
no (默认)立即发送小数据包延迟低带宽高同机房/优质网络
yes合并数据包(约40ms间隔)延迟增加带宽优化跨机房/复杂网络

部署建议

  1. 同机房部署:保持默认 no 配置
    repl-disable-tcp-nodelay no
    
  2. 跨地域部署:建议启用优化
    repl-disable-tcp-nodelay yes
    
  3. 监控指标:
    • 通过 info replication 观察 lag
    • 网络延迟应稳定在可接受范围内(通常<100ms)
http://www.lqws.cn/news/469117.html

相关文章:

  • RTX5 | 配置文件RTX_Config.h
  • 借助ChatGPT快速开发图片转PDF的Python工具
  • 从0开始学习R语言--Day28--高维回归
  • 大学专业解读——电气,自动化,仪器
  • ZooKeeper 3.9.2 集群安装指南
  • AIGC工具平台-Duix.Heygem音频对口型数字人
  • API网关Apisix管理接口速查
  • Mac电脑-触摸板增强工具-BetterTouchTool
  • SpringAI1.0.0 入门案例
  • LLM:重构数字世界的“智能操作系统”
  • 71、单元测试-Junit5简介
  • Transformer架构每层详解【代码实现】
  • 使用Trae编辑器与MCP协议构建高德地图定制化服务
  • 【unity】批量剔除图片四周空白像素的工具
  • 深入Java大厂面试:从Spring框架到微服务架构的技术解析
  • python web开发-Flask数据库集成
  • 深度剖析 PACK_SESSIONID 实现原理与安全突破机制
  • 分组交换比报文交换的传输时延更低
  • 深入剖析Linux epoll模型:从LT/ET模式到EPOLLONESHOT的实战指南
  • 【Linux】线程概念 分页式存储 优缺点
  • 开源Blazor界面组件库:Ant Design Blazor
  • 【全开源】填表问卷统计预约打卡表单系统+uniapp前端
  • ESP32 ESP-IDF Ubuntu平台工具链的标准设置
  • 百度萝卜快跑携4颗禾赛激光雷达进军迪拜,千辆L4无人车开启全球化战略
  • 华为云Flexus+DeepSeek征文 | AingDesk 对接华为云 ModelArts Studio 全流程教程与性能测评对比
  • 基于 Flutter+Sqllite 实现大学个人课表助手 APP(期末作业)
  • 【Docker 08】Compose - 容器编排
  • 【AGI】突破感知-决策边界:VLA-具身智能2.0
  • Node.js特训专栏-实战进阶:5. Express路由系统设计与优化
  • [幻灯片]分析设计高阶-02结构05-202506更新-GJ-002