redis-clusterの構築
redis-clusterとは?
cluster:クラスタ/集合体。 複数のコンピュータが繋がった一塊のことを呼ぶ。
クラスタ化されたコンピュータ群はまとめて1台のコンピュータを 扱うように管理・運用することができ、 1台が障害などで停止してもシステム全体が止まることはなく、 処理を続行したまま修理や交換が行える。
複数台が同時に稼動して並列に処理を行う場合と、 1台が稼動して残りは待機しておき、 障害発生時に即座に待機系に切り替える方式がある。 前者のようなシステムでは接続するコンピュータの台数を増やせば その分システム全体の性能を向上させることができる。
つまりそのredis版、 複数のredisサーバーを合体させたもの。
マスターとその情報を共有したスレーヴに分かれ、 なんらかの障害でマスターが落ちてもスレーブがマスターに昇格し その代行をすることによってある程度のノードが死んでもクラスタ の稼動が継続できる。
通常のredisと違って単一の database 0 しかなく、 SELECT コマンドは利用不可になっている。
必要なもの
(redisサーバーをインストールした)サーバー*6( 最低3台でクラスターが構築可能だが、 冗長性の確保のためにスレーブが必要なので6台以上が推奨されて いる)
1.redisのインストール+サーバーのセットアップ
# cd /usr/local/src
# wget http://download.redis.io/ releases/redis-4.0.2.tar.gz //今の最新版は4.0.2
# tar xzf redis-4.0.2.tar.gz
# cd redis-4.0.2/
# make
# make install
# cd utils/
# ./install_server.sh
install_server. shを実行すると対話形式でポート番号などを指定してインストー ルできるので、
Please select the redis port for this instance:
のときにポート番号を指定する ex)7000
他はデフォルトで
これを6ポート分=6回繰り返す 分かりやすいように7000~7005にするといいかも
2.redis clusterを有効にする
# vi /etc/redis/7000.conf
以下の設定を変更する
#bind 127.0.0.1 -> コメントアウトする
cluster-enabled yes -> コメントをはずす
appendonly yes -> yesに変更する
protected-mode no -> noに変更する
この設定を全6ポートに適用する
2.5 redis-trib. rbを利用するためにrubyのインストール 既にインストール済みなら必要なし
# yum -y install gcc cc zlib-devel openssl-devel readline-devel libffi-devel
#
# cd /usr/local/src
# tar zxvf ruby-2.3.5.tar.gz
# cd ruby-2.3.5
# ./configure
# make
# make install
#
# gem install redis
3.クラスター構成にする
# cd /usr/local/src/redis-3.2.3/src
# ./redis-trib.rb create –replicas 1 XXX.XXX.XX.XX:7000 XXX.XXX.XX.XX:7001 XXX.XXX.XX.XX:7002 XXX.XXX.XX.XX:7003 XXX.XXX.XX.XX:7004 XXX.XXX.XX.XX:7005 ※XXX.XXX.XX. XXには使用するサーバーのIPを代入すること
4.動作確認
適当に値をセット
# redis-cli -h XXX.XXX.XX.XX -p 7000 -c
XXX.XXX.XX.XX:7000> set test 123
-> Redirected to slot [YYYY] located at XXX.XXX.XX.XX:700* などと出るかもしれないがこれは正常(testキーが700* に格納されているということ)
OK と出れば問題なし
他のポートから値がゲットできるか
# redis-cli -h XXX.XXX.XX.XX -p 7001 -c
XXX.XXX.XX.XX:7001> get test
-> Redirected to slot が出ても気にしない
“123” と出れば問題なし
testキーの格納されている場所を止めてみる
# /etc/init.d/redis_700* stop ※700*は上記2つ、もしくは片方のRedirected to slot~で出てきたポート番号
この状態でgetしてみる
# redis-cli -h XXX.XXX.XX.XX -p 7001 -c
XXX.XXX.XX.XX:7002> get test
-> Redirected to slot [YYYY] located at XXX.XXX.XX.XX:700? ※停止前と700?の部分、 もしくはredirectedの有無が異なるはず
“123”が出ていれば問題なし
このように一箇所が動作停止していても正常に挙動するようなら構 築成功となる。