
memcacheの"怪"にチューニングと復旧で立ち向かった話
こんにちは。エンジニアのふるやです🙃
今回は memcacheの"怪"にチューニングと復旧で立ち向かった話 について、綴らせていただきます。
経緯
memcacheに保存しているデータについて、
有効期限に達していないにも関わらず消滅する現象があった。
状況確認
memcacheの設定を確認すると、全て初期設定だった
・使用するメモリが64MB(要件的に控えめに言ってヤバい)
$ vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
memcache の stats を確認すると、evictions の値がなんと 1000万超え
$ telnet localhost 11211
stats
STAT evictions 14274863
推測
使用メモリがいっぱいになる → 古いものが削除される
のループになっている?
方針
memcache上に消えるとヤバいデータがあるとのこと(何)なので、
memcacheのダンプを取得 ⇒ 設定変更 ⇒ ダンプをインポート
の流れで進める。
対応内容
1. サービスのメンテナンスを開始する
※ユーザーからのアクセスが遮断されたことを確認する
2. memcache のダンプデータを取得する
$ memcached-tool localhost:11211 dump > 20210901.dump
3. 設定を変更する
MAXCONN を 現状の10倍に変更する
CACHESIZE を マシンのメモリ(8GB)の7割に変更する
※この設定で問題があれば随時チューニングする
$ vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="10240"
CACHESIZE="11000"
OPTIONS=""
4. memcachedを再起動する
$ systemctl restart memcached
5. ダンプをインポートする
※実行に必要なパッケージ nmap-ncat
$ yum -y install nmap-ncat
$ nc --version
$ cat 20210901.dump | nc localhost 11211
6. 動作検証する
7. 問題なければ、サービスのメンテナンスを終了する
8. しばらくして、memcacheのstatsを再度確認する
※evictions が 0 なら問題ない
まとめ
キャッシュに消えたら困るデータを保存する設計はダメ、ゼッタイ。
以上、エンジニアのふるや(@h_furuya_)が綴らせていただきました。