Redisのインストール・設定・利用・運用方法
Redisとは
RedisとはKey value型のメモリ型データベース。
SQL文とそれに対応する結果を保存して、SQLにWebアプリが問合せする代わりにRedisに問合せさせる事で、システムのレスポンスタイムの高速化に役立つ。
なお、その性質上、適切なタイミングでのデータ更新と削除の設計が、アプリケーション側で必要になる。
公式情報
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
みたいなのを作ってみた。
実際ハローワーク+で使用しています。