Redis 自发失败:“无法打开 .rdb 进行保存:权限被拒绝”

whu*_*erj 2 redis ubuntu-14.04

我在 Rackspace 云服务器中的 Ubuntu 14.04 上运行 redis-server(版本 2.8.4)。redis-server 进程由 redis 用户运行。

今天一大早,Redis 服务器自发地开始“打开 .rdb 进行保存”失败。这发生在该过程已经运行了 20 多天没有发生任何事故之后。

正如您在下面的日志片段中看到的那样,Redis 运行正常,然后在世界标准时间上午 8 点 08 分左右开始出现故障。后来重启服务器解决了这个问题。

[26083] 31 Aug 07:54:47.089 * RDB: 2 MB of memory used by copy-on-write
[17183] 31 Aug 07:54:47.186 * Background saving terminated with success
[17183] 31 Aug 07:59:48.028 * 10 changes in 300 seconds. Saving...
[17183] 31 Aug 07:59:48.029 * Background saving started by pid 26653
[26653] 31 Aug 07:59:48.032 * DB saved on disk
[26653] 31 Aug 07:59:48.032 * RDB: 2 MB of memory used by copy-on-write
[17183] 31 Aug 07:59:48.129 * Background saving terminated with success
[17183] 31 Aug 08:04:49.061 * 10 changes in 300 seconds. Saving...
[17183] 31 Aug 08:04:49.061 * Background saving started by pid 27197
[27197] 31 Aug 08:04:49.064 * DB saved on disk
[27197] 31 Aug 08:04:49.065 * RDB: 2 MB of memory used by copy-on-write
[17183] 31 Aug 08:04:49.162 * Background saving terminated with success
[17183] 31 Aug 08:07:56.881 * DB saved on disk
[17183] 31 Aug 08:08:05.880 # Failed opening .rdb for saving: Permission denied
[17183] 31 Aug 08:12:57.047 * 10 changes in 300 seconds. Saving...
[17183] 31 Aug 08:12:57.047 * Background saving started by pid 28087
[28087] 31 Aug 08:12:57.048 # Failed opening .rdb for saving: Permission denied
[17183] 31 Aug 08:12:57.148 # Background saving error
[17183] 31 Aug 08:13:03.068 * 10 changes in 300 seconds. Saving...
[17183] 31 Aug 08:13:03.069 * Background saving started by pid 28088
[28088] 31 Aug 08:13:03.070 # Failed opening .rdb for saving: Permission denied
[17183] 31 Aug 08:13:03.169 # Background saving error
[17183] 31 Aug 08:13:09.087 * 10 changes in 300 seconds. Saving...
[17183] 31 Aug 08:13:09.087 * Background saving started by pid 28089
[28089] 31 Aug 08:13:09.088 # Failed opening .rdb for saving: Permission denied
(... continues like this until server restart)
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是:这怎么会发生?

我很难过,但这是我模糊的预感:

  • 内存使用过高(我只运行一个 512MB 的实例,Redis 警告我在 /etc/sysctl.conf 中设置“vm.overcommit_memory = 1”)
  • Redis 在连续运行 20 天后达到某种内部限制(因此这种情况将在大约 20 天后再次发生)。
  • Rackspace 在世界标准时间早上 8 点(东部时间凌晨 4 点)做了一些事情,以某种方式影响了我的服务器。

小智 11

运行redis-cli并查看输出CONFIG GET dbfilenameCONFIG GET dir

我有一种感觉,那些可能已经改变了。值应该分别是dump.rdb和 类似的东西/var/lib/redis

如果它们发生了变化,则有人破坏了您的 redis 服务器。如果是这种情况,请检查您的 redis 服务是否向公众开放。您应该无法从外部 IP 连接到它。

  • 我相信这是在这种情况下的正确答案。基于这样的讨论,我得出了相同的结论:https://meta.discourse.org/t/losing-connection-with-redis/36343——似乎可以远程利用 Redis 进行临时更改,然后恢复重新开始。当然,它也可以被利用来做比这更糟糕的事情。发生这种情况时,端口 6379 确实对 Internet 开放,而且本不应该如此。谢谢你的帮助! (2认同)