memcacheの"怪"にチューニングと復旧で立ち向かった話
見出し画像

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_)が綴らせて頂きました。

スキを頂きありがとうございます!是非SNSでシェア頂けますと幸いです!
ソーシャルゲームアプリ開発・運営を行う株式会社ダンクハーツのメンバーが、自身が持つ技術/スキル/知識を発信していきます📝 ダンクハーツに集う“原動力たち”を知って頂ける機会となれば幸いです✨ https://www.dank-hearts.co.jp/recruit/