もうRedisClusterを作るのにRubyはいらないし、認証つけるのに複雑な操作は不要
Redis Cluster を簡単に作るのに Rubyが必要だった
Redis5 がリリースされるまでは、プリミティブな Cluster 構築用のコマンドは存在するものの、手順が非常に複雑でした。
そのため、公式から redis-trib.rb
という Ruby 製の Redis Cluster 構築スクリプトが提供されていました。
Redis v5 以降から redis-cli に機能追加
Redis v5 より、 redis-cli 自体に Cluster 構築コマンド ( ほぼ redis-trib.rb
互換 ) が追加されました。
なお、 Redis 3/4 系にも、 Redis 5 系に同梱される redis-cli を利用して Cluster 操作が可能です。
試しに Cluster を組んでみる
今回は例として同じサーバーに別 Port で Redis を 6 Instance 起動させて Cluster を組んでみます。
事前準備
これから Redis を 6 Instance 分用意し、 redis.config
をそれぞれ Cluster 用に書き換えます。
※ Redis 自体を用意するところは省略します。
Redis Instance ごとにディレクトリを用意。
$ mkdir 7000 7001 7002 7003 7004 7005
各 Redis Instance の config を入れておきます。
cp /etc/redis.conf 7000
cp /etc/redis.conf 7001
cp /etc/redis.conf 7002
cp /etc/redis.conf 7003
cp /etc/redis.conf 7004
cp /etc/redis.conf 7005
cp /etc/redis.conf 7006
コンフィグの内容をそれぞれ下記のように変更していきます。
※ 下記は port:7000 で起動させる Redis の Config 例です。
port 7000
pidfile "/var/run/redis_7000.pid"
logfile "/root/cluster-test/7000/redis.log"
dbfilename "dump-7000.rdb"
appendonly yes
appendfilename "appendonly-7000.aof"
cluster-enabled yes
cluster-config-file nodes-7000.conf
cluster-node-timeout 5000
編集した Config を利用して Redis を起動させます。
$ redis-server 7000/redis.conf
$ redis-server 7001/redis.conf
$ redis-server 7002/redis.conf
$ redis-server 7003/redis.conf
$ redis-server 7004/redis.conf
$ redis-server 7005/redis.conf
Cluster 新規作成
この例では Master 数が 3 、 1Master あたりの Replica 数が 1 の 3Master-3Replica 構成を組みます。
$ redis-cli --cluster create 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
--cluster-replicas 1
途中で良い感じに Master/Replica を組んで良いか?と聞かれるので yes
と答えて、あとは待つだけです。
Can I set the above configuration? (type 'yes' to accept):
その他のコマンド
help で確認できます。
$ redis-cli --cluster help
Cluster Manager Commands:
create host1:port1 ... hostN:portN
--cluster-replicas <arg>
check host:port
info host:port
fix host:port
reshard host:port
--cluster-from <arg>
--cluster-to <arg>
--cluster-slots <arg>
--cluster-yes
--cluster-timeout <arg>
--cluster-pipeline <arg>
rebalance host:port
--cluster-weight <node1=w1...nodeN=wN>
--cluster-use-empty-masters
--cluster-timeout <arg>
--cluster-simulate
--cluster-pipeline <arg>
--cluster-threshold <arg>
add-node new_host:new_port existing_host:existing_port
--cluster-slave
--cluster-master-id <arg>
del-node host:port node_id
call host:port command arg arg .. arg
set-timeout host:port milliseconds
import host:port
--cluster-from <arg>
--cluster-copy
--cluster-replace
help
For check, fix, reshard, del-node, set-timeout you can specify the host and port of any working node in the cluster.
Appendix
redis-trib.rb で出来なかった認証付きもできる
redis-trib.rb can not use when nodes are auth · Issue #3389 · redis/redis
この Issue で説明されているように、 redis-trib.rb
ではパッチを当てないと Redis に認証を追加できませんでした。
redis-cli
の Cluster 構築機能では、 -a <password>
オプションを利用するだけです。
$ redis-cli --cluster create 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
--cluster-replicas 1 -a <password>
Discussion