Data Transmission Service (DTS) を使用すると、オンプレミス データセンター、Elastic Compute Service (ECS) インスタンス、またはサードパーティ クラウドプラットフォームにデプロイされているセルフマネージド Redis データベースから Tair (Redis OSS-compatible) に、ビジネスに影響を与えることなくデータを移行できます。DTS を使用すると、既存の Redis データベースから Tair (Redis OSS-compatible) に、データベースサービスを中断することなくデータを移行できます。DTS は、完全データ移行と増分データ移行をサポートしています。DTS は、追記専用ファイル (AOF) 方式よりも高いパフォーマンスとセキュリティを提供します。
概要
完全なデータ移行
DTS を使用すると、ソースデータベースからターゲットデータベースに既存のすべてのデータを無料で移行できます。
増分データ移行
完全データ移行を実行した後、DTS はソースデータベースからターゲットデータベースへの増分データをリアルタイムで同期できます。増分データ移行を実行するには、ソースデータベースで
PSYNC
コマンドまたはSYNC
コマンドを実行する必要があります。そうでない場合は、完全データ移行のみを実行できます。増分データ移行は、転送されるデータ量ではなく、移行の期間に基づいて課金されます。詳細については、「課金対象項目」をご参照ください。説明増分データ移行タスクが想定どおりに実行されるように、ソースデータベースのレプリケーション出力バッファの制限を削除することをお勧めします。制限を削除するには、ソースデータベースに接続し、次のコマンドを実行します。
CONFIG SET client-output-buffer-limit 'slave 0 0 0'
。
前提条件
Tair (Redis OSS-compatible) インスタンスが作成されており、インスタンスに割り当てられたメモリ量がセルフマネージド Redis データベースで使用されているメモリ量よりも大きいこと。詳細については、「ステップ 1: インスタンスを作成する」をご参照ください。
ターゲットデータベースの合計メモリ量は、ソースデータベースで使用されているメモリ量よりも少なくとも 10% 大きくしておくことをお勧めします。データ移行タスクの実行時にターゲットデータベースのメモリが不足している場合、データの不整合やタスクの失敗などの問題が発生する可能性があります。この場合、ターゲットデータベースを空にして、データ移行タスクを再構成します。
注意事項
データ移行タスクの実行中は、ソースデータベースまたはターゲットデータベースの仕様やエンドポイントをスケーリングまたは変更しないでください。変更すると、データ移行タスクは失敗します。データ移行タスクが失敗した場合は、変更を反映するようにタスクを再構成します。また、データ移行はソースデータベースとターゲットデータベースのリソースを消費します。オフピーク時にデータ移行を実行することをお勧めします。
手順
データ移行タスクページに移動します。
Data Management (DMS) コンソール にログインします。
上部のナビゲーションバーで、データ + AI をクリックします。
左側のナビゲーションウィンドウで、 を選択します。
[タスクの作成] をクリックします。
ソースデータベースとターゲットデータベースを設定し、ページの下部にある [接続テストと続行] をクリックします。次の表にパラメータを示します。
セクション
パラメータ
説明
該当なし
タスク名
DTS タスクの名前。DTS はタスク名を自動的に生成します。タスクを識別しやすい説明的な名前を指定することをお勧めします。一意のタスク名を指定する必要はありません。
ソースデータベース
DMS データベースインスタンスを選択
ソースデータベースを DMS に登録している場合は、データベースを選択できます。ソースデータベースを選択すると、データベースに関する情報を入力する必要はありません。ソースデータベースを DMS に登録していない場合は、このオプションは無視してください。
データベースタイプ
ソースデータベースの種類。[tair/redis] を選択します。
アクセス方法
ソースデータベースのアクセス方法。ソースデータベースのデプロイ場所に基づいてアクセス方法を選択します。ソースデータベースがオンプレミス データセンターまたはサードパーティ クラウドプラットフォームにデプロイされている場合は、[パブリック IP アドレス] を選択します。
この例では、[ECS 上のセルフマネージドデータベース] を選択します。
インスタンスリージョン
ECS インスタンスが存在するリージョン。ECS インスタンスがオンプレミス データセンターまたはサードパーティ クラウドプラットフォームにデプロイされている場合は、最も近いソースデータベースのリージョンを選択します。
Alibaba Cloud アカウント間でデータをレプリケートする
Alibaba Cloud アカウント間でデータを移行するかどうかを指定します。[いいえ] を選択します。
ECS インスタンス ID
ソースデータベースがデプロイされている ECS インスタンスの ID。
説明ソースデータベースがクラスタアーキテクチャを使用している場合は、マスターノードがデプロイされている ECS インスタンスの ID を選択します。
インスタンスモード
ソースデータベースのアーキテクチャ。
[スタンドアロン]: 標準のマスターレプリカアーキテクチャ。
[クラスター]: クラスタアーキテクチャ。ソースデータベースがクラスタアーキテクチャを使用している場合は、[ポート番号] フィールドにマスターノードのサービスポート番号を入力します。
ポート番号
ソースデータベースのサービスポート番号。デフォルトのポート番号は [6379] です。
認証方法
ビジネス要件に基づいて、[パスワードログイン] または [シークレットフリーログイン] を選択します。
説明セルフマネージド Redis データベースにパスワードが設定されていない場合は、[シークレットフリーログイン] を選択できます。
データベースパスワード
ソースデータベースへの接続に使用するパスワード。
説明このパラメータはオプションです。パラメータを空のままにすることができます。
カスタムアカウントを使用する場合は、アカウントに読み取り権限があることを確認してください。データベースパスワードは、<user>:<password> 形式で指定します。たとえば、ソースデータベースにログインするために使用するカスタムアカウントのユーザー名が admin で、パスワードが Rp829dlwa の場合は、データベースパスワードとして admin:Rp829dlwa を指定します。
暗号化
宛先データベースへの接続を暗号化するかどうかを指定します。ビジネス要件に基づいて、[非暗号化] または [SSL 暗号化] を選択します。
説明[アクセス方法] を [alibaba Cloud インスタンス] に設定し、セルフマネージド Redis データベースに [SSL 暗号化] を選択した場合は、[CA 証明書] をアップロードし、[CA キー] を入力する必要があります。
宛先データベース
DMS データベースインスタンスを選択
ターゲットデータベースを DMS に登録している場合は、データベースを選択できます。ターゲットデータベースを選択すると、データベースに関する情報を入力する必要はありません。ターゲットデータベースを DMS に登録していない場合は、このオプションは無視してください。
データベースタイプ
ターゲットデータベースの種類。デフォルトでは、[tair/redis] が選択されています。
アクセス方法
[alibaba Cloud インスタンス] を選択します。
インスタンスリージョン
ターゲットインスタンスが存在するリージョン。
インスタンス ID
ターゲットインスタンスの ID。
認証方法
ビジネス要件に基づいて、[パスワードログイン] または [シークレットフリーログイン] を選択します。この例では、[パスワードログイン] を選択します。
説明ApsaraDB for Redis インスタンスで パスワードなしのアクセス機能 が有効になっていない場合は、[パスワードログイン] を選択します。
データベースパスワード
ターゲットデータベースへの接続に使用するパスワード。
説明カスタムアカウントを使用する場合は、アカウントに書き込み権限があることを確認してください。データベースパスワードは、<user>:<password> 形式で指定します。たとえば、ターゲットデータベースにログインするために使用するカスタムアカウントのユーザー名が admin で、パスワードが Rp829dlwa の場合は、データベースパスワードとして admin:Rp829dlwa を指定します。
暗号化
宛先データベースへの接続を暗号化するかどうかを指定します。ビジネス要件に基づいて、[非暗号化] または [SSL 暗号化] を選択します。
タスクオブジェクトを設定し、ページの下部にある [次へ: 詳細設定] をクリックします。次の表にパラメータを示します。
パラメータ
説明
移行タイプ
データ移行タイプ。ビジネス要件に基づいてデータ移行タイプを選択します。
[完全データ移行と増分データ移行] (デフォルト): Redis のネイティブ同期ロジックを使用して、メモリスナップショットによってターゲットデータベースにデータを書き込みます。この方法では、ソースデータベースのデータはダウンタイムなしで移行されます。
ソースデータベースで SYNC または PSYNC 権限がない場合は、完全データ移行 を選択します。
完全データ移行: SCAN コマンドを実行してソースデータベースを走査し、走査されたデータをターゲットデータベースに書き込みます。データの整合性を確保するために、移行中はソースデータベースに新しいデータを書き込まないでください。
競合テーブルの処理モード
[事前チェックとエラー報告] (デフォルト): ターゲットデータベースにキーが存在するかどうかを確認します。
キーが存在する場合、事前チェック中にエラーが返され、データ移行タスクを開始できません。キーが存在しない場合は、事前チェックに合格します。
[エラーを無視して続行]: [ターゲットデータベース内のオブジェクトの存在を確認する] チェック項目をスキップします。同じ名前のキーがターゲットデータベースに既に存在する場合は、キーが上書きされます。
ソースオブジェクト と 選択中のオブジェクト
ソースオブジェクト セクションで移行するオブジェクトを選択し、
をクリックしてオブジェクトを 選択中のオブジェクト セクションに移動します。選択したオブジェクトを削除するには、選択中のオブジェクト セクションでオブジェクトを選択し、
をクリックしてオブジェクトを ソースオブジェクト セクションに移動します。
説明移行するオブジェクトとしてデータベース (DB 0 ~ DB 255) を選択できます。
詳細設定を行い、ページの下部にある [次のステップ: データ検証] をクリックします。
ほとんどの場合、デフォルト設定を保持できます。詳細については、このトピックの「付録: 詳細設定」セクションをご参照ください。
データ検証を設定し、ページの下部にある [次へ: タスク設定の保存と事前チェック] をクリックします。
ほとんどの場合、デフォルト設定を保持できます。詳細については、「データ検証の設定」をご参照ください。
事前チェックを実行し、ページの下部にある [次へ: インスタンスの購入] をクリックします。
事前チェック中に [警告] または [失敗] 項目が生成された場合は、項目を個別に確認します。[詳細の表示] をクリックして問題のトラブルシューティングを行うことができます。[アラート詳細の確認] をクリックしてチェック項目を無視することもできます。ただし、データの不整合などの問題が発生する可能性があり、ビジネスにリスクをもたらす可能性があります。詳細については、「FAQ」をご参照ください。上記の手順を完了したら、もう一度事前チェックを実行します。
[購入] ページで、パラメータを設定し、[購入して開始] をクリックします。
(オプション) DTS データ移行インスタンスが属する [リソースグループ] を選択します。デフォルト値は [デフォルトのリソースグループ] です。
(オプション) DTS データ移行インスタンスの仕様を選択します。仕様が高いほど、移行速度が速くなり、コストが高くなります。デフォルト値は large です。詳細については、「データ移行インスタンスの仕様」をご参照ください。
利用規約を読み、選択します。
DTS データ移行インスタンスを購入すると、データ移行タスクが開始されます。データ移行ページでデータ移行タスクの進捗状況を確認できます。
次のステップ
増分データ移行を実行する場合は、移行が完了したら、コンソールでデータ移行タスクを手動で終了または解放する必要があります。
データを検証できます。詳細については、「移行された Redis データを検証する」をご参照ください。
参考資料
データベースをオンラインで移行したくない場合は、軽量ツール redis-cli を使用して AOF をインポートし、データ移行を行うことができます。詳細については、「AOF を使用してデータを移行する」をご参照ください。
FAQ
接続テストが失敗するのはなぜですか。
トラブルシューティングを行う際は、次の点に注意してください。
アカウントパスワードが無効です。パスワードは
user:password
形式である必要があります。詳細については、「インスタンスに接続する」をご参照ください。ソースデータベースがオンプレミス データセンターまたはサードパーティ クラウドプラットフォームにデプロイされているセルフマネージドデータベースの場合、ネットワークファイアウォールによって DTS サーバーからのアクセスがブロックされている可能性があります。この場合、対応するリージョンの DTS サーバーの CIDR ブロックを手動で追加して、サーバーからのアクセスを許可します。詳細については、「DTS サーバーの CIDR ブロックを追加する」をご参照ください。
移行タスクが実行されないのはなぜですか。
データ移行タスクの実行中にソースデータベースまたはターゲットデータベースの仕様やエンドポイントをスケーリングまたは変更すると、タスクは失敗します。この場合、変更を反映するようにデータ移行タスクを再構成します。
ターゲットインスタンスに使用可能なメモリが不足している場合、またはターゲットインスタンスが特定のシャードがメモリの上限に達しているクラスタインスタンスである場合、DTS データ移行タスクはメモリ不足 (OOM) エラーが原因で失敗します。
ターゲットインスタンスで透過データ暗号化 (TDE) が有効になっている場合、DTS を使用してデータを移行することはできません。
ソースデータベースとターゲットデータベースのデータ量が異なるのはなぜですか。
ソースデータベースの特定のキーに対して有効期限ポリシーが有効になっている場合、これらのキーは有効期限が切れてもすぐに削除されない場合があります。この場合、ターゲットデータベースのキーの数がソースデータベースのキーの数よりも少なくなる可能性があります。
PSYNC コマンドまたは SYNC コマンドを実行してリストデータを転送する場合、DTS はターゲットデータベースの既存のデータに対して FLUSH 操作を実行しません。その結果、重複データが存在する可能性があります。
完全データ移行中にネットワークが中断された場合、DTS は接続が再確立された後に複数の完全データ移行を実行することがあります。この場合、DTS はターゲットデータベースで同じ名前の既存のキーを自動的に上書きします。この時点でソースデータベースで削除操作を実行した場合、コマンドはターゲットデータベースに同期されません。その結果、ターゲットデータベースのキーの数がソースデータベースよりも多くなる可能性があります。
エビクションポリシーが noeviction であるかどうかを確認する必要があるのはなぜですか。
デフォルトでは、データのエビクション方法を指定する maxmemory-policy パラメータは、ApsaraDB for Redis インスタンスに対して volatile-lru に設定されています。ターゲットデータベースに十分なメモリがない場合、データエビクションが原因でソースデータベースとターゲットデータベース間でデータの不整合が発生する可能性があります。この場合、データ移行タスクは実行を停止しません。データの不整合を防ぐために、ターゲットデータベースの maxmemory-policy パラメータを noeviction に設定することをお勧めします。このようにすると、ターゲットデータベースに十分なメモリがない場合、データ移行タスクは失敗しますが、ターゲットデータベースでのデータ損失を防ぐことができます。データエビクションポリシーの詳細については、「Tair のデフォルトのエビクションポリシーとは」をご参照ください。
プレフィックスが 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、FLUSHDB
GEOADD、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 はこれらの Lua スクリプトがターゲットデータベースで実行されるかどうかを識別できません。これは、増分データ移行中にターゲットデータベースが Lua スクリプトの実行結果を明示的に返さないためです。
付録: 詳細設定
パラメータ | 説明 |
失敗した接続の再試行時間 | 接続失敗時のリトライ時間の範囲。データ移行タスクの開始後にソースデータベースまたはターゲットデータベースへの接続に失敗した場合、DTS は指定された時間範囲内で接続の確立を継続的に再試行します。有効値: 10 ~ 1440。単位: 分。デフォルト値: 720。指定された時間範囲内に DTS がソースデータベースとターゲットデータベースに再接続された場合、DTS はデータ移行タスクを再開します。そうでない場合、データ移行タスクは失敗します。ビジネス要件に基づいて接続失敗時のリトライ時間パラメータを設定するか、パラメータを 30 より大きい値に設定することをお勧めします。 DTS が接続を再試行すると、DTS インスタンスの料金が発生します。 |
移行元データベースと移行先データベースで他の問題が発生した場合の、再試行までの待機時間です。 | その他の問題のリトライ時間の範囲。データ移行タスクの開始後にソースデータベースまたはターゲットデータベースで接続以外の問題が発生した場合、DTS はエラーを報告し、リトライ時間範囲内で操作を継続的に再試行します。有効値: 10 ~ 1440。単位: 分。デフォルト値: 10。操作が指定されたリトライ時間範囲内で完了した場合、DTS はデータ移行タスクを再開します。そうでない場合、データ移行タスクは失敗します。パラメータを 10 より大きい値に設定することをお勧めします。 |
完全なデータ移行のスロットリングを有効化 | DTS が増分データをターゲットデータベースに移行すると、ターゲットデータベースの負荷が増加する可能性があります。ビジネス要件に基づいて、1 秒あたりに増分移行できる行数とデータ量の調整しきい値を設定して、ターゲットデータベースの負荷を軽減できます。デフォルト値は [いいえ] です。 |
環境タグ | DTS インスタンスの識別に使用される環境タグ。ビジネス要件に基づいて環境タグを選択できます。 |
ターゲットデータベースキーの有効期限の延長 | 生存時間 (TTL) 値が指定されているターゲットデータベースのキーの延長された有効期限。デフォルト値: 1800。単位: 秒。データ移行中に、ソースデータベースに期限切れのキーが存在する場合、そのキーはターゲットデータベースに移行されません。 |
スレーブノードの使用 | ソースデータベースの インスタンスモード パラメータが クラスター に設定されている場合は、レプリカノードからデータを読み取るかどうかを選択できます。デフォルトでは、[いいえ] が選択されています。これは、DTS がマスターノードからデータを読み取ることを指定します。 |
ETL の設定 | 抽出、変換、書き出し (ETL) 機能を有効にするかどうかを指定します。詳細については、「ETL とは」をご参照ください。有効値:
|
監視とアラート | データ同期タスクのアラートを設定するかどうかを指定します。タスクが失敗した場合、または同期遅延が指定されたしきい値を超えた場合、アラート連絡先に通知が送信されます。有効値:
|