#はじめに
大学を卒業し、エンジニアになってから二年半ほどが経ちました。
サーバーエンジニアとして仕事をしてきて、
まぁまぁやらかして
まぁまぁ大変だったRedisの話をしようと思います。
やらかし
スレーブ遅延をおこしました
アクセス障害:(´◦_◦`):
はい。
redis-cli keys "*"
なにをしたか
本番のスレーブサーバで、keysをたたきました。
keysは登録されているキーの一覧を取得するコマンドです。
本番のサービスを運用中にこれをやると、キーの数が多すぎて遅延を起こしてしまいます。
きっとその時はこんな軽い気持ちで叩いたに違いない
- お問合せの調査で、とあるランキングをみたいなぁ
- ランキングはRedisか、キーがわからん
- 開発サーバーだとキー名ちょっと違うしどうしよう
- スレーブならKeys叩いても大丈夫か
そう、こんな感じです。
ダメです。ちなみに二回くらいやりました。すみませんでした。
どうしたの?
それからは、キーの調査はこのようにやってます
- 開発サーバーで似たキーを探す
redis-cli keys "*SeasonEvent*"
- 本番サーバー固有の文字列があれば、それを確認する
redis-cli scan 0
とか
redis-cli monitor
-
こうすればkeysをたたかなくてもキーを特定できる!!
-
あとは特定したキーでランキングの中身をみるだけ!
容量削減
発生した問題
Redisサーバー仕様メモリ容量がいっぱいになってきた
なにをしたか
不要なキーを洗い出して、削除した
一定期間が過ぎると不要になるデータを消込するBatchを作成した
ソース内で、TTLの効果時間を設定してるとこを短くした
- 不要なキーとは?
過去のランキングイベントのデータ
一時的なランキングのデータ
一時的なキャッシュデータ
など...
調査方法
モニターで確認してみる
redis-cli monitor
スキャンで見てみる
redis-cli scan 0
TTLが効いてるか見てみる
redis-cli ttl key名
最終的には、メンテナンス中に全部のキーリストをTextファイルに書き出しました。
個人的には、書き出したあとSCPコマンドで開発サーバーや自分のローカルに落としてきて、サーバーには残さないのが良いと思います。
結論
不要なデータが残ってないか、どう減らすか、残さないか、につきると思います。
開発したときに、将来ごみになりそうだから消込用のBatchを作っておこう。
といった気づかいができると、僕のような新人や後輩が悩むことがなくなると思います。
おまけ
redis-cli keys "*" > /tmp/redisKeys.txt
scp [オプション] コピー元 コピー先
結局これでローカルで見るのが一番楽でした。(すべて確認できるので)