redis-serverコマンドで立ち上げるのでなく、常に裏っかわでredisが起動した状態にして、別に作成したwebサーバ用のインスタンスからredisサーバに疎通させようと考えているため、redisのdaemonizeを行います。
redisのdaemonizeを行うためには、起動時に読み込むredis.confの設定をいじります。
ついでにログの吐き出し先とかも変えてしまいます。
前回インストールしたredisが /usr/local/redisのディレクトリにあるとして、
/usr/local/redis/redis.confが設定ファイルなのですが、以下の設定を変えていきます
1:daemonizeするかどうか
daemonize no ➡ daemonize yes
2: ログファイル吐き出し先
logfile "" ➡ logfile /var/log/redis.log
3: クライアントのタイムアウト
timeout 0 ➡ timeout 30 #30秒何もしなかったらタイムアウト
4: bind設定 同一ネットワーク内のwebサーバ(10.0.1.10に設定)からのみ受け付ける
#bind 127.0.0.1 ➡ bind 10.0.1.10
他にもいろいろ設定があるのですが、いちおう軽く疎通が出来る状態にするため、これくらいやっとけばよいでしょう。
あとは、本筋とはずれるのですが、
linuxの設定で、実メモリ以上にメモリをプロセスに割り当てれるようにするオーバーコミットを有効にするため、sysctlコマンドで現在の状態を確認します
[ec2-user@ip-10-0-1-10 ~]$ sysctl vm.overcommit_memory
vm.overcommit_memory = 0
こんな感じでvm.overcommit_memory = 0 という値が返ってきます。
この値がどんな値かというと、man コマンドで
man 5 proc
This file contains the kernel virtual memory accounting mode. Values are:
0: heuristic overcommit (this is the default)
1: always overcommit, never check
2: always check, never overcommit
In mode 0, calls of mmap(2) with MAP_NORESERVE are not checked, and the default check
is very weak, leading to the risk of getting a process "OOM-killed". Under Linux 2.4
any non-zero value implies mode 1. In mode 2 (available since Linux 2.6), the total
virtual address space on the system is limited to (SS + RAM*(r/100)), where SS is the
size of the swap space, and RAM is the size of the physical memory, and r is the con‐
いろいろ調べてみると、これが0のときは、オーバーコミットが有効だけど実際に利用可能なメモリの大きさまでしか一回のmallocで確保できなくて、
(参考)
このあたりの深い理解は仮想メモリに関する理解が必要そうなのでまた今後時間があったら取り上げたいですが、先に進んで、今回はこの値を1に変更します。
vm.overcommit_memory = 1
これでオーバーコミット設定完了です。
この後、/usr/local/redis/utils/redis_init_script という、デーモン起動用のスクリプトがあるので、これを /etc/init.d/redisにコピーします
cp -pi utils/redis_init_script /etc/init.d/redis
配置したら、この/etc/init.d/redisファイルの仲の設定ファイルの置き場所と、pidファイルの場所を修正します
vim /etc/init.d/redis
PIDFILE=/var/run/redis.pid
CONF="/usr/local/redis/redis.conf" #起動時にこのファイルの設定を読み出して起動する
これで修正完了なので、あとはデーモン起動させて完了です。
[ec2-user@ip-10-0-2-10 etc]$ sudo /etc/init.d/redis start
Starting Redis server...
たまにこれがでても実際にwebサーバーから疎通ができないときがありますが、その際は
上記で設定したログファイルを確認してその都度対処すればオッケーです
/var/log/redis.log