广告位联系
返回顶部

Redis主从复制连接丢失怎么解决?排查网络与配置的介绍

Redis 来源:互联网 作者:佚名 发布时间:2026-11-10 21:45:51 人浏览
摘要

V2.0 以下是对 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 服务器的性能和稳定性,确保数据的持久性和一致性。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计