現在、クラウドインスタンス上で稼働しているライブredisサーバーがあり、このredisサーバーを新しいクラウドインスタンスに移行し、そのインスタンスを新しいredisサーバーとして使用したい。 MySQLの場合、古いサーバーからDBをエクスポートし、新しいサーバーにインポートします。 redisでこれを行うにはどうすればよいですか?
追伸:レプリケーションのセットアップを検討していません。 Redisサーバーを新しいインスタンスに完全に移行したい。
まず、サーバーAでダンプを作成します。
A$ redis-cli
127.0.0.1:6379> CONFIG GET dir
1) "dir"
2) "/var/lib/redis/"
127.0.0.1:6379> SAVE
OK
これにより、dump.rdb
が完全に最新の状態になり、保存場所が示されます(この場合は/var/lib/redis/dump.rdb
)。 dump.rdb
も定期的に自動的にディスクに書き込まれます。
次に、サーバーBにコピーします。
A$ scp /var/lib/redis/dump.rdb myuser@B:/tmp/dump.rdb
BのRedisサーバーを停止し、dump.rdbをコピーして(アクセス許可が以前と同じであることを確認して)開始します。
B$ Sudo service redis-server stop
B$ Sudo cp /tmp/dump.rdb /var/lib/redis/dump.rdb
B$ Sudo chown redis: /var/lib/redis/dump.rdb
B$ Sudo service redis-server start
B上のRedisのバージョンは、Aのバージョン以上である必要があります。そうでない場合、 互換性の問題 がヒットします。
サーバー間の接続がある場合は、新しいインスタンスをスレーブノードとしてレプリケーション(SQLとは異なり、簡単です)をセットアップすることをお勧めします-単一のコマンドで新しいノードをマスターに切り替え、移動を実行できますゼロダウンタイム。
信じられないかもしれませんが、私はそれのために記事を作りました:
http://redis4you.com/articles.php?id=005&name=Seamless+migration+from+one+Redis+server+to+another
しかし、マスターとスレーブ間でデータ転送が完了したことをどのように知ることができますか? INFOコマンドを使用できます。
現在、2.6以降で使用可能なMIGRATEも使用できます。
すべてのデータベースではなく、1つのデータベース内のデータのみを移動したかったため、これを使用する必要がありました。 2つのRedisインスタンスは2つの異なるマシン上に存在します。
Redis-1からRedis-2に直接接続できない場合は、sshポートバインディングを使用します。
ssh [email protected] -L 1234:127.0.0.1:6379
KEYSを使用してすべてのキーをループし、各キーを移行する小さなスクリプト。これはPerlですが、うまくいけばアイデアが得られます:
foreach ( $redis_from->keys('*') ) {
$redis_from->migrate(
$destination{Host}, # localhost in my example
$destination{port}, # 1234
$_, # The key
$destination{db},
$destination{timeout}
);
}
詳細については、 http://redis.io/commands/migrate を参照してください。
SLAVEOFコマンドを使用してデータを移行することもできます。
SLAVEOF old_instance_name old_instance_port
KEYS *
でキーを受け取ったことを確認します。他の方法でも新しいインスタンスをテストできます。完了したら、次のレプリケーションを有効にします。
SLAVEOF NO ONE
Redisデータをインポートするときにdump.rdbを配置する必要がある場所を確認するには、
クライアントを開始
$redis-cli
そして
それから
redis 127.0.0.1:6379> CONFIG GET *
1) "dir"
2) "/Users/Admin"
ここで、/ Users/Adminは、サーバーから読み取られるdump.rdbの場所であり、したがって、これは置換する必要があるファイルです。
rdd を使用することもできます
実行中のredisサーバーをダンプおよび復元し、ダンプキーのフィルター/一致/名前変更を許可できます。
また、同じことを行いたい:スタンドアロンのredisインスタンスから別のredisインスタンスにデータベースを移行します(redis sentinel)。
データは重要ではないため(セッションデータ)、 https://github.com/yaauie/redis-copy を試してみます。
Redisデータをエクスポート/バックアップする(ダンプファイルを作成する)ために見つけた簡単な方法は、slaveofフラグを使用してコマンドラインからサーバーを起動し、次のようにライブレプリカを作成することです(ソースRedisがポート6379で1.2.3.4であると仮定):
/usr/bin/redis-server --port 6399 --dbfilename backup_of_master.rdb --slaveof 1.2.3.4 6379
コマンドラインインターフェイスユーティリティをnpmとgithubに公開しました。これを使用すると、特定のパターン(*でも)に一致するキーを1つのRedisデータベースから別のデータベースにコピーできます。
このユーティリティは次の場所にあります。
ゼロダウンタイム移行の重要な要素は次のとおりです。
CONFIG SET slave-read-only no
)要するに:
さらに、redisには、ターゲットをデタッチした直後にソースredisを無効にして書き込みを許可するオプションがあります。
min-slaves-to-write
min-slaves-max-lag
このトピックは
RedisLabsチームからの非常に良い説明 https://redislabs.com/blog/real-time-synchronization-tool-for-redis-migration
そして、移行のためのインタラクティブなツールでさえ: https://github.com/RedisLabs/redis-migrate