我最近因为 bgsave/save 无法正常工作而丢失了数据(它挂断了,总是显示“ERR Background save already in progress”错误消息)
这是我的 redis info 命令的服务器部分:
# Server
redis_version:2.8.19
redis_git_sha1:00000000
redis_git_dirty:0
redis_build_id:9968db13395be4aa
redis_mode:standalone
os:Windows
arch_bits:64
multiplexing_api:winsock_IOCP
gcc_version:0.0.0
process_id:5968
run_id:3cf27bdbead6bc8d37d9eb8e0de5eb7898b72ede
tcp_port:6379
uptime_in_seconds:883
uptime_in_days:0
hz:10
lru_clock:11936623
config_file:C:\Program Files\Redis\redis_store.conf
这些是我的快照设置:
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename store.rdb
dir ./
该服务器还充当主角色。(不知道这是否相关 - 但是:当 bgsave 挂断时,复制似乎在同一点停止)
我正在运行 redis 作为服务。问题似乎是最近服务因(对我来说)未知原因崩溃时开始的:
我已激活自动恢复功能(服务崩溃后自动重新启动)。
从那时起,redis 停止了快照(我可以从备份文件的时间戳中看到这一点)。
我的问题是:
- 有人在 Windows 上遇到过 redis 崩溃的情况吗?
- 如果是这样,可能是什么原因(除了硬件限制 - 我已经检查过了)?
- 我该怎么做才能防止 bgsave 死亡(防止任何进一步的快照),配置设置“stop-writes-on-bgsave-error no”有帮助吗?
- 如果 bgsave/save 不起作用,还有其他选项可以保存数据吗?
遗憾的是,我没有“挂断”状态的信息,因为我不得不由于恢复尝试失败而重新启动服务(我尝试通过 lua 脚本将密钥迁移到新的 redis db - 但这锁定了我的服务)
答案1
回答我自己的问题:
看来崩溃是由于服务器配置错误造成的。系统页面文件不够大。因此我降低了 maxmemory 参数的值 - 现在问题似乎已经解决了。