移行先の Tair (Redis OSS-compatible) インスタンスをすでに作成済みで、移行元インスタンスからデータを移行する必要がある場合は、このトピックをご参照ください。移行先インスタンスをまだ作成していない場合は、代わりにバックアップから直接クローンを作成します。詳細については、「バックアップセットからの復元」または「ポイントインタイムへの復元」をご参照ください。
このトピックでは、Data Transmission Service (DTS) を使用して、Tair (Redis OSS-compatible) インスタンス間またはセルフマネージド Redis データベース間で片方向のデータ移行を実行する方法について説明します。また、DTS とバックアップベースの 2 つの代替手段を比較し、適切な方法の選択に役立ちます。
移行方法の比較
DTS | バックアップセットからの復元 | ポイントインタイムへの復元 | |
使用シナリオ | 既存インスタンスへのデータ移行 | バックアップからの新規インスタンスのクローン作成 | バックアップからの新規インスタンスのクローン作成 |
料金 | フル移行:無料。増分移行:期間に応じた従量課金。インターネットまたはクラウド間のトラフィックにはデータ転送料金が適用されます。 | データ復元:無料。新規インスタンス作成:課金対象。 | データ復元:試用期間中 (過去 7 日間) は無料。新規インスタンス作成:課金対象。 |
移行の粒度 | データベースレベル (DB 0~DB 255) | インスタンスレベル | インスタンスレベルまたはキーレベル |
増分移行 | サポート | 非サポート | 非サポート |
[クロスリージョン移行] | サポート | 非サポート | 非サポート |
異なるデータベースバージョン | サポート¹ | 非サポート | 非サポート |
異なるアーキテクチャ | サポート² | 部分的にサポート² | 部分的にサポート² |
¹ 互換性の問題を避けるため、移行元と移行先で同じデータベースバージョンを使用することを推奨します。
² 標準アーキテクチャのインスタンスからクラスターまたは読み書き分離アーキテクチャのインスタンスに移行する前に、これらのアーキテクチャのコマンド制限をご確認ください。
DTS のデータ移行方法
DTS は 2 つの移行タイプをサポートしています。移行元データベースを停止せずに移行タスクを設定する際に、両方を選択できます。
[フル移行 + 増分移行] (デフォルト):ネイティブの Redis SYNC/PSYNC ロジックを使用して、メモリスナップショットから移行先にデータを書き込み、その後、増分更新をリアルタイムで同期します。フル移行は無料で、増分移行は期間に応じて課金されます。
[フルデータ移行]:SCAN コマンドを使用して、移行元データベース全体を走査します。このタイプの移行中は、データの不整合を引き起こす可能性があるため、移行元への書き込みは行わないでください。
前提条件
開始する前に、以下を確認してください。
移行先の Tair (Redis OSS-compatible) インスタンスが存在すること。
移行先インスタンスの合計メモリが、移行元インスタンスで現在 使用している 容量よりも大きいこと (少なくとも 10% 多い容量)。たとえば、移行元が 10 GB を使用している場合、移行先には少なくとも 11 GB の合計メモリが必要です。移行先のメモリが不足すると、データの不整合やタスクの失敗につながります。
移行先インスタンスでは、透過的データ暗号化 (TDE) は[無効]です。DTS は、TDE が有効化されたインスタンスへの移行をサポートしていません。
移行先インスタンスで Tair (Redis OSS-compatible) 2.8 が実行されていないこと。DTS は 2.8 インスタンスをサポートしていません。
制限事項
移行タスクの実行中に、移行元または移行先データベースのスケーリング、インスタンスタイプの変更、またはエンドポイントの変更を行わないでください。これらの操作はタスクが失敗する原因となり、再設定が必要になります。
移行プロセスは両方のインスタンスでリソースを消費するため、オフピーク時に実行してください。
事前チェックでは、移行先データベースの削除ポリシーが [noeviction] に設定されていることを確認します。 Tair (Redis OSS 互換) のデフォルトの削除ポリシーは volatile-lru です。 volatile-lru では、移行先のメモリが不足した場合、データはサイレントに削除され、不整合が発生します。 代わりに noeviction を設定すると、メモリが不足した場合に書き込みは失敗します (タスクも失敗します) が、データがサイレントに削除されることはありません。 詳細については、「Redis のデータ削除ポリシー」をご参照ください。
移行完了後、移行先インスタンスのインスタンス ID とエンドポイントは、移行元インスタンスのものとは異なります。クライアント設定を更新して、移行先インスタンスのエンドポイントを使用するようにしてください。
Tair の永続メモリ最適化インスタンスは、Redis オープンソース版インスタンスにインプレースアップグレードできません。インスタンスタイプを切り替えたい場合は、Redis オープンソース版インスタンスを作成し、DTS を使用してデータを移行してください。
移行タスクの設定
ステップ 1: 移行タスクリストを開く
Data Management (DMS) コンソールにログインします。
トップメニューバーで、[データ + AI] > [データ転送サービス (DTS)] > [データ移行] をクリックします。
[移行タスク] の右側で、移行先インスタンスがあるリージョンを選択します。
ステップ 2: タスクの作成とデータベースの設定
[タスクの作成] をクリックします。
以下のパラメーターを使用して、移行元および移行先データベースを設定します。
一般設定
パラメーター
説明
[タスク名]
DTS は自動的に名前を生成します。識別しやすいように、わかりやすい名前を指定してください。名前は一意である必要はありません。
[ソースデータベース]
パラメーター
説明
[DMS データベースインスタンスの選択]
移行元データベースがすでに DMS に追加されている場合は、ここで選択します。残りの移行元パラメーターは自動的に入力されます。それ以外の場合は、このフィールドをスキップします。
[データベースタイプ]
[Tair/Redis] を選択します。
[アクセス方法]
ソースデータベースがデプロイされている場所に対応するタイプを選択します。クラウドインスタンスの場合は、[クラウドインスタンス] を選択します。
[インスタンスリージョン]
移行元インスタンスがあるリージョンを選択します。
[クロスアカウント移行]
ソースとデスティネーションが同じ Alibaba Cloud アカウントにある場合は、[いいえ] を選択します。
[インスタンス ID]
移行元インスタンスの ID を選択します。
[認証方法]
[パスワードログイン] または [パスワードフリーログイン] を選択します。VPC 経由のパスワードフリーアクセスが有効になっていない場合は、[パスワードログイン] を選択します。
[データベースパスワード]
パスワードを
<user>:<password>形式で入力します (例:admin:Rp829dlwa)。パスワードが設定されていない場合は、空白のままにします。[宛先データベース]
パラメーター
説明
[DMS データベースインスタンスの選択]
移行先データベースがすでに DMS に追加されている場合は、ここで選択します。残りの移行先パラメーターは自動的に入力されます。それ以外の場合は、このフィールドをスキップします。
[データベースタイプ]
デフォルトでは[Tair/Redis] が選択されています。
[アクセス方法]
[クラウドインスタンス] を選択します。
[インスタンスリージョン]
移行先インスタンスが存在するリージョンを選択します。
[インスタンス ID]
移行先インスタンスの ID を選択します。
[認証方法]
[パスワードログイン] または [パスワードフリーログイン] を選択します。VPC 経由のパスワードフリーアクセスが有効になっていない場合は、[パスワードログイン] を選択します。
[データベースパスワード]
パスワードを
<user>:<password>形式で入力します (例:admin:Rp829dlwa)。ページの下部にある[接続をテストして続行]をクリックします。
ステップ 3: 移行オブジェクトの選択
タスクオブジェクトを設定し、[次へ: 詳細設定] をクリックします。
パラメーター | 説明 |
[移行タイプ] | 要件に基づいて選択してください。[全量移行 + 増分移行] (デフォルト):ソースを停止せずにデータを移行します。ソースに対する SYNC または PSYNC 権限がない場合にのみ、[全量移行] を選択してください。 |
[既存の移行先テーブルの処理モード] | [事前チェックとエラー時にブロック](デフォルト): 移行先データベースにキーが存在するかどうかをチェックします。キーが存在する場合、事前チェック段階でエラーが報告され、移行タスクは開始されません。[無視して続行]: [移行先データベースの既存オブジェクトのチェック] をスキップします。同じ名前のキーが移行先データベースにすでに存在する場合、それらは上書きされます。 |
[移行元オブジェクト] / [選択済みオブジェクト] | 移行するデータベース (DB 0~DB 255) を選択し、矢印をクリックして [選択済みオブジェクト] に移動します。 |
ステップ 4: 詳細設定
[次へ: データ検証] をクリックします。ほとんどの場合、デフォルト設定のままにします。詳細については、「付録: 詳細設定」をご参照ください。
ステップ 5: 検証設定
[次へ: タスクを保存して事前チェック] をクリックします。ほとんどの場合、デフォルト設定のままにします。詳細については、「DTS の同期または移行インスタンスのデータ検証を設定する」をご参照ください。
ステップ 6: 事前チェックの実行
事前チェックが完了した後:
すべての項目が合格した場合、次のステップに進みます。
いずれかの項目に [警告] または [失敗] が表示された場合は、[詳細を表示] をクリックし、指示に従って解決してください。[アラート詳細を確認] をクリックして警告を確認できますが、これを行うとデータの不整合が発生する可能性があります。詳細については、「事前チェックに関する問題」をご参照ください。すべての問題を修正した後、事前チェックを再実行してください。
[次へ: 購入] をクリックします。
ステップ 7: 購入とタスクの開始
[購入] ページで:
(任意) [リソースグループ] を割り当てます。デフォルトで、デフォルトのリソースグループが使用されます。
(オプション) DTS 移行リンクのインスタンスクラスを選択します。クラスが高いほど移行速度は速くなりますが、コストも高くなります。デフォルトは large です。仕様については、「データ移行リンクの仕様」をご参照ください。
サービス利用規約を読み、同意してください。
[購入して開始] をクリックします。
移行タスクが開始されます。[データ移行] ページで進捗を監視できます。
ステップ 8: 移行の完了
[完全移行 + 増分移行] を選択した場合、DTS は初期移行の完了後も増分更新の同期を継続します。切り替えの準備ができたら、コンソールでタスクを手動で停止または解放してください。
すべてのデータが正しく移行されたことを確認するには、「移行データの検証」をご参照ください。
よくある質問
接続テストが失敗するのはなぜですか?
以下を確認してください。
アカウントまたはパスワードが正しくありません。Redis パスワードの形式は
user:passwordです。詳細については、「インスタンスのログオン方法」をご参照ください。移行元データベースがオンプレミスのデータセンターまたはサードパーティのクラウドにある場合、ネットワークファイアウォールが DTS をブロックしている可能性があります。お使いのリージョンの DTS サーバーの IP アドレスをファイアウォールのホワイトリストに追加してください。手順については、「DTS サーバーの CIDR ブロックをホワイトリストに追加する」をご参照ください。
移行タスクが失敗するのはなぜですか?
移行中に移行元または移行先インスタンスのスケーリング、インスタンスタイプの変更、またはエンドポイントの変更を行うと、タスクが失敗します。操作完了後にタスクを再設定してください。
移行先インスタンスまたはクラスターのシャードでメモリ不足 (OOM エラー) が発生すると、タスクは失敗します。開始前に移行先に十分なメモリがあることを確認してください。
移行先インスタンスで TDE が有効になっている場合、DTS 移行はサポートされていません。
データの不整合が発生するのはなぜですか?
TTL キー:移行元のキーの一部に有効期限 (TTL) ポリシーがある場合、期限切れのキーが迅速に削除されないことがあるため、移行先のキーが少なくなることがあります。
リストオブジェクト:DTS は PSYNC または SYNC を使用する際、移行先に既存のリストデータに対して FLUSH を実行しないため、重複したエントリが発生する可能性があります。
フル移行の再試行:フル移行中にネットワークが中断された場合、DTS は再試行し、同じ名前のキーを上書きします。再試行中に移行元がキーを削除した場合、その削除は同期されないため、移行先が一時的に移行元よりデータが多くなることがあります。
Tair (Redis OSS-compatible) 2.8 インスタンスを選択できないのはなぜですか?
DTS は Tair (Redis OSS-compatible) 2.8 インスタンスをサポートしていません。
事前チェックでエビクションポリシーが noeviction に設定されていることを確認するのはなぜですか?
Tair (Redis OSS-compatible) のデフォルトのエビクションポリシー (maxmemory-policy) は volatile-lru です。移行先でメモリが不足すると、このポリシーがデータのエビクションをトリガーし、タスクを失敗させることなく移行元と移行先の間で不整合を引き起こします。ポリシーを noeviction に設定すると、サイレントなデータ損失を防ぎます。メモリが不足すると書き込みが失敗し、タスクも失敗しますが、データはエビクションされません。詳細については、「Redis のデータエビクションポリシー」をご参照ください。
移行元データベースに DTS_REDIS_TIMESTAMP_HEARTBEAT キーが存在するのはなぜですか?
移行と同期の品質を監視するため、DTS は移行元データベースに DTS_REDIS_TIMESTAMP_HEARTBEAT というプレフィックスを持つキーを挿入し、更新タイムスタンプを追跡します。クラスターアーキテクチャの場合、DTS はこのキーを各シャードに挿入します。DTS は移行中にこのキーを除外し、タスクが終了するとキーは自動的に期限切れになります。
増分移行でサポートされているコマンドは何ですか?
以下のコマンドがサポートされています。
APPEND
BITOP, BLPOP, BRPOP, BRPOPLPUSH
DECR, DECRBY, DEL
EVAL, EVALSHA, EXEC, EXPIRE, EXPIREAT
FLUSHALL,FLUSHDBGEOADD, GETSET
HDEL, HINCRBY, HINCRBYFLOAT, HMSET, HSET, HSETNX
INCR, INCRBY, INCRBYFLOAT
LINSERT, LPOP, LPUSH, LPUSHX, LREM, LSET, LTRIM
MOVE, MSET, MSETNX, MULTI
PERSIST, PEXPIRE, PEXPIREAT, PFADD, PFMERGE, PSETEX, PUBLISH
RENAME, RENAMENX, RESTORE, RPOP, RPOPLPUSH, RPUSH, RPUSHX
SADD, SDIFFSTORE, SELECT, SET, SETBIT, SETEX, SETNX, SETRANGE, SINTERSTORE, SMOVE, SPOP, SREM, SUNIONSTORE
ZADD, ZINCRBY, ZINTERSTORE, ZREM, ZREMRANGEBYLEX, ZUNIONSTORE, ZREMRANGEBYRANK, ZREMRANGEBYSCORE
XADD, XCLAIM, XDEL, XAUTOCLAIM, XGROUP CREATECONSUMER, XTRIM
注:EVAL または EVALSHA によって呼び出される Lua スクリプトについて、移行先は明示的な実行結果を返さないため、DTS はスクリプトが移行先で正常に実行されたかどうかを確認できません。
関連ドキュメント
既存のインスタンスに移行するのではなく、Tair (Redis OSS-compatible) インスタンスの全データを新しいインスタンスにクローンしたい場合は、バックアップと復元機能を使用してください。