详情

首页手游攻略 Redis主从复制连接丢失怎么解决?排查网络与配置的实用指南

Redis主从复制连接丢失怎么解决?排查网络与配置的实用指南

佚名 2026-11-11 09:00:02

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“Redis主从复制连接丢失怎么解决?排查网络与配置”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

V2.0

以下是对 Redis 运行日志中九类常用关键事件的 优化整理与结构化分析,每条信息包含 问题描述、原因分析、优化建议 三个部分,并在最后做 统一总结,以便用来运维笔记或故障排查手册:

Redis 关键事件优化说明

1.Asynchronous AOF fsync is taking too long (disk is busy?)

问题描述:

实际处理时,Redis AOF 异步刷盘过程中,fsync() 操作耗时过长。

原因分析:

  • 磁盘 I/O 压力大;
  • 当前 Redis 设置为 appendfsync everysec;
  • AOF 写入量过大导致 fsync 堵塞。

优化建议:

  • 采用 iostat、vmstat 或 dstat 监控磁盘写入;
  • 将存储换为 SSD/NVMe;
  • 设置 appendfsync everysec(避免每次写都 fsync);
  • 增加 AOF 缓冲区与开启 aof-use-rdb-preamble yes 减少 fsync 频率;
  • 配合采用 no-appendfsync-on-rewrite yes 避免 AOF 重写时额外阻塞。

2.Replication backlog created

问题描述:

主服务器新建了复制积压缓冲区。

原因分析:

  • 有从库连入并请求同步;
  • Redis 为了兼容 PSYNC 增量复制而启用 backlog。

优化建议:

  • 设置 repl-backlog-size(建议视写入量设置为 10-100MB);
  • INFO replication 监控 backlog 采用情况;
  • 实际处理时,若频繁出现 full sync,需增加 backlog 保留时间或大小。

3.Can’t attach the replica to the current BGSAVE

问题描述:

实际处理时,从服务器请求同步时,无法附着当前的 BGSAVE。

原因分析:

  • 当前 BGSAVE 进程是为其他用途(如定期持久化)触发;
  • Redis 为避免资源冲突,不兼容多个 BGSAVE 同时存在。

优化建议:

  • 减少 save 触发频率,如设置 save 900 1;
  • 增加 CPU 资源,确保 BGSAVE 更快完成;
  • 若频繁发生,可考虑基于 RDB+AOF 混合持久化。

4.Connection with replica lost

问题描述:

主服务器与某从服务器断开连接。

原因分析:

  • 网络波动或中断;
  • 从库重启、压力过高或主动断连;
  • 主从版本不兼容或认证失败。

优化建议:

  • 采用 ping、traceroute 检查主从网络;
  • 设置更宽容的 repl-timeout 60;
  • 从库设置 master-retry-timeout 10 实现更快重连;
  • 检查是否存在频繁 failover 或网络防火墙干预。

5.Replication backlog freed after 3600 seconds without connected replicas

问题描述:

主服务器因无 replica 连入,释放了 backlog 缓冲区。

原因分析:

  • 默认设置 repl-backlog-ttl 3600;
  • Redis 为节省内存释放该 buffer。

优化建议:

  • 调高 repl-backlog-ttl 值,如 repl-backlog-ttl 86400;
  • 确保至少有一个从库长时间连线;
  • 配合采用 replica-priority 0 避免误触 failover。

6.Received SIGTERM scheduling shutdown

问题描述:

理解这一步时,Redis 收到外部系统发出的终止信号(如 kill 或容器销毁)。

原因分析:

  • 用户手动关闭;
  • 系统服务关闭或容器生命周期结束;
  • 外部服务发送了 SIGTERM 信号。

优化建议:

  • 采用 SHUTDOWN 命令而非 kill;
  • 确保应用优雅关闭流程中含数据持久化逻辑;
  • 若为容器场景,设置 stop_grace_period 和 preStop hook。

7.User requested shutdown

问题描述:

用户请求 Redis 正常关闭。

原因分析:

  • 管理员操作;
  • 应用层控制逻辑触发;
  • 测试或升级过程中手动关闭。

优化建议:

  • 采用 SHUTDOWN SAVE 或 SHUTDOWN NOSAVE 控制行为;
  • 手动执行 SAVE/BGSAVE 保证数据完整;
  • 关闭前采用 INFO 检查是否有未完成写入。

8.There is a child saving an .rdb. Killing it!

问题描述:

Redis 正在关闭时,有 BGSAVE 子进程未完成,被强制终止。

原因分析:

  • SIGTERM 到达时有活跃的 RDB 进程;
  • 没有设置足够的 shutdown-timeout。

优化建议:

  • 设置 shutdown-timeout 100(默认值为10);
  • 关闭前先用 INFO persistence 查看 RDB 状态;
  • 若非急迫,等待 BGSAVE 完成再关机。

9.Calling fsync() on the AOF file

问题描述:

关闭前 Redis 执行 fsync 操作,确保 AOF 数据落盘。

原因分析:

  • 确保 AOF 的持久性;
  • 属于正常的关闭流程。

优化建议:

  • 定期执行 BGREWRITEAOF 保持 AOF 文件精简;
  • 检查磁盘写入性能,避免关闭等待过久;
  • 设置合适的 appendfsync 策略,降低关闭时 I/O 压力。

汇总建议

优化方向具体措施
磁盘 I/O 性能实际处理时,采用 SSD,优化 AOF 策略(如 everysec + no-appendfsync-on-rewrite)
设置优化调整 repl-*、appendfsync、save、shutdown-timeout 参数
网络稳定性确保主从连接网络畅通,合理设置 timeout 与重连策略
关闭流程规范统一借助 SHUTDOWN,确保持久化完成
监控与告警借助 INFO 命令和 Prometheus 等工具实时监控持久化与复制状态

如需我帮助生成对应的 redis.conf 优化设置模板、自动化检测脚本或 Prometheus 监控规则,能够继续提问。

V1.0

1.Asynchronous AOF fsync is taking too long (disk is busy?)

分析:

落到代码里,这个警告表明 Redis 的异步 AOF 持久化操作中的 fsync 调用花费了太长时间。这通常是因为磁盘 I/O 繁忙,导致 Redis 无法及时将数据写入磁盘。Redis 选择不等待 fsync 完成,直接写入 AOF 缓冲区,这可能会降低 Redis 的性能。

优化建议:

  • 检查磁盘 I/O 性能:采用 iostat 或 vmstat 等工具监控磁盘 I/O 采用情况,查看是否存在 I/O 瓶颈。
  • 采用更快的存储:考虑采用 SSD 或 NVMe 驱动器,这些存储设备的 I/O 性能通常比传统的机械硬盘要高得多。
  • 调整 fsync 频率:在 redis.conf 文件中,能够调整 appendfsync 设置项。比如,设置 appendfsync everysec 能够每秒调用一次 fsync,而不是每次写操作都调用,这能够减少 I/O 负载。
  • 增加 AOF 缓冲区大小:在 redis.conf 文件中,能够增加 aof-use-rdb-preamble 设置项的值,这能够减少 fsync 的调用次数。

2.Replication backlog created

分析:当有从服务器(replica)请求同步时,Redis 会新建一个复制积压缓冲区(replication backlog)。这个缓冲区用来存储主服务器(master)的写操作,以便从服务器能够同步这些操作。

优化建议:

  • 增加复制积压缓冲区大小:在 redis.conf 文件中,能够增加 repl-backlog-size 设置项的值。默认值通常是 1MB,根据您的需求能够适当增加,比如 repl-backlog-size 1024mb。
  • 监控复制积压缓冲区采用情况:采用 INFO replication 命令监控复制积压缓冲区的采用情况,确保它不会被填满。如果缓冲区被填满,从服务器可能会丢失数据。

3.Can’t attach the replica to the current BGSAVE

分析:这个信息表明 Redis 无法将从服务器附加到当前的后台保存(BGSAVE)进程。BGSAVE 是 Redis 用来新建 RDB 快照的后台进程。从服务器需等待下一个 BGSAVE 进程完成,以便进行同步。

优化建议:

  • 调整 BGSAVE 频率:在 redis.conf 文件中,能够调整 save 设置项,减少 BGSAVE 的频率。比如,设置 save 900 1 表示每15分钟至少有1个键被修改时进行一次 BGSAVE。
  • 优化 RDB 保存过程:确保 Redis 服务器有足够的资源(CPU 和内存)来处理 BGSAVE 进程。如果服务器资源紧张,能够考虑增加资源或优化其他进程。

4.Connection with replica lost

分析:这表示与从服务器的连接丢失了。这可能是由于网络问题或从服务器的故障。

优化建议:

  • 检查网络连接:采用 ping 或 traceroute 等工具检查主从服务器之间的网络连接是否稳定。
  • 增加重试次数:在 redis.conf 文件中,能够增加 repl-timeout 设置项的值,比如 repl-timeout 60,表示重试超时时间为60秒。
  • 设置从服务器的重连策略:在从服务器的 redis.conf 文件中,能够设置 master-retry-timeout 设置项,比如 master-retry-timeout 10,表示从服务器每10秒重试一次连接。

5.Replication backlog freed after 3600 seconds without connected replicas

分析:当没有连接的从服务器超过 3600 秒(1小时)时,Redis 会释放复制积压缓冲区,以节省内存。

优化建议:

  • 调整释放时间:在 redis.conf 文件中,能够调整 repl-backlog-ttl 设置项的值,比如 repl-backlog-ttl 3600,表示复制积压缓冲区在没有连接的从服务器时保持3600秒。
  • 监控从服务器连接:采用 INFO replication 命令监控从服务器的连接情况,确保从服务器能够及时连接同时同步数据。

6.Received SIGTERM scheduling shutdown

分析:这个信息表明 Redis 收到了 SIGTERM 信号,这是一个请求关闭的信号。Redis 计划进行关闭。

优化建议:

  • 优雅关闭:确保在发送 SIGTERM 信号前,所有重要的操作已经完成,比如数据持久化。
  • 采用 SHUTDOWN 命令:如果可能,采用 SHUTDOWN 命令来关闭 Redis 服务器,这能够确保 Redis 优雅地关闭同时完成所有必要的清理工作。

7.User requested shutdown

分析:这表示用户请求关闭 Redis 服务器。

优化建议:

  • 确保数据持久化:在关闭 Redis 服务器前,确保所有数据已经持久化到磁盘。能够采用 BGSAVE 或 SAVE 命令手动触发数据持久化。
  • 监控关闭过程:采用 INFO 命令监控 Redis 服务器的关闭过程,确保没有未完成的操作。

8.There is a child saving an .rdb. Killing it!

分析:在关闭过程中,Redis 发现有一个子进程正在保存 RDB 文件。为了完成关闭,Redis 决定终止这个子进程。

优化建议:

  • 等待 BGSAVE 完成:在发送关闭信号前,确保所有 BGSAVE 进程已经完成。能够采用 INFO persistence 命令监控 BGSAVE 进程的状态。
  • 设置超时时间:在 redis.conf 文件中,能够设置 shutdown-timeout 设置项,比如 shutdown-timeout 100,表示在关闭过程中等待 BGSAVE 进程完成的超时时间为100秒。

9.Calling fsync() on the AOF file

分析:在关闭之前,Redis 调用 fsync() 来确保 AOF 文件的所有数据都被写入磁盘,以保证数据的持久性。

优化建议:

  • 确保 AOF 文件完整性:在关闭 Redis 服务器前,确保 AOF 文件的完整性。能够采用 BGREWRITEAOF 命令优化 AOF 文件。
  • 监控 AOF 文件大小:采用 INFO persistence 命令监控 AOF 文件的大小,确保它不会过大。如果 AOF 文件过大,能够考虑定期进行重写。

总结

  • 监控和优化磁盘 I/O 性能:采用 iostat 或 vmstat 等工具监控磁盘 I/O 采用情况,考虑采用更快的存储设备。
  • 调整设置项:在 redis.conf 文件中,调整 appendfsync、repl-backlog-size、repl-timeout、master-retry-timeout、repl-backlog-ttl、shutdown-timeout 等设置项,以优化 Redis 的性能和稳定性。
  • 监控和维护:定期采用 INFO 命令监控 Redis 服务器的状态,确保所有重要的操作已经完成,数据已经持久化。
  • 网络稳定性:检查主从服务器之间的网络连接,确保网络稳定,减少连接丢失的情况。

实际处理时,借助这些优化建议,您能够提高 Redis 服务器的性能和稳定性,确保数据的持久性和一致性。

从实现思路看,总的来说,Redis主从复制适合结合实际项目边做边理解。先抓住核心思路,再逐步补上细节和边界处理,最后效果会更稳定,也更容易复用。

点击查看更多
推荐专题
热门阅读