VPS

Redisのインストール・設定・利用・運用方法

Redisとは

RedisとはKey value型のメモリ型データベース。
SQL文とそれに対応する結果を保存して、SQLにWebアプリが問合せする代わりにRedisに問合せさせる事で、システムのレスポンスタイムの高速化に役立つ。
なお、その性質上、適切なタイミングでのデータ更新と削除の設計が、アプリケーション側で必要になる。

公式情報

  1. 公式サイト

Redisの情報

デフォルトでは6379のポートで動いている

インストール

OSのDistribution付属のを使うのならば、例えばCentOS系の場合は

dnf install -y redis;
systemctl enable redis;
systemctl start redis;

ソースコードからインストールする場合には、公式サイトのダウンロードの手順を参照して頂ければですが、例えば以下のような感じでインストールできます。

VERSION=6.0.9;
wget https://download.redis.io/releases/redis-$VERSION.tar.gz;
tar xzf redis-$VERSION.tar.gz;
cd redis-$VERSION;
make;
make install;
redis-server --version

でバージョンを確認

セキュリティ設定

そのままではローカルからしかアクセスできないので
/etc/redis.conf
を編集して

#bind 127.0.0.1
bind 0.0.0.0

と変更し

systemctl restart redis

で反映

なお、そのままではパスワードなしでログインできてしまうので、パスワード必須にするか、firewallで制御する。

自分は処理時間を考え、firewallで解決している。

安定稼働の為の設定

somaxconn

cat /proc/sys/net/core/somaxconn

と打って、その値が512より小さければ

echo 512 > /proc/sys/net/core/somaxconn

と打って、値を512にセットする

overcommit_memory

if ! grep 'vm.overcommit_memory' /etc/sysctl.conf; then
  echo 'vm.overcommit_memory = 1' >> /etc/sysctl.d/redis.conf;
  sysctl -p;
fi

transparent_hugepageを無効に

if ! grep transparent_hugepage /etc/rc.local; then
  echo 'echo never >> /sys/kernel/mm/transparent_hugepage/enabled' > /etc/rc.local;
fi

dumpファイルが要らない場合&/var/lib/redist/以下のファイルでディスク容量が100%になってしまう場合

dumpファイルが要らなく、ディスク容量が100%になってしまう問題を避ける為には、dumpファイルの生成を止めさせましょう。

/etc/redis.conf
を以下の様に編集し

save ""
# save 900 1
# i save 300 10
# save 60 10000

それからredisサーバーを

systemctl restart redis;

で再起動させて反映させます。

最後の処理(Redisの再起動)

config系ファイルへの反映後は、当然

systemctl restart redis;

でredisを再起動

問題がないか起動ログを

tail -n 200 /var/log/redis/redis.log

で確認

稼働状況の確認

統計・設定的なデータを見たければ

redis-cli info

メモリーの利用状況だけ見たければ

redis-cli info|grep used_memory

と絞り込んでみる

利用状況をリアルタイムにモニタリングしたければ

redis-cli monitor;

と打つ。
実際にサイトにアクセスをしてみると、Redisを使う処理のページを見たら、ログが流れてくる

Redisのシステム運用強化

1分毎の起動

理由は兎も角、想定外にも落ちてしまうことへの対応として、cronに1分毎に起動させるコマンドを書いておく

sudo crontab -e

と打ってcron(定期処理)ファイルを編集

* * * * * systemctl start redis;

と書いておく

Redisのトラブルシューティング

Redisが落ちてた原因の調査

 grep -v 'DB saved on disk' /var/log/redis/redis.log|grep -v 'with success'|grep -v 'saving started'|grep -v 'Saving...'|grep -v 'memory used by'

と打って、落ちた時間あたりの怪しい部分を見つける

そもそもRedisが落ちてもWebアプリが動くようにする

Redisが落ちていたらファイルをキャッシュとして使う等Fallbackを組み込む。
Webフレームワークによって、それに対応するプラグインが既に作られたりするので、そこをググって探してみる。

因みにLaravelの場合、古い版に対応して動くのはあったのですが、Laravel 8対応&タグ対応しているのがなかったので
https://github.com/hikarine3/laravel-redis-fallback
みたいなのを作ってみた。

実際ハローワーク+で使用しています。