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