Redis Clusterへのデータ移行

Redis Clusterはマスターがダウンしたら自動でfailoverしてくれるためとても便利です。

通常の、つまりMaster/Slave構成のRedisから、Redis Clusterへ移行したい人もいるかと思います。

しかし通常のRedisインスタンスからRedis Clusterへデータ移行するにはどうしたらよいでしょうか。

簡単な方法としてredis-trib.rbのimportコマンドがあります。(※redis-trib.rbはダウンロードしてきたredisのsrcディレクトリの下にある)

たとえば、

master 127.0.0.1:7000
master 127.0.0.1:7001
master 127.0.0.1:7002
slave  127.0.0.1:7003
slave  127.0.0.1:7004
slave  127.0.0.1:7005

という構成のRedis Clusterがあり、 127.0.0.1:6379 が通常のRedisインスタンスでデータが入っているとします。

その場合、以下のようにimortコマンドを実行するとRedis Clusterへデータが移行できます。

$ /var/lib/redis/redis-3.0.2/src/redis-trib.rb import --from 127.0.0.1:6379  127.0.0.1:7000
>>> Importing data from 127.0.0.1:6379 to cluster
Connecting to node 127.0.0.1:7000: OK
Connecting to node 127.0.0.1:7004: OK
Connecting to node 127.0.0.1:7002: OK
Connecting to node 127.0.0.1:7001: OK
Connecting to node 127.0.0.1:7003: OK
Connecting to node 127.0.0.1:7005: OK
>>> Performing Cluster Check (using node 127.0.0.1:7000)
M: 51518f3bb0c24af41096bc066f17c1df9fd378e9 127.0.0.1:7000
   slots:0-5460 (5461 slots) master
   1 additional replica(s)
S: a27a8dd99a60840576425d9d3437a953c65450d2 127.0.0.1:7004
   slots: (0 slots) slave
   replicates a475649fa0a3b8a85a8da68d8e8ba12f824745ab
M: a475649fa0a3b8a85a8da68d8e8ba12f824745ab 127.0.0.1:7002
   slots:10923-16383 (5461 slots) master
   2 additional replica(s)
M: 89be06ecb22150256ec8d11ce6089c48060fba6b 127.0.0.1:7001
   slots:5461-10922 (5462 slots) master
   0 additional replica(s)
S: e4654fa6bd8365ba3fbb6a37763b4492319f82ec 127.0.0.1:7003
   slots: (0 slots) slave
   replicates 51518f3bb0c24af41096bc066f17c1df9fd378e9
S: 729fa802e6b50d00397c9c8f90cbca96f4f57581 127.0.0.1:7005
   slots: (0 slots) slave
   replicates a475649fa0a3b8a85a8da68d8e8ba12f824745ab
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Connecting to the source Redis instance
*** Importing 100 keys from DB 0
Migrating hoge37 to 127.0.0.1:7000: OK
Migrating hoge51 to 127.0.0.1:7000: OK
Migrating hoge63 to 127.0.0.1:7002: OK
Migrating hoge83 to 127.0.0.1:7001: OK
Migrating hoge43 to 127.0.0.1:7001: OK
Migrating hoge22 to 127.0.0.1:7001: OK
Migrating hoge3 to 127.0.0.1:7002: OK
Migrating hoge77 to 127.0.0.1:7000: OK
Migrating hoge46 to 127.0.0.1:7000: OK
....

上記のコマンドでは127.0.0.1:7000を指定してますが127.0.0.1:7000だけにimportされるわけではなく、 127.0.0.1:7000が属するRedis Clusterのマスターにたちにimportされていきます。

注意点としては、キーの数だけ標準出力されるのと、

import後、移行元のRedisのデータが消されるということです。 なので、imort前に移行元のRedisのデータのバックアップはとっておいたほうがいいかもしれません。

とはいえ、importコマンド一発でデータ移行出来るのは楽でよいですね。