2015年8月11日火曜日

Redis Cluster を構築してみた

概要

Redis Cluster を Mac 上に構築してみました
とりあえずシングルノードで構築しています

環境

  • Mac OS X 10.10.4
  • Redis 3.0.2
  • Ruby 2.2.0p0
  • Gem 2.4.5
  • redis-rb 3.2.1

インストール方法

  • Redis
brew install redis
  • Ruby
brew install ruby
gem install redis

Cluster 設定

mkdir -p work/redis-cluster
cd work/redis-cluster
mkdir 7000 7001 7002
cp /usr/local/etc/redis.conf.default 7000/redis.conf
cp /usr/local/etc/redis.conf.default 7001/redis.conf
cp /usr/local/etc/redis.conf.default 7002/redis.conf
vim 7000/redis.conf
vim 7001/redis.conf
vim 7002/redis.conf

以下の部分を書き換えてください

  • port 7000
  • appendonly yes
  • cluster-enabled yes
  • cluster-config-file nodes-7000.conf
  • cluster-node-timeout 5000

portcluster-config-fileの数字の部分は各設定ファイルごとに書き換えてください
設定ファイルの書き換えが完了したら一旦各 redis ノードを起動しましょう

redis-server work/redis-cluster/7000/redis.conf
redis-server work/redis-cluster/7001/redis.conf
redis-server work/redis-cluster/7002/redis.conf

Cluster 構築

公式で公開している Ruby スクリプトを使って Cluster は構築します

cd work/redis-cluster
wget http://download.redis.io/releases/redis-3.0.3.tar.gz
tar zvxf redis-3.0.3.tar.gz
./redis-3.0.3/src/redis-trib.rb create 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002

Can I set the above configuration?
と聞かれるので yes を入力します

[OK] All nodes agree about slots configuration.
となれば Cluster の構築は完了です

動作確認

アクセスはお馴染みのredis-cliを使います
Cluster 環境にアクセスする場合は以下のように-c-pオプションを利用します

redis-cli -c -p 7000

Cluster の状態の確認は以下でできます

> cluster info

実際に値を投入してみましょう

127.0.0.1:7000> set hoge fuga
OK
127.0.0.1:7000> set hoge1 fuga
-> Redirected to slot [6811] located at 127.0.0.1:7001
OK
127.0.0.1:7001> set hoge2 fuga
-> Redirected to slot [11000] located at 127.0.0.1:7002
OK

こんな感じで key ごとに値を持つホストが変わってきます
Redis Cluster は SLOTS という概念を持っています
簡単に言うと SET したい key ごとに SLOTS 番号が計算されて、その番号に応じた適切なノードに値が保存されるという仕組みです

Cluster の SLOTS の設定状況の確認は以下でできます

> cluster slots

例えば hoge の SLOTS 番号は 1525 番で 1525 番はどのノードに割り当てられるかと言うとポート 7000 番のノードに割り振られます

127.0.0.1:7000> cluster keyslot hoge
(integer) 1525
127.0.0.1:7000> cluster slots
1) 1) (integer) 5461
   2) (integer) 10922
   3) 1) "127.0.0.1"
      2) (integer) 7001
2) 1) (integer) 10923
   2) (integer) 16383
   3) 1) "127.0.0.1"
      2) (integer) 7002
3) 1) (integer) 0
   2) (integer) 5460
   3) 1) "127.0.0.1"
      2) (integer) 7000

上記の SLOTS の設定はデフォルトの状態です
もちろん好きな SLOTS 番号を好きなノードに割り当てることもできます
そのあたりの設定は別の記事で紹介できればと思います

最後に

Redis Cluster はバージョン 3.0 以上の Redis でサポートされています
Cluster を構築すること自体は非常に簡単にできます
また、Master - Slave 構成もサポートしているので 6 台のノードがあれば、 Master - Slave 構成も組めます

実運用でどこまでスケールできるのかとか、運用上発生する具体的なトラブルシューティングの検証とかが結構必要かなと思いました
まだ、Web 上にもその辺の運用話は少ないのかなという印象を受けました
その辺のノウハウが溜まってくるのはもう少し先なのかな

参考サイト

0 件のコメント:

コメントを投稿