くりにっき

フルスタックキュアエンジニアです

apt-get install したredis-serverの設定ファイルが危なかった事案

事の発端

  1. capistrano taskのテストのためステージング環境のredisを再起動する
  2. redisに保存してた値が初期化される
  3. ファッ !?

redisはmemcacheと違い永続化してるため、再起動してもデータが消えることはないはず。。。

環境

$ cat /etc/debian_version
7.1

$ redis-server --version
Redis server version 2.4.14 (00000000:0)

調べてみた

$ sudo head /var/log/redis/redis-server.log
[2564] 05 Jan 06:25:14 * 1 changes in 900 seconds. Saving...
[2564] 05 Jan 06:25:21 * Background saving started by pid 13069
[13069] 05 Jan 06:25:21 # Failed saving the DB: No such file or directory
[2564] 05 Jan 06:25:21 # Background saving error
[2564] 05 Jan 06:25:21 * 1 changes in 900 seconds. Saving...
[2564] 05 Jan 06:25:21 * Background saving started by pid 13071
[13071] 05 Jan 06:25:21 # Failed saving the DB: No such file or directory

$ sudo ls -l  /var/log/redis/redis-server.log
-rw-rw---- 1 redis redis 376820356  19 12:28 /var/log/redis/redis-server.log

こんなログが大量に出てた(;´Д`)

1/5 6:25頃に作業した記憶はないので、この時間にメモリが溢れてディスクに保存しようとした段階で初めてエラーになってた模様。

原因は/etc/redis/redis.conf がおかしかったかららしい

# △
dir /var/lib/redis

# ◯
dir /var/lib/redis/

社内のインフラの人に詳しく調べてもらいましたが

  • CentOS release 5.9
  • redis-2.4.10-3

の組み合わせで dir /var/lib/redis でもちゃんと永続化できていたとのこと。他のミドルとかも関連してるんだろうか。。。

ちなみに本番環境はインフラチームが構築した時のrpmにconfigが入ってるため問題なし。*1

今回は開発環境ってことで全部自分で構築してましたが、まさかデフォルトの設定ファイルが原因だったとは思わなかった。しかもステージング環境は本番に比べたらそんなに動かさないので、バグが発覚するのに1ヶ月以上かかりました。

感想

本番環境じゃなくて本当によかった

*1:開発環境はDebianだけど本番はCentOS