Masteries

技術的なことや仕事に関することを書いていきます.

Redisに格納されたデータを移行する話

GaiaXでは, 「Gaiachan」と呼ばれるHubot製の社内Botが動いています. 先日, Gaiachanが動いているサーバを別のサーバに移転することになったのですが, その際にHubotのhubot-redis-brainによってRedis上に保存している各種データも一緒に移転することにしました.

Redisのデータを移転させるのは初めてだったので, 手順を残しておきます.

Redisに保存されているデータを保存する

まずは, 現在Hubotが動いているサーバで作業します. Redisに保存されているデータをファイルに書き出しましょう.

$ redis-cli save

redis-cliコマンドに対し, saveコマンドを与えることで, Redisが保存しているデータをファイルに書き出すことができます.

但しsaveだとロックが発生するので, 問題がある場合は,

$ redis-cli bgsave

で, バックグラウンド処理させるなどの工夫が必要になります.

保存が終了したかどうかは,

$ redis-cli lastsave

で, 最後にファイルに書きだした時間を取得出来るので, これで調べることができます.

なお, 保存したファイルは, CentOS 6の場合/var/lib/redis/dump.rdbにあるので, これをscpコマンド等で一旦手元のPCに持って来ましょう.

Redisのデータを移行する

手元に持ってきたdump.rdbを, 新しいHubotが動いているサーバの/var/lib/redisに設置すれば基本的にはOKです.

この時, redisが稼働した状態でコピーを実施すると, その後で稼働中のRedisがdump.rdbを上書きしてしまうので, 必ずRedisを停止してからdump.rdbのコピーを実施しなければなりません.

また, Redisを停止していたとしても, Hubotが動いている場合も期待通りの挙動になりません. どうやら, Hubotが動作してるところに停止していたRedisが起動すると, Hubotは保持しているデータを一旦Redisに書き込むようになっているようで, これによってdump.rdbの内容が上書きされてしまいます.

なので, 新しいHubotが動いているサーバにdump.rdbを設置する前に, 新しいHubotが動いているサーバ上のRedisとHubotの両方を停止しておく必要があります.

なので, 新しいHubotが動いているサーバにおける作業手順は, こんな感じになるでしょう.

  • Hubotの停止
  • Redisの停止
  • dump.rdbのコピー
  • Redisの起動
  • Hubotの起動

これで, 現在Hubotが動いているサーバのRedisに保存されていたデータを, 全て新しいHubotが動いているサーバに移転することが出来ました!

あわせてよみたい