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が動いているサーバに移転することが出来ました!