1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Redis Clusterの構築メモ

Last updated at Posted at 2015-11-13

はじめに

基本的に、Creating and using a Redis Clusterのまんま。

環境

  • Ubuntu 14.04

最新版のビルドとインストール

redisから最新版のソースコードをcloneして、ビルド&インストールする。

$ git clone https://github.com/antirez/redis.git
$ cd redis
$ make
$ sudo make install

ノード用のディレクトリを用意する

$ mkdir 7000 7001 7002 7003 7004 7005
$ cat <<EOF > redis.conf
port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
EOF
$ for i in {0..5}; do cp -av redis.conf "700$i/"; sed -i -e "s/port 7000/port 700$i/g" "700$i/redis.conf"; done

ノードのプロセスを起動する

作成した各ディレクトリに移動し、それぞれのディレクトリでredis-server ./redis.conする。psで見ると以下のような状態になり、計6プロセスが起動しているのがわかる。
この時点では、まだクラスタ構成になっていない。

$ ps auxw | egrep "redis" | grep -v egrep
hina     19028  0.7  0.3  43304  7868 pts/11   Sl+  15:47   0:00 redis-server *:7000 [cluster]
hina     19031  0.3  0.3  43304  7872 pts/14   Sl+  15:47   0:00 redis-server *:7001 [cluster]
hina     19034  0.2  0.3  43304  7868 pts/15   Sl+  15:47   0:00 redis-server *:7002 [cluster]
hina     19037  0.2  0.3  43304  7872 pts/16   Sl+  15:47   0:00 redis-server *:7003 [cluster]
hina     19040  0.2  0.3  43304  7872 pts/17   Sl+  15:47   0:00 redis-server *:7004 [cluster]
hina     19043  0.2  0.3  43304  7872 pts/18   Sl+  15:47   0:00 redis-server *:7005 [cluster]

クラスタ構成にする

クラスタ構成にするためには、redisのソースコードに付属しているsrc/redis-trib.rbを使う。このツールは、redisに依存しているので、予めgem install redisしておく。

以下は、チュートリアル通りのコマンドの実行結果である。

$ ./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005
>>> Creating cluster
Connecting to node 127.0.0.1:7000: OK
Connecting to node 127.0.0.1:7001: OK
Connecting to node 127.0.0.1:7002: OK
Connecting to node 127.0.0.1:7003: OK
Connecting to node 127.0.0.1:7004: OK
Connecting to node 127.0.0.1:7005: OK
>>> Performing hash slots allocation on 6 nodes...
Using 3 masters:
127.0.0.1:7000
127.0.0.1:7001
127.0.0.1:7002
Adding replica 127.0.0.1:7003 to 127.0.0.1:7000
Adding replica 127.0.0.1:7004 to 127.0.0.1:7001
Adding replica 127.0.0.1:7005 to 127.0.0.1:7002
M: 93e53337037a3f9b1a5e0ae914e48aeca54a1d7b 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
M: d64dd6fd3e5cea7d0cf87acb278d94c7d1e02bca 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
M: 22bca92b78354dc995b35c815c54936f6efc28d4 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
S: f254c575fd2f06161905753f9e473c569ce4cdcf 127.0.0.1:7003
   replicates 93e53337037a3f9b1a5e0ae914e48aeca54a1d7b
S: 590b0db9b2031254645be39104aafb865bc70d31 127.0.0.1:7004
   replicates d64dd6fd3e5cea7d0cf87acb278d94c7d1e02bca
S: 5b889edfad0301cebb997bb92fe84f6e097e0ff8 127.0.0.1:7005
   replicates 22bca92b78354dc995b35c815c54936f6efc28d4
Can I set the above configuration? (type 'yes' to accept): yes
>>> Nodes configuration updated
>>> Assign a different config epoch to each node
>>> Sending CLUSTER MEET messages to join the cluster
Waiting for the cluster to join..
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 93e53337037a3f9b1a5e0ae914e48aeca54a1d7b 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
M: d64dd6fd3e5cea7d0cf87acb278d94c7d1e02bca 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
M: 22bca92b78354dc995b35c815c54936f6efc28d4 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
M: f254c575fd2f06161905753f9e473c569ce4cdcf 127.0.0.1:7003
   slots: (0 slots) master
   replicates 93e53337037a3f9b1a5e0ae914e48aeca54a1d7b
M: 590b0db9b2031254645be39104aafb865bc70d31 127.0.0.1:7004
   slots: (0 slots) master
   replicates d64dd6fd3e5cea7d0cf87acb278d94c7d1e02bca
M: 5b889edfad0301cebb997bb92fe84f6e097e0ff8 127.0.0.1:7005
   slots: (0 slots) master
   replicates 22bca92b78354dc995b35c815c54936f6efc28d4
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
  • 127.0.0.1:7000〜127.0.0.1:7005で待ち受けるノードを起動している。
  • ノードの内訳は以下。
    • マスター: 3
    • スレーブ: 3
  • マスターには、hash slotが以下のように割り当てられている。
    • 93e53337037a3f9b1a5e0ae914e48aeca54a1d7b: 0-5460 (5461 slots)
    • d64dd6fd3e5cea7d0cf87acb278d94c7d1e02bca: 5461-10922 (5462 slots)
    • 22bca92b78354dc995b35c815c54936f6efc28d4: 10923-16383 (5461 slots)

ちなみに、redis-cliで接続した際にはどう見えるかというと、以下のように見える。ポート番号に7000を指定しているが、70007005であれば、マスター・スレーブに関わらず接続可能である。

$ redis-cli -c -p 7000
127.0.0.1:7000> cluster nodes
d64dd6fd3e5cea7d0cf87acb278d94c7d1e02bca 127.0.0.1:7001 master - 0 1430982942619 2 connected 5461-10922
5b889edfad0301cebb997bb92fe84f6e097e0ff8 127.0.0.1:7005 slave 22bca92b78354dc995b35c815c54936f6efc28d4 0 1430982943628 6 connected
f254c575fd2f06161905753f9e473c569ce4cdcf 127.0.0.1:7003 slave 93e53337037a3f9b1a5e0ae914e48aeca54a1d7b 0 1430982943628 4 connected
590b0db9b2031254645be39104aafb865bc70d31 127.0.0.1:7004 slave d64dd6fd3e5cea7d0cf87acb278d94c7d1e02bca 0 1430982943125 5 connected
93e53337037a3f9b1a5e0ae914e48aeca54a1d7b 127.0.0.1:7000 myself,master - 0 0 1 connected 0-5460
22bca92b78354dc995b35c815c54936f6efc28d4 127.0.0.1:7002 master - 0 1430982942115 3 connected 10923-16383

感想

redis-trib.rbは、独立したツールにならないものか。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?