AWS EC2インスタンスの Amazon Linux 2 で Redis をインストールしたんだけど、うまくいかなかったのでメモ。
Extras Library を確認したところ、redis6 が使える模様。(2021/10/20現在)
1 2 |
amazon-linux-extras | grep redis 56 redis6 available [ =stable ] |
次のようにして、redisをインストールします。
1 2 3 |
amazon-linux-extras enable redis6 yum clean metadata yum install redis |
同一インスタンス内で、php から redis を使うつもりだったので、Socket通信でやってみようと思ったわけです。他から接続することもないし。
そのおかげで久しぶりにハマった。
/etc/redis/redis.confで以下の2行だけコメントを外しました。
1 2 |
unixsocket /run/redis.sock unixsocketperm 700 |
設定変更したら、systemctl で起動できるか試す。
1 2 |
systemctl start redis Job for redis.service failed because the control process exited with error code. See "systemctl status redis.service" and "journalctl -xe" for details. |
はいっ!動きませんでしたー。
メッセージに従って、systemctl status redis.service やら journalctl -xe やら見たけどわからない。ググっても日本語で socket通信している事例がほとんどない。
関係しそうな項目を片っ端から変えてみたけどダメ。
で、初心に帰って、パーミッションを疑ってみた。
変更したのは2行だけ。しかも、パスが書いてあるのは1行だけ。
redis はユーザーもグループも redis で起動するみたい。
/run 直下に redis.sock なんて書けないかもね。
ls -lt /run で確認してみたら、 /run/redis フォルダがあった。
1 2 3 4 |
ls -tl /run total 44 drwxr-xr-x 2 redis redis 6 Oct 20 17:01 redis ※以下省略 |
しかも、ちゃんとredis ユーザーで書けるようになってた。
/etc/redis/redis.confでパスを変更してみた。
1 |
unixsocket /run/redis/redis.sock |
で、改めて起動してみる。
1 |
systemctl start redis |
動いたー!
まさか、コメントになっているパスが違っているとは思いもせず、久しぶりにハマってしまった。
一応動作確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
redis-cli -s /run/redis/redis.sock redis /run/redis/redis.sock> help redis-cli 6.2.6 To get help about Redis commands type: "help @<group>" to get a list of commands in <group> "help <command>" for help on <command> "help <tab>" to get a list of possible help topics "quit" to exit To set redis-cli preferences: ":set hints" enable online hints ":set nohints" disable online hints Set your preferences in ~/.redisclirc redis /run/redis/redis.sock> |
socketでちゃんと接続できました。