Rump を使用して、同じ ApsaraDB Redis インスタンス内のデータベース間、または異なる ApsaraDB Redis インスタンス間でデータを移行できます。
始める前に
- 対象の ApsaraDB for Redis インスタンスが存在する VPC に Linux ベースの ECS (Elastic Compute Service) インスタンスが作成されている必要があります。
- 作成した ECS インスタンス内に Rump がダウンロードされている必要があります。 Rump のファイルタイプを実行可能ファイルに変更済みです。
このタスクについて
クラウドサービスプロバイダーから Redis データを移行すると、以下の問題が発生します。
- slaveof や bgsave などのデータ取得コマンドはサポートしていません。
- keys コマンドは、サーバー上で輻輳を引き起こし、運用サービスに影響を与える可能性があります。
Rump の移行メカニズム
Rump は単一の scan コマンドを実行して、ソース ApsaraDB for Redis インスタンスから複数のキーリストを取得します。 Rump は dump コマンドでキーコンテンツを取得し、pttl コマンドによってキーの有効期限を取得します。 次に、Rump は restore コマンドを使用して、パイプラインモードでターゲット ApsaraDB for Redis インスタンスにキーを同期します。
利点
- keys コマンドを scan コマンドに置き換えて、サーバー上での輻輳を防止します。
- どのタイプのデータでも同期します。
- 一時ファイルは使用しません。
- バッファーを持つチャネルを使用して、ソースサーバーのパフォーマンスを向上させます。
- パイプラインモードを採用し、ネットワーク帯域幅を節約します。
手順
ECS インスタンスで次のコマンドを実行してデータを同期します。
rump -from source_addr -fromPwd source_pwd -to dest_addr -toPwd dest_pwd [-size size] [-replace]
パラメーター | 説明 |
---|---|
source_addr | redis://host:port/db の形式のソース ApsaraDB for Redis インスタンスのアドレス。host と port は必須パラメーターで、db はオプションパラメーターです。
db を指定していない場合は、デフォルトで値 0 が使用されます。
|
source_pwd | ソース ApsaraDB for Redis インスタンスのパスワード。 |
dest_addr | source_addr と同じ形式のターゲット ApsaraDB for Redis インスタンスのアドレス。 |
dest_pwd | ターゲット ApsaraDB for Redis インスタンスのパスワード。 |
size | 一度に同期するキー数。 デフォルト値: 10。 |
-replace | 既存のキーが新しいキーと同じ場合、既存のキーを上書きするかどうかを示します。 このパラメーターを指定すると、既存のキーが上書きされます。 このパラメーターを指定していない場合、既存のキーは上書きされず、エラーメッセージが表示されます。 |
例
-
例 1: 同じ ApsaraDB for Redis インスタンス内の db0 から db1 にデータをインポート
rump -from redis://r-123456789.redis.rds.aliyuncs.com:6379/0 -fromPwd from_pass -to redis://r-123456789.redis.rds.aliyuncs.com:6379/1 -toPwd to_pass -size 100
-
例 2: Redis インスタンス A の ApsaraDB の db0 から Redis インスタンス B の ApsaraDB の db1 にデータをインポート
rump -from redis://r-123456789.redis.rds.aliyuncs.com:6379/0 -fromPwd from_pass -to redis://r-999999999.redis.rds.aliyuncs.com:6379/1 -toPwd to_pass -size 100