質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • Ruby

    8957questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    8376questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Ruby on Rails 4

    2520questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

  • AWS(Amazon Web Services)

    2414questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

[Ruby On Rails]MISCONF Redis is configured to save RDB snapshotsを解消する方法を知りたい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 115

r_dual

score 83

おそらくcapistranoでデプロイしてから、サイトからzipファイルをダウンロードする際に以下のエラーが出るようになりました。

エラーメッセージ全文

MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

環境

macOS High Sierra(バージョン10.13.6)
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-darwin17]
Rails 4.2.6

試したこと

/usr/local/redis-3.2.5/redis.confには以下の設定がされていました。

# /usr/local/redis-3.2.5/redis.conf
bind 127.0.0.1
protected-mode yes
port 6379
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize no
supervised no
pidfile /var/run/redis_6379.pid
loglevel notice
logfile ""
databases 16
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir ./
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
aof-rewrite-incremental-fsync yes
# /etc/redis/6379.conf

bind 127.0.0.1
protected-mode yes
tcp-backlog 511
timeout 0
tcp-keepalive 300
daemonize yes
supervised no
pidfile redis_6379.pid
loglevel notice
logfile "/var/log/redis/6379.log"
databases 16
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
dir /var/run/redis
slave-serve-stale-data yes
slave-read-only yes
repl-diskless-sync no
repl-diskless-sync-delay 5
repl-disable-tcp-nodelay no
slave-priority 100
appendonly no
appendfilename "appendonly.aof"
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
aof-load-truncated yes
lua-time-limit 5000
slowlog-log-slower-than 10000
slowlog-max-len 128
latency-monitor-threshold 0
notify-keyspace-events ""
hash-max-ziplist-entries 512
hash-max-ziplist-value 64
list-max-ziplist-size -2
list-compress-depth 0
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
hll-sparse-max-bytes 3000
activerehashing yes
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit slave 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60
hz 10
aof-rewrite-incremental-fsync yes

pidfile に設定されていた/var/run/redis_6379.pidは存在しませんでした。これが原因なのでしょうか。

またredis-cliからinfoを打つと、以下のように返ってきました。

Memory
used_memory:764200
used_memory_human:746.29K
used_memory_rss:4902912
used_memory_rss_human:4.68M
used_memory_peak:2360784
used_memory_peak_human:2.25M
total_system_memory:4145164288
total_system_memory_human:3.86G
used_memory_lua:37888
used_memory_lua_human:37.00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:6.42
mem_allocator:jemalloc-4.0.3

Persistence
loading:0
rdb_changes_since_last_save:618
rdb_bgsave_in_progress:0
rdb_last_save_time:1546658955
rdb_last_bgsave_status:err
rdb_last_bgsave_time_sec:0
rdb_current_bgsave_time_sec:-1
aof_enabled:0
aof_rewrite_in_progress:0
aof_rewrite_scheduled:0
aof_last_rewrite_time_sec:-1
aof_current_rewrite_time_sec:-1
aof_last_bgrewrite_status:ok
aof_last_write_status:ok


CPU
used_cpu_sys:433.97
used_cpu_user:525.88
used_cpu_sys_children:0.00
used_cpu_user_children:0.00

おそらくメモリの容量には問題がないので、rdbファイルを設置するディレクトリの権限がない原因なのだと思うのですが、
どのようにdirディレクトリに書き込めるように権限調整を行うのかがわかりません。
redis-cliからCONFIG SET dir /path/to/ディレクトリ でできると思うのですが、どこのディレクトリを指定すればいいのかわかりません。

# 6379.log(redisのログ  1/7現在の最新)
17083:signal-handler (1545990806) Received SIGTERM scheduling shutdown...
17083:M 28 Dec 09:53:26.654 # User requested shutdown...
17083:M 28 Dec 09:53:26.654 * Saving the final RDB snapshot before exiting.
17083:M 28 Dec 09:53:26.704 * DB saved on disk
17083:M 28 Dec 09:53:26.704 * Removing the pid file.
17083:M 28 Dec 09:53:26.704 # Redis is now ready to exit, bye bye...
2180:M 05 Jan 08:19:50.287 * Increased maximum number of open files to 10032 (it was originally set to 1024).
2180:M 05 Jan 08:19:50.287 # Creating Server TCP listening socket 127.0.0.1:6379: bind: Address already in use
#ps -ef | grep redisの結果

501       3407     1  0  2018 ?        00:19:52 redis-server *:6379
501       8854  8123  0 01:20 pts/1    00:00:00 grep --color=auto redis

追記

redis-cliからconfig set stop-writes-on-bgsave-error noというコマンドを打ってみると、機能を使えるようになりました。
ただ、これはあくまでも一時的な対処法ということで、他の方法をとってみましたがどれもうまくいきません。

試したこと

  1. sudo vi /etc/sysctl.confでvm.overcommit_memory=1 を追加後sudo sysctl -p /etc/sysctl.confでreload

  2. redis-cliでCONFIG SET dbfilename dump.rdbを打つ

  3. redis-cliでconfig set dir /var/run/redis

  4. /usr/local/redis-3.2.5/redis.confのdir ./ の部分をdir /var/run/redis

  5. sudo chkconfig --add redisとsudo chkconfig redis on

  6. sudo vim /etc/redis/6379.confでpidfile /var/run/redis_6379.pid → redis_6379.pidに変更

  7. sudo /etc/init.d/redis restart

  8. redis-cliから
    ・ config set stop-writes-on-bgsave-error no
    ・ FLUSHALL
    ・ config set stop-writes-on-bgsave-error yes

実現したいこと

エラーを修正して、サイト内で実行できなくなった機能を復旧したいです。
何かご教示いただけることがあれば何卒よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • r_dual

    2019/01/07 09:54 編集

    zipファイルのダウンロードを行ってからredisのログを確認したのですが、上記の通りでした。
    /var/log/redis/6379.logをコピーしたのですが見ているログファイルが間違っているのでしょうか。

    キャンセル

  • moonphase

    2019/01/07 10:19

    特にエラーログには何も出力されていないようですね。『ps -ef | grep redis』の結果を質問に追記いただけますでしょうか。

    キャンセル

  • r_dual

    2019/01/07 10:39

    ご指摘の通り追記させていただきました。
    redis-cliからconfig set stop-writes-on-bgsave-error noのコマンドを打ってみたところ、機能が使えるようになったのですが、これはあまり良くない対処法ということが書いてありました。
    そこで様々な方法を試してみましたがうまくいきませんでした。試した方法については追記しています。
    どのような対処法をとればいいのでしょうか。

    キャンセル

回答 1

checkベストアンサー

+1

以下の質問に回答します。

>redis-cliからCONFIG SET dir /path/to/ディレクトリ でできると思うのですが、どこのディレクトリを指定すればいいのかわかりません。

redis.confではdir ./のように相対パス設定されているので、redisのカレントワーキングディレクトリを調べる必要があります。

PROCファイルシステムからredisのCWDを調べる。

$ ls -l /proc/3407/cwd
以下のような出力となります。
lrwxrwxrwx 1 redis redis 0  1月  7 01:32 /proc/3407/cwd -> /

このLINK先のパスがredisのCWDとなります。
このディレクトリの権限をUID 501による書き込みを可能にしてあげると良いかもしれません。

追記

権限の変更は以下で行います。

$ sudo mkdir /var/run/redis
※このコマンドは/var/run/redisが存在しない場合に実行する。存在している時に実行しても問題はない

以下のコマンドで/var/run/redisのオーナー、グループを変更する。mycompanyは実際のユーザー、グループに変更してください。
$ sudo chown mycompany:mycompany /var/run/redis

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/07 10:43 編集

    ご回答有難うございます。
    ご指摘のコマンドを打ったところ、
    lrwxrwxrwx 1 mycompany mycompany 0 1月 5 05:16 /proc/3407/cwd -> /var/run/redis
    と出力されました。
    ただ、redis-cliでconfig set dir /var/run/redisはすでに試しています。
    試したことを追記しているのですが、何かやってはいけないことをしているのでしょうか?

    キャンセル

  • 2019/01/07 11:03

    7. sudo /etc/init.d/redis start
    これは sudo /etc/init.d/redis restart ではないでしょうか?startしているのでbind: Address already in useになっています

    キャンセル

  • 2019/01/07 11:07

    chownコマンドでディレクトリの権限をUID 501による書き込み可能にすると、zipファイルのダウンロードが行えるようになりました。
    とても助かり、また勉強になりました。本当に有難うございました!

    キャンセル

  • 2019/01/07 11:08

    申し訳ありません。ご指摘の通り、たしかに
    sudo /etc/init.d/redis start は sudo /etc/init.d/redis restartのまちがいです。修正させていただきます。

    キャンセル

同じタグがついた質問を見る

  • Ruby

    8957questions

    Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

  • Ruby on Rails

    8376questions

    Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

  • Ruby on Rails 4

    2520questions

    Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

  • AWS(Amazon Web Services)

    2414questions

    Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。