Redis如何处理只读文件系统引发的崩溃_在持久化失败时利用stop-writes-on-bgsave-error停写保护

张开发
2026/4/11 3:05:40 15 分钟阅读

分享文章

Redis如何处理只读文件系统引发的崩溃_在持久化失败时利用stop-writes-on-bgsave-error停写保护
Redis 持久化失败时崩溃本质是只读文件系统叠加配置限制所致并非 bgsave 失败直接触发默认 stop-writes-on-bgsave-error yes 会拒绝写入但不退出仅当 AOF 重写也失败且磁盘彻底只读时才主动退出。Redis 持久化失败时为什么直接崩溃而不是降级因为 bgsave 失败本身不触发崩溃真正让 Redis 退出的是后续写入——当 stop-writes-on-bgsave-error yes默认且上一次 bgsave 出错后任何写命令都会被拒绝并返回错误但进程仍在运行只有当你同时启用了 appendonly yes 且 aof-rewrite 也失败、再叠加磁盘彻底只读比如挂载为 ro才可能观察到 Redis 主动退出。常见现象是日志里反复出现 Cant save in background: fork: Cannot allocate memory 或 Failed to open the temp AOF file: Permission denied接着写请求全返回 ERR Error: write commands not allowed when used with read-only filesystem。如何确认是不是只读文件系统导致的持久化失败别猜直接查三件事运行 mount | grep $(dirname $(redis-cli config get dir | awk {print $2}))看输出里有没有 ro检查 dir 配置路径的权限ls -ld code/var/lib/redis确认 Redis 进程 uid通常是 redis有写权限手动模拟写入sudo -u redis touch /var/lib/redis/test-write如果报 Read-only file system就是它了stop-writes-on-bgsave-error 设为 no 真的安全吗不安全只是把问题藏得更深。设为 no 后即使 bgsave 连续失败十次Redis 仍允许写入RDB 文件却一直没更新。一旦重启数据就倒退回上次成功的快照——你可能丢了最近几小时的变更。更麻烦的是AOF 如果也因同个只读路径失败appendfsync always 会卡住写入线程导致响应延迟飙升。所以这不是“开关一关就没事”而是“从立刻报警变成静默丢数据”。 唱鸭 音乐创作全流程的AI自动作曲工具集 AI 辅助作词、AI 自动作曲、编曲、混音于一体

更多文章