redisサーバー構築メモ
はじめに
今回は、そこそこリクエストがあるサービスを担当させてもらえることになりました。 複数のWebサーバーを使用する必要があり、複数のWebサーバーでもsessionを共有できるようにredisをセッションストレージとして使用することにしました。
構成はセッションストレージ部分は下記のようになっており、WebへはLBによって振り分け られるようになっております。
今回は、redisサーバーの構築から連携まで初めてだったので、今後のことも踏まえてメモしておく事にしました。
環境構築
redis のインストール
はじめにredisのインストールです。 今回はCentOS 6で環境を構築しました。 様々なブログを拝見するとソースをダウンロードして自前でビルドしている記事が多かったですが yum でインストールしました。
$ sudo yum --enablerepo=epel install redis
インストールが無事終了すると
/etc/init.d/redis が追加されていると思います。
redis の起動
インストールが終わったので redis を起動してみます。
$ sudo /etc/init.d/redis start
問題なく起動されると思います。 起動できたら本当にredisサーバーが動いているか確認します。
redis の動作確認
確認はredisのインストール時に一緒にインストールされる redis client を使用しました。
$ redis-cli redis 127.0.0.1:6379> set hoge 'foo' OK redis 127.0.0.1:6379> get hoge "foo"
ここまでの手順を redis01/master, redis02/slave で行い両方でど redis サーバーの動作確認を行います。
redisサーバーの連携
問題なく接続できることが確認できたらslaveのサーバーからmasterのサーバーへ接続できることを確認します。
接続確認
redis client にはホストを指定できるオプションがあるので redis client を使って接続の確認を行います。
$ redis-cli -h <接続先のホスト> Could not connect to Redis at konboi.com:6379: Connection refused not connected>
おそらく初期設定のままならば接続できないと思います。
設定の編集 その1
まずは slave からmasterへ接続できるように設定を編集します。
redis.の設定ファイルは /etc/redis.conf
になります。
念のためもとの設定ファイルをコピーし設定を編集します。
$ cp /etc/redis.conf /etc/redis.conf.backup $ sudo vi /etc/redis.conf
# /etc/redis.conf .... - bind 127.0.0.1 + bind 0.0.0.0 ...
bind 0.0.0.0 にすることでどのサーバーからも接続できるようになっています。 サーバーの構成的にこのままではセキュリティ的にまうずい場合は、 iptables で設定するか bind に接続するサーバーをそれぞれ記入します。
編集が終わったら
$ /etc/init.d/redis restart
これで編集が反映され
$ redis-cli -h <接続先のホスト>
で接続できるようになります。
設定の編集 その2
master - slave間の接続が確認できたらslaveの設定を行います。 slaveにするサーバー側に下記を設定します。
# /etc/redis.con ... # slaveof <masterip> <masterport> slaveof <masterにするサーバーのIP> <masterで動いているredisのポート> ...
設定後、再起動します。 設定が反映されいているか、確認します。
# slave側 $ redis-cli redis 127.0.0.1:6379> INFO ... role:slave ... #master側 $ redis-cli redis 127.0.0.1:6379> INFO ... role:master ...
このように slave側で role:slave, master側で role:master になっていれば大丈夫です。
以上になります。
まとめ
slave側からmaster側に接続しに行く時にbindが 127.0.0.0 のままで接続できなくてハマってしまった。
思ったより master, slaveの設定が簡単だった。 実際運用してみないと何ともいえないけど設定的な意味では。