本ページでは、主に OssImport の一般的な適用方法と代表的な要件の実装方法について説明します。

OssImport の概要

展開モード

OssImport には、スタンドアロンモードと分散モードの 2 つの展開モードがあります。

  • データサイズが 30 TB 未満の小規模なデータ移行は、スタンドアロンモードで十分です。
  • 大規模データサイズの移行には、分散モードを推奨します。
時間別のトラフィック制限

OssImport はマスターワーカーの分散アーキテクチャに基づいています。 ワーカーはトラフィック制限機能を提供しています。 設定ファイル sys.propertiesworkerMaxThroughput (KB/s) (KB / s) 項目を変更することで、トラフィック制限を実装できます。 この設定項目はすぐには有効になりません。 設定項目を有効にするために、設定の変更後にサービスを再起動します。

分散展開モードで、各ワーカーの $OSS_IMPORT_WORK_DIR/conf にある sys.properties を変更してからサービスを再起動します。

crontab を使用して sys.properties の時限変更を実装してから、サービスを再起動して時間別のトラフィック制限を実装します。

ワーカーを追加

ジョブを送信する前にワーカーリストを決定します。 現在の OSS はワーカーの動的追加をサポートしていません。

移行が不要のデータ検証

OssImport は移行を伴わないデータ検証をサポートしています。 ジョブ構成ファイル job.cfg または local_job.cfg では、構成項目 jobTypeimport ではなく audit です。 その他の設定項目はデータ移行と同じです。

データ移行の増分モード

データ移行の増分モードとは、データ移行ジョブの開始後にまず完全移行を実行し、次に設定された間隔で自動的に増分データ移行操作を実行するプロセスを指します。 最初のデータ移行ジョブは完全移行です。 ジョブは送信直後に開始されます。 それ以降のデータ移行ジョブは、設定された間隔ごとに 1 回開始されます。 データ移行の増分モードは、データのバックアップとデータの同期に適用されます。

増分モードには 2 つの構成項目があります。

  • job.cfg の isIncremental は、増分移行モードが有効になっているかどうかを示します。 true は増分モードが有効であることを、falseは、増分モードが無効になっていることを意味します。 既定値は false です。
  • job.cfg の incrementalModeInterval は、増分モードの同期間隔を秒単位で指定します。 設定は、isIncremental が true に設定されている場合に使用されます。 設定可能な最小値は 900 秒です。 3600 秒よりも小さい値に設定することは推奨しません。大量のリクエストが無駄になり、追加のシステムオーバーヘッドが発生してしまうからです。
オブジェクト移行のためのフィルタリング条件の指定

指定したフィルタ条件を満たすオブジェクトのみが移行されます。 OssImport は、prefixlast modified timeの指定をサポートしています。

  • job.cfg の srcPrefix 設定では、移行するオブジェクトのプレフィックスを指定します。 既定では空です。
    • srcType=local の場合は、ローカルディレクトリをフルパスで入力し、入力値を / で区切り、入力値を / で終了させます c:/example/ または /data/example/ など)。
    • srcTypeossqiniubosks3youpai、または s3 の場合は、data/to/oss/ のように、バケット名を除いて、同期するオブジェクトのプレフィックスを入力します。 すべてのオブジェクトの srcPrefix は空に設定する必要があります。
  • job.cfg の importSince オプションでは、移行オブジェクトの最終更新日時を指定します。 整数かつ秒単位で表されます。 importSince 設定は、UNIX タイムスタンプ形式です。つまり、1970 年 1 月 1 日の 00:00 UTC からの秒数です。 date +%s コマンドにより、値を取得できます。 既定値値は "0" で、すべてのデータを移行することを示します。 増分モードのデータ移行は、最初の完全移行でのみ有効です。 非増分モードは、移行ジョブ全体に対して有効です。
    • オブジェクトの LastModified TimeimportSince 以前の場合、オブジェクトは移行されます。
    • オブジェクトの LastModified TimeimportSince より後の場合は、オブジェクトは移行されません。

一般的なシナリオ

サードパーティーのストレージサービスから OSS へのシームレスな切り替え

次の手順に従って、他のストレージサービスから OSS にシームレスに切り替えることができます。

  1. 完全移行。 この時点では、ビジネスはまだサードパーティー製のストレージサービスで実行されています。 データ移行 T1 の開始時間を記録します。 時間は UNIX のタイムスタンプ形式、つまり 1970 年 1 月 1 日の UTC 00:00 からの秒数であることにご注意ください。 date +%sコマンドにより値を取得できます。
  2. OSS イメージのオリジン検索機能を開きます。 データ移行が完了したら、OSS コンソールでバケットのイメージのオリジン取得機能を設定します。
  3. 読み取り / 書き込みを OSS に切り替えます。 この時点で、T1 より前のデータは OSS から読み取られ、T1 より後のデータはイメージオリジン検索を使用してサードパーティーサービスから読み取られ、新しいデータは OSS に完全に書き込まれます。
  4. 増分データ移行。 構成ファイル (job.cfg または local_job.cfg) では、増分移行ジョブの設定項目は importSince=T1です。 増分移行は T2 で完了します。
    増分データ移行は、データ移行の増分モードではありません。
  5. サードパーティ製のストレージを削除します。 T2 以降は、業務の読み書きはすべて OSS で行われ、サードパーティーのストレージは履歴データのコピーにすぎません。 サードパーティストレージを保持するか削除するかは、ユーザーの判断で決定できます。 OssImport はデータの移行と検証を行う役割があります。 データは削除されません。
ローカルデータの OSS への移行

ローカルデータを OSS に移行するためのツール

  • 30 TB 未満のローカルデータファイルを移行する場合、またはストレージサービスをローカルファイルシステムにマウントする場合は、ossutil の使用を推奨します。 このツールは簡単で使いやすく便利です。 OssUtil はオブジェクトレベルでの増分アップロードをサポートしており、-u/--update および --snapshot-pathオプションを介して機能を実装します。 詳細な説明については、ossutil help cp コマンドを実行してご確認ください。
  • 大規模データの移行には、OssImportの分散バージョンを推奨します。
    ローカルデータの増分移行中、Windows の cp と mv、Linux の -t または -a オプション付きの mv と rsync など、ファイルシステムの一部の操作では、オブジェクトの最終更新日時は変更されません。 これらの操作によるデータ変更は検出されず、OSS にも同期されません。
OSS 間のデータ移行
  • OssImport を使用する場合
    • 異なるリージョンの OSS 間におけるデータ移行のためのクロスリージョンレプリケーション機能を追加する場合、コンソールで設定することができます。
    • セキュリティ上の理由から、あるリージョンがクロスリージョンレプリケーションをまだサポートしていない場合は、OssImport を使用することでデータを移行またはバックアップすることができます。
    • 同じリージョン内の異なるアカウントとバケット間でのデータ移行。
    • OSS 内で直接データを移行するため、Alibaba Cloud イントラネットを推奨します。つまり、internal の ECS または OSS ドメイン名を使用します。
  • OSS 内での直接データ移行の料金
    • internal のドメイン名を使用する場合、トラフィック料金は発生しませんが、リクエストとストレージ料金を支払う必要があります。
    • internal でドメイン名を使用しなかった場合は、トラフィック料金が発生する可能性があります。
  • 推奨されない使用例
    • クロスリージョンレプリケーションサービスがアクティブ化されているリージョン間でのデータ移行。
    • 増分モードにより OSS 間でオブジェクトに対する変更を同期する場合、OssImport はオブジェクト変更の同期 (put/append/multipart) のみをサポートし、読み取りおよび削除操作の同期はサポートしません。 データの同期が特定の SLA によって適時に行われることは保証されていません。 このオプションを選択するときは注意してください。 アップロードコールバックの使用を推奨しています。

移行手順

ECS およびトラフィック

クラウド (非ローカル) から OSS にデータを移行する際、帯域幅リソースが不十分な場合は、移行用の従量課金の ECS インスタンスを購入することを推奨します。 ECS の設定

  • 課金方法に [従量課金] を選択します。
  • OSS の該当するリージョンを選択します。
  • 帯域幅ピークは100 MB を選択します。

移行ジョブ構成で、targetDomain を internal を含むイントラネットドメイン名に設定します。 ソースエンドも OSS の場合は、srcDomaininternal を含むイントラネットドメイン名に設定します。 これにより、OSS ソースドメイン名からのダウンロードにコストがかからず、OSS のアクセスに対してのみ料金が請求されます。

HTTP データの OSS への移行

HTTP データ移行ジョブで設定するパラメーター:

  • job.cfgで、srcTypesrcType=http に設定します。 大文字と小文字が区別されます。
  • job.cfg の httpListFilePath には、c:/example/http.list/root/example/http.list などの HTTP アドレス一覧ファイルへの絶対パスを指定します。 完全な HTTP リンクは 127.0.0.1/aa/bb.jpg です。 分割メソッドが異なっていると、アップロード後に OSS 上のオブジェクトパスが異なる可能性があります。
    http://127.0.0.1/aa/   bb.jpg      #  The first line
      http://127.0.0.1/      aa/bb.jpg   # The second line

    最初の行が OSS にインポートされた後のオブジェクト名は destPrefix + bb.jpg で、2 行目のオブジェクト名は destPrefix + aa/bb.jpg です。 httpPrefixColumn パラメーターは、ドメイン名の列を指定します。 前述の 127.0.0.1/aa/ または 127.0.0.1/ など、最初の列が既定で適用されます。 relativePathColumn は、前述の bb.jpgaa/bb.jpg など、OSS 内のオブジェクト名を指定します。 オブジェクトに複数の列がある場合、次のようになります。

    http://127.0.0.1/aa/   bb/cc dd/ee  ff.jpg
    次のように設定を行う必要があります。: httpPrefixColumn=1 , relativePathColumn=4 。
  • job.cfg 内の destAccessKeydestSecretKeydestDomain および destBucket の設定項目。

  • taskObjectCountLimit: 各タスクの最大オブジェクト数。 既定値は 10,000 です。
  • taskObjectSizeLimit: 各タスクの最大データサイズ。 マスターがタスクを分割している時、それぞれの HTTP オブジェクトがソースから取得したオブジェクトの大きさである場合、各オブジェクトには HTTP リクエストのオーバーヘッドが 1 つずつあるため、タスク割り当ての効率に悪影響を及ぼし、タスクの並行処理および移行の効率性が低下します。そのため、このパラメーターは HTTP データの移行には無効です。
  • Domain name: httpListFilePath によって指定されたオブジェクトの最初の列。同じドメイン名を持つ連続ジョブは taskObjectCountLimit パラメーターに従って分割され、異なるドメイン名を持つ連続ジョブは異なるタスクに分割されることで、接続をより効率的に再利用できるようになります。 例:
    http://mingdi-hz.oss-cn-hangzhou.aliyuncs.com/ import/test1.txt
      http://mingdi-hz.oss-cn-hangzhou.aliyuncs.com/ import/test2.txt
      http://mingdi-bj.oss-cn-beijing.aliyuncs.com/ import/test3.txt
      http://mingdi-bj.oss-cn-beijing.aliyuncs.com/ import/test4.txt
    taskObjectCountLimit taskObjectCountLimit 値が 2 より大きい場合、ジョブは 2 つのタスクに分割されますが、以下の条件では、ジョブは 4 つのタスクに分割されます。
    http://mingdi-hz.oss-cn-hangzhou.aliyuncs.com/ import/test1.txt
      http://mingdi-bj.oss-cn-beijing.aliyuncs.com/ import/test3.txt
      http://mingdi-hz.oss-cn-hangzhou.aliyuncs.com/ import/test2.txt
      http://mingdi-bj.oss-cn-beijing.aliyuncs.com/ import/test4.txt

    そのため、httpListFilePath で指定された HTTP アドレス一覧オブジェクトは、まずドメイン名でソートされます。

ネットワークトラフィックおよびパラメーターの設定

次のパラメーターの設定はネットワークトラフィックに関連しています。

  • sys.properties では、workerTaskThreadNum パラメーターはワーカーによる並行処理のジョブ数を示します。 ネットワーク品質が悪い場合、または同時実行性が高い場合は、多数のタイムアウトエラーが発生する可能性があります。 この時点で、同時実行性を低くし、設定項目を変更してサービスを再開することを推奨します。
  • sys.properties では、workerMaxThroughput (KB / s) パラメーターはワーカーのトラフィック上限を示します。 ソース側の帯域幅調整やネットワークの制限外トラフィックの制限など、トラフィックを制限する場合は、このパラメーターの値をマシンで許可されている最大ネットワークトラフィックよりも小さくし、ビジネス要件に基づいて評価する必要があります。
  • job.cfg の taskObjectCountLimit パラメーターは、各タスクのオブジェクトの最大数を示します。 既定値は 10,000 です。 このパラメーターは、タスクの数に影響します。 タスクの数が少なすぎると、並行タスクの効率性が低下する可能性があります。
  • job.cfg の taskObjectSizeLimit は、各タスクの最大データサイズを示します。 既定値は 1 GB です。 このパラメーターは、タスクの数に影響します。 タスクの数が少なすぎると、並行タスクの効率が低下する可能性があります。
    • 移行を開始する前に、設定ファイルのパラメーターを決定することを推奨します。
    • sys.properties 内のパラメーターに対する変更は、移行サーバーを再起動した後に有効になります。
    • job.cfg ジョブが送信された後は、ジョブの設定パラメーターを変更することはできません。