Data Transmission Service (DTS) を使用すると、オンプレミス、ECS インスタンス、またはサードパーティクラウドにデプロイされた Redis データベースを、サービスを中断することなく Tair (Redis OSS-compatible) に移行できます。DTS は、データベースサービスを稼働させたまま、Tair (Redis OSS-compatible) への完全移行と増分移行をサポートします。このメソッドは、AOF メソッドを使用してデータを移行するよりも高いパフォーマンスとセキュリティを提供します。
機能概要
完全移行
DTS は、すべての既存データをソースデータベースからターゲットデータベースに移行します。完全移行は無料です。
増分移行
完全移行に加えて、DTS はソースデータベースからターゲットデータベースへの増分更新をリアルタイムで同期します。増分移行を実行するには、ソースデータベースで
PSYNCまたはSYNCコマンドを実行できる必要があります。そうでない場合は、完全移行のみを実行できます。増分移行は、データ量ではなく、移行期間に基づいて課金されます。詳細については、「課金項目」をご参照ください。説明増分移行を成功させるには、ソースデータベースのレプリケーション出力バッファーの制限を無効にする必要があります。これを行うには、ソースデータベースに接続し、次のコマンドを実行します:
CONFIG SET client-output-buffer-limit 'slave 0 0 0'。
前提条件
Tair (Redis OSS-compatible) インスタンスを作成済みであること。宛先インスタンスには、自主管理 Redis データベースで使用されているメモリよりも多くのメモリが必要です。詳細については、「インスタンスの作成」をご参照ください。
ターゲットデータベースの合計メモリは、ソースデータベースで使用されるメモリより少なくとも 10% 大きくする必要があります。ターゲットデータベースのメモリが不足している場合、データ不整合やタスクの失敗が発生する可能性があります。この場合、ターゲットデータベースをクリアし、タスクを再設定する必要があります。
注意事項
移行中は、インスタンスのスケーリング、インスタンスタイプの変更、ソースまたはターゲットデータベースのエンドポイントの変更を行わないでください。これらの操作は移行タスクの失敗を引き起こす可能性があり、再設定が必要になります。移行プロセスはソースデータベースとターゲットデータベースの両方でリソースを消費するため、オフピーク時間に移行を実行することをお勧めします。
手順
移行タスク一覧ページに移動します。
Data Management (DMS) コンソールにログインします。
上部のメニューバーで、 を選択します。
[移行タスク] の右側で、宛先インスタンスが配置されているリージョンを選択します。
[タスクの作成] をクリックします。
ソースデータベースとターゲットデータベースの情報を設定し、ページ下部の [接続をテストして続行] をクリックします。
カテゴリ
設定
説明
なし
タスク名
DTS タスクの名前。DTS は自動的にタスク名を生成します。タスクを簡単に識別できるような、わかりやすい名前を指定することをお勧めします。一意のタスク名を指定する必要はありません。
ソースデータベース
DMS データベースインスタンスの選択
ソースデータベースを DMS に追加している場合は、ここで選択できます。選択後、以下のソースデータベース情報を入力する必要はありません。追加していない場合は、このオプションを無視してください。
データベースタイプ
Tair/Redis を選択します。
アクセス方法
ソースデータベースがデプロイされている場所に基づいて接続タイプを選択します。インスタンスがオンプレミスのデータセンターまたはサードパーティクラウドにある場合は、パブリック IP を選択します。
この例では、ECS 上の自己管理データベース を使用します。
インスタンスリージョン
ECS インスタンスが配置されているリージョンを選択します。インスタンスがオンプレミスのデータセンターまたはサードパーティクラウドにある場合は、ソースデータベースに最も近いリージョンを選択します。
Alibaba Cloud アカウント間
この例では、同じ Alibaba Cloud アカウント内での移行を示します。いいえ を選択します。
ECS インスタンス ID
ソースデータベースが配置されている ECS インスタンスの ID を選択します。
説明ソースデータベースがクラスターアーキテクチャを使用している場合は、いずれかのマスターノードが配置されている ECS インスタンスの ID を選択します。
インスタンスモード
ソースデータベースのアーキテクチャに基づいてモードを選択します:
Basic Edition: 標準アーキテクチャ (マスター/レプリカ)。
Cluster Edition: クラスターアーキテクチャ。ソースデータベースがクラスターアーキテクチャを使用している場合は、[ポート] パラメーターにいずれかのマスターノードのポート番号を入力します。
ポート
ソース Redis データベースのポートを入力します。デフォルトは 6379 です。
認証方法
必要に応じて パスワードログオン または パスワードなしのログオン を選択します。
説明自主管理 Redis データベースにパスワードがない場合は、パスワードなしのログオン を選択できます。
データベースパスワード
ソース Redis データベースへの接続に使用するパスワードを入力します。
説明このパラメーターはオプションです。パスワードが設定されていない場合は、空のままにできます。
カスタムアカウントを使用する場合、そのアカウントには読み取り権限が必要です。アカウントとパスワードのフォーマットは <user>:<password> です。たとえば、Redis インスタンスのカスタムアカウントが admin でパスワードが Rp829dlwa の場合、データベースパスワードに admin:Rp829dlwa と入力します。
接続方法
必要に応じて 非暗号化接続 または SSL 暗号化接続 を選択します。
説明自主管理 Redis データベース ([接続タイプ] が クラウドインスタンス ではない場合) が SSL 暗号化接続 を使用している場合は、CA 証明書 をアップロードし、CA キー を入力する必要もあります。
宛先データベース
DMS データベースインスタンスの選択
ターゲットデータベースを DMS に追加している場合は、ここで選択できます。選択後、以下のターゲットデータベース情報を入力する必要はありません。追加していない場合は、このオプションを無視してください。
データベースタイプ
Tair/Redis がデフォルトで選択されています。
アクセス方法
クラウドインスタンス を選択します。
インスタンスリージョン
宛先インスタンスが配置されているリージョンを選択します。
インスタンス ID
宛先インスタンス ID を選択します。
認証方法
必要に応じて パスワードログオン または パスワードなしのログオン を選択します。この例では パスワードログオン を使用します。
説明Tair (Redis OSS-compatible) インスタンスで VPC のパスワードなしのアクセス機能 が有効になっていない場合は、パスワードログオン を選択します。
データベースパスワード
ターゲットデータベースに接続するためのパスワードを入力します。
説明カスタムアカウントを使用する場合、そのアカウントには書き込み権限が必要です。アカウントとパスワードのフォーマットは <user>:<password> です。たとえば、Redis インスタンスのカスタムアカウントが admin でパスワードが Rp829dlwa の場合、データベースパスワードに admin:Rp829dlwa と入力します。
接続方法
必要に応じて 非暗号化接続 または SSL 暗号化接続 を選択します。
タスクオブジェクトを設定し、ページ下部の [次へ: 詳細設定] をクリックします。
設定
説明
移行タイプ
必要に応じて 移行タイプ を選択します。
完全移行 + 増分移行 (デフォルト): ネイティブの Redis 同期ロジックを使用して、データをメモリスナップショットとして宛先に書き込みます。これにより、ソースデータベースを停止せずに移行できます。
ソースデータベースに SYNC または PSYNC 権限がない場合は、完全データ移行 を選択します。
完全データ移行: SCAN コマンドを使用してソースデータベース全体を走査し、走査したデータを宛先に書き込みます。データ整合性を確保するため、移行中にソースインスタンスに新しいデータを書き込まないでください。
競合テーブルの処理モード
事前チェックしてエラー時にブロック (デフォルト): ターゲットデータベースにキーが存在するかどうかをチェックします。
キーが存在する場合、事前チェックフェーズでエラーが報告され、移行タスクは開始されません。キーが存在しない場合、チェックは合格します。
無視して続行: [ターゲットデータベース内の既存オブジェクトのチェック] をスキップします。同じ名前のキーがターゲットデータベースにすでに存在する場合、それらは上書きされます。
ソースオブジェクト と 選択中のオブジェクト
ソースオブジェクト ボックスで移行するオブジェクトを選択し、
をクリックして 選択中のオブジェクト ボックスに移動します。選択したオブジェクトを削除するには、選択中のオブジェクト ボックスでそれをクリックし、
をクリックして ソースオブジェクト ボックスに戻します。説明移行の粒度はデータベースレベル (DB 0 から DB 255) です。
詳細設定を行い、ページ下部の [次へ: データ検証] をクリックします。
ほとんどの場合、デフォルト設定のままにできます。詳細については、「付録: 詳細設定」をご参照ください。
検証設定を行い、ページ下部の [次へ: タスクを保存して事前チェック] をクリックします。
ほとんどの場合、デフォルト設定のままにできます。詳細については、「DTS 同期または移行インスタンスのデータ検証を設定する」をご参照ください。
事前チェックを実行します。事前チェックが完了したら、[次へ: 購入] をクリックします。
事前チェックで [警告] または [失敗] した項目が返された場合は、1 つずつ対処する必要があります。[詳細の表示] をクリックして、提供された指示に基づいて項目を修正できます。また、[アラート詳細の確認] をクリックして項目を無視することもできますが、これによりデータ不整合が発生し、ビジネスにリスクをもたらす可能性があります。詳細については、「事前チェックの問題」をご参照ください。問題を解決した後、事前チェックを再度実行します。
[購入] ページで設定を行い、[購入して開始] をクリックします。
(オプション) DTS 移行リンクの リソースグループ を選択します。デフォルトでは デフォルトのリソースグループ が使用されます。
(オプション) DTS 移行リンクのインスタンスクラスを選択します。インスタンスクラスが高いほど移行速度は速くなりますが、コストも高くなります。デフォルトは large です。詳細については、「データ移行リンクの仕様」をご参照ください。
サービス利用規約を読んで選択します。
購入後、移行タスクが開始されます。データ移行ページで進行状況を確認できます。
次のステップ
増分移行を実行した場合、移行完了後にコンソールでタスクを手動で終了またはリリースする必要があります。
移行されたデータを検証できます。詳細については、「移行されたデータの検証」をご参照ください。
参考資料
データベースがオンライン移行を必要としない場合は、redis-cli などの軽量ツールを使用して AOF ファイルをインポートしてデータ移行を行うことができます。詳細については、「AOF ファイルを使用したデータ移行」をご参照ください。
よくある質問
接続テストが失敗するのはなぜですか?
次の項目を確認してください:
アカウントまたはパスワードが正しくありません。Redis パスワードのフォーマットは
user:passwordです。詳細については、「インスタンスのログオン方法」をご参照ください。ソースデータベースがオンプレミスのデータセンターまたはサードパーティクラウドにある場合、ネットワークファイアウォールが存在する可能性があります。DTS からのアクセスを許可するには、対応するリージョンの DTS サーバーの IP アドレスをファイアウォールの許可リストに手動で追加する必要があります。詳細については、「DTS サーバーの CIDR ブロックを許可リストに追加する」をご参照ください。
タスクが失敗するのはなぜですか?
移行中に、スケーリング、インスタンスタイプの変更、ソースまたはターゲットデータベースのエンドポイントの変更などの操作を行うと、タスクが失敗します。タスクを再設定する必要があります。
宛先インスタンスのメモリが不足している場合、またはクラスターインスタンスでシャードがメモリ制限に達した場合、DTS タスクはメモリ不足 (OOM) エラーで失敗します。
宛先インスタンスで TDE (透過的データ暗号化) が有効になっている場合、DTS を使用したデータ移行はサポートされません。
データ不整合が発生するのはなぜですか?
ソースデータベースの一部のキーに有効期限ポリシー (Expire) が設定されている場合、宛先データベースのキーの数がソースよりも少なくなることがあります。これは、期限切れのキーが迅速に削除されなかった可能性があるためです。
List オブジェクトの場合、DTS は PSYNC または SYNC を使用してデータを転送する際に、宛先の既存データに対して FLUSH 操作を実行しません。これにより、データが重複する可能性があります。
完全移行中にネットワークが中断された場合、DTS は完全移行を複数回リトライすることがあります。このプロセスでは、同じ名前のキーが自動的に上書きされます。リトライ中にソースデータベースで削除操作が実行された場合、そのコマンドは宛先に同期されません。これにより、宛先データベースのデータがソースよりも多くなる可能性があります。
事前チェックで Redis のエビクションポリシーが 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, and BRPOPLPUSH
DECR, DECRBY, and DEL
EVAL, EVALSHA, EXEC, EXPIRE, and EXPIREAT
FLUSHALL and FLUSHDB
GEOADD and GETSET
HDEL, HINCRBY, HINCRBYFLOAT, HMSET, HSET, and HSETNX
INCR, INCRBY, and INCRBYFLOAT
LINSERT, LPOP, LPUSH, LPUSHX, LREM, LSET, and LTRIM
MOVE, MSET, MSETNX, and MULTI
PERSIST, PEXPIRE, PEXPIREAT, PFADD, PFMERGE, PSETEX, and PUBLISH
RENAME, RENAMENX, RESTORE, RPOP, RPOPLPUSH, RPUSH, and RPUSHX
SADD, SDIFFSTORE, SELECT, SET, SETBIT, SETEX, SETNX, SETRANGE, SINTERSTORE, SMOVE, SPOP, SREM, and SUNIONSTORE
ZADD, ZINCRBY, ZINTERSTORE, ZREM, ZREMRANGEBYLEX, ZUNIONSTORE, ZREMRANGEBYRANK, and ZREMRANGEBYSCORE
XADD, XCLAIM, XDEL, XAUTOCLAIM, XGROUP CREATECONSUMER, and XTRIM
EVAL または EVALSHA によって呼び出される Lua スクリプトの場合、宛先が実行結果を明示的に返さないため、DTS はスクリプトが正常に実行されたかどうかを確認できません。
付録: 詳細設定
設定 | 説明 |
失敗した接続の再試行時間 | 移行タスクの接続に失敗した場合、DTS は継続的に接続をリトライします。デフォルトのリトライ期間は 720 分で、値の範囲は 10 から 1440 分です。リトライ期間内に接続が回復した場合、移行タスクは自動的に再開されます。そうでない場合、タスクは失敗します。ビジネスニーズに応じてリトライ期間をカスタマイズできます。30 分以上に設定することをお勧めします。 DTS はリトライ期間中もサービスの課金を継続します。 |
移行元データベースと移行先データベースで他の問題が発生した場合の、再試行までの待機時間です。 | 移行中に、ソースまたはターゲットデータベースで接続以外の問題が発生した場合、DTS はエラーを報告し、継続的にリトライします。デフォルトのリトライ期間は 10 分で、値の範囲は 10 から 1440 分です。リトライ期間内に関連操作が正常に実行された場合、移行タスクは自動的に再開されます。そうでない場合、タスクは失敗します。期間を 10 分以上に設定することをお勧めします。 |
完全なデータ移行のスロットリングを有効化 | 増分データを書き込むと、宛先インスタンスの負荷が増加する可能性があります。1 秒あたりに移行される行数とデータ量に制限を設定することで、増分移行をスロットリングできます。これにより、宛先インスタンスの負荷を軽減できます。デフォルトは いいえ です。 |
環境タグ | インスタンスを識別するための環境タグを選択できます。 |
ターゲットデータベースのキー有効期限を延長する | この設定は、ターゲットデータベースのキーの有効期限を延長します。デフォルトの延長時間は 1800 秒です。移行時にキーがすでに期限切れになっている場合、そのキーはターゲットデータベースに移行されません。 |
スレーブノードの使用 | 自主管理ソース Redis の インスタンスモード が クラスター の場合、スレーブノードからデータを読み取るかどうかを選択できます。デフォルトは いいえ で、これはマスターノードからデータが読み取られることを意味します。 |
ETL の設定 | ETL (抽出·変換·書き出し) 機能を設定できます。ETL の詳細については、「ETL とは」をご参照ください。
|
アラート監視 | データ同期インスタンスのアラートを設定するかどうかを指定します。タスクが失敗した場合、または同期遅延が指定されたしきい値を超えた場合、アラート連絡先は通知を受け取ります。有効な値:
|