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コマンド一発でデータ移行出来るのは楽でよいですね。