ノート:

Rcloneを使用したOCI Cloud Storageサービスへのデータの移行

イントロダクション

これは、Oracle Cloud Infrastructure (OCI)クラウド・ストレージ・サービスにデータを移行する様々な方法を示す4つのチュートリアル・シリーズのチュートリアル2です。このシリーズは、チュートリアル1: 移行ツールを使用したOCI Cloud Storageサービスへのデータの移動を確認して様々なツールを幅広く理解し、移行のニーズに関連する関連するチュートリアルまたはドキュメントに進むことができるように設定されています。このチュートリアルでは、Rcloneを使用したOCIクラウド・ストレージ・サービスへのデータの移行に焦点を当てます。

OCIは、高性能コンピューティングと低コストのクラウド・ストレージ・オプションをお客様に提供します。Oracleは、オンデマンドのローカル・ストレージ、オブジェクト・ストレージ、ファイル・ストレージ、ブロック・ストレージ、アーカイブ・ストレージを通じて、主要なストレージ・ワークロード要件とユースケースに対応します。

OCIクラウド・ストレージ・サービスは、すべてのエンタープライズ・ニーズに対して、高速で安全で耐久性のあるクラウド・ストレージ・オプションを提供します。OCI File Storage with LustreやOCI Block Volumesサービスなどの高パフォーマンス・オプションから、高パフォーマンスのマウント・ターゲットを備えたOCI File Storageサービスからのフルマネージド・エクサバイト・スケール・ファイルシステム、耐久性とスケーラビリティの高いOCI Object Storageまで。オラクルのソリューションは、AI/MLワークロードなどのパフォーマンス集約型アプリケーションからエクサバイト規模のデータレイクまで、お客様のニーズを満たすことができます。

Rcloneは、クラウドまたはクラウド・ストレージ・ベンダー間でデータを移行するためのオープン・ソースのコマンドライン・ユーティリティです。Rcloneを使用すると、1回かぎりの移行や、ソース・ストレージと宛先ストレージ間の定期的な同期を実行できます。Rcloneは、オブジェクト・ストレージ、ファイル・ストレージ、マウントされたドライブ、およびサポートされている70のストレージ・タイプとの間でデータを移行できます。OCI Object Storageは、Rcloneバックエンド・プロバイダとしてネイティブにサポートされています。パラメータ・オプションを使用して、Rcloneプロセスをスケール・アップおよびスケール・アウトし、転送パフォーマンスを向上させることができます。

移行する必要があるデータの量と、新しいOCIストレージ・プラットフォームへのカットオーバーに使用できるダウンタイムを決定します。バッチ移行は、移行を管理可能な増分に分割するのに適しています。バッチ移行では、様々なウィンドウにわたる特定のアプリケーションの停止時間をスケジュールできます。一部のお客様は、スケジュールされたメンテナンス・ウィンドウを2~4日間で1回かぎりの移行を柔軟に行うことができます。OCI FastConnectを使用すると、1Gから400Gまでのポート速度でOCIと環境間の専用のプライベート接続を作成し、データ転送プロセスを高速化できます。OCI FastConnectは、MegaportやConsoleConnectなどのパートナ・ソリューションと統合して、データ・センターまたはクラウド間相互接続へのプライベート接続を作成し、データを別のクラウド・ベンダーからOCIクラウド・ストレージ・サービスに直接移動できます。詳細は、FastConnectとMegaport Cloud Routerの統合を参照してください。

対象読者

DevOpsエンジニア、開発者、OCIクラウド・ストレージ管理者およびユーザー、ITマネージャ、OCIパワー・ユーザーおよびアプリケーション管理者。

目標

Rcloneを使用してデータをコピーし、OCIクラウド・ストレージ・サービスに同期する方法をご紹介します。

前提条件

Rcloneおよび基本用語の概要

Rcloneは、多くのプロトコルおよびクラウド・プロバイダがサポートし、構成が容易であるため、便利な移行ツールです。これは、あらゆるタイプのデータ・セットに適した汎用移行ツールです。Rcloneは、データ転送を高速化するために複数のノードにわたってスケールアウトするためにバッチに分割できるデータ・セットに対して特に有効です。

Rcloneは、次の移行に使用できます。

Rcloneコマンドとフラグ:

Rcloneの使用例

Rcloneを使用した多数のファイルの移行

Rcloneはディレクトリごとに同期します。数千万個のファイル/オブジェクトを移行する場合は、ディレクトリ/接頭辞がディレクトリごとに約10,000個のファイル/オブジェクトまたはそれ以下に分割されていることを確認することが重要です。これは、Rcloneがメモリーを使いすぎてクラッシュするのを防ぐためです。小さいファイルの数が多い(1000万以上)多くの顧客がこの問題に遭遇することがよくあります。すべてのファイルが1つのディレクトリにある場合は、最初に分割します。

  1. ソース内のファイルのリストを取得するには、次のコマンドを実行します。

    rclone lsf --files-only -R src:bucket | sort > src
    
  2. 分割を使用して、ファイルを1,000-10,000行のチャンクに分割します。次のsplitコマンドは、ファイルを1,000のチャンクに分割し、src_00などのsrc_##という名前のファイルに格納します。

    split -l 1000 --numeric-suffixes src src_
    
  3. 複数のVMインスタンスにファイルを配布して、データ転送をスケール・アウトします。各Rcloneコマンドは次のようになります。

    rclone --progress --oos-no-check-bucket --no-traverse --transfers 500 copy remote1:source-bucket remote2:dest-bucket --files-from src_00
    

    または、単純なforループを使用して、splitコマンドから生成されたファイル・リストを反復処理することもできます。1つのバケットで最大270,000個のファイルを使用したテスト中に、コピー時間が40xを改善し、マイレージが異なる場合があります。

    ノート:ディレクトリ構造または分割ユーティリティを使用してファイルを分割することは、転送を最適化する重要な方法です。

ファイル・システムからOCIオブジェクト・ストレージへのデータの移動にRclone、OKEおよびfpartを同時に使用

複数のKubernetesポッドを使用して、ファイル・システムとオブジェクト・ストレージ間のデータ転送をスケール・アウトできます。並列化により、比較的レイテンシが高く、スループットが高いストレージ・システムへのデータ転送が高速化されます。Rclone、OKEおよびfpartのパーティション・ディレクトリ構造を複数のチャンクに組み合せ、同じ計算ノードまたは複数のノード間でコンテナ上でパラレルにデータ転送を実行するアプローチ。複数のノードにわたって実行すると、各ノードのネットワーク・スループットと計算能力が集計されます。

ステップに従います。

  1. 移行ソース・データにアクセスでき、Rcloneがインストールされているfpsyncオペレータ・ホストとなるホストを特定します。

  2. 次のコマンドを実行してkubectlをインストールします。

    # curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
    # chmod 755 kubectl
    # cp -a kubectl /usr/bin
    
  3. OKEクラスタを管理するためのfpsyncオペレータ・ホストのOCI IAMポリシーを作成します。

    これには、次のポリシーを使用できます。ポッドを制御するための最小限の要件を満たすように、より詳細な権限を構成できます。

    Allow dynamic-group fpsync-host to manage cluster-family in compartment storage
    
  4. OKEクラスタにアクセスできるようにkubeconfigファイルを設定します。詳細は、クラスタへのローカル・アクセスの設定を参照してください。

  5. fpartおよびfpsyncをインストールしてパッチを適用します。データ転送をスケール・アウトするには、Rcloneまたはrsyncをパラレルに実行するには、fpsyncパッチが必要です。fpartパッケージに付属するfpsyncでは、RcloneポッドまたはKubernetesポッドはサポートされません。これらのツールをサポートするにはパッチが必要です。

    次のコマンドを実行して、Ubuntuにインストールします。

    # apt-get install fpart
    # git clone https://github.com/aboovv1976/fpsync-k8s-rclone.git
    # cd fpsync-k8s-rclone/
    # cp -p /usr/bin/fpsync /usr/bin/k-fpsync
    # patch /usr/bin/k-fpsync fpsync.patch
    
  6. コンテナ・イメージを作成します。

    rclone-rsync-imageで使用可能なdockerイメージ・ビルド仕様は、コンテナ・イメージの構築に使用できます。イメージを構築したら、OKEクラスタからアクセスできるレジストリにイメージをアップロードする必要があります。

    # rclone-rsync-image
    # docker build -t rclone-rsync . 
    # docker login
    # docker tag rclone-rsync:latest <registry url/rclone-rsync:latest>
    # docker push <registry url/rclone-rsync:latest>
    

    イメージのコピーは、fra.ocir.io/fsssolutions/rclone-rsync:latest.に保持されます。サンプル・ディレクトリには、出力ファイルの例がいくつか含まれています。

  7. k-fpsyncを実行します。パッチ適用されたfpsync (k-fpsync)は、ソース・ファイル・システムをパーティション化し、複数のKubernetesポッドを使用して転送をスケール・アウトできます。Kubernetesポッド・アンチアフィニティ・ルールは、実行中の転送ワーカー・ポッドがないノードを優先するように構成されています。これにより、ノード上の帯域幅を効果的に利用してパフォーマンスを最適化できます。詳細は、ノードへのポッドの割当てを参照してください。

    ソース・ファイル・システムをfpartオペレータ・ホストにマウントし、すべてのポッドがアクセスする共有ディレクトリを作成します。これは、すべてのログ・ファイルおよびパーティション・ファイルが保持されるディレクトリです。

    次のコマンドは、ファイルシステム/data/srcからOCIオブジェクト・ストレージ・バケットrclone-2にデータを転送します。fpartによって作成されたファイル・システム・パーティションを転送するために、一度に2つのポッドが開始されます。

    # mkdir /data/fpsync
    # PART_SIZE=512 && ./k-fpsync -v -k fra.ocir.io/fsssolutions/rclone-rsync:latest,lustre-pvc  -m rclone -d /data/fpsync  -f $PART_SIZE -n 2 -o "--oos-no-check-bucket --oos-upload-cutoff 10Mi --multi-thread-cutoff 10Mi --no-check-dest --multi-thread-streams 64 --transfers $PART_SIZE  --oos-upload-concurrency 8 --oos-disable-checksum  --oos-leave-parts-on-error" /data/src/ rclone:rclone-2
    

    ノート:実行のログは、次の例では/data/fpsync/{Run-Id}/log directoryにあるrun-IDディレクトリに保持されます。サンプル出力は、サンプル・ディレクトリにあります。

(オプション)テスト環境

推奨は、テストとカスタマ・インタラクションに基づいて行われます。

ノート:一括コピー・スクリプトから実行すると、os syncおよびs5cmdの結果が含まれ、パフォーマンスの詳細が示されます。バルク・コピー・スクリプトの使用方法については、バルク操作のためのOracle Cloud Infrastructure Object Storage Pythonユーティリティの使用を参照してください。os syncおよびs5cmdの使用方法の詳細は、チュートリアル3: OCI Object Storage SyncおよびS5cmdを使用したOCI Cloud Storageサービスへのデータの移動を参照してください。

テスト環境 1:

1 VMインスタンスVM.Standard.E4.Flex、1 OCPU、1Gbpsネットワーク帯域幅、16GBのメモリー。オンプレミスからOCIへの移行をシミュレートするために、コピーされたデータをPHX NFSからIADに移行します。

データ・セット

テスト環境 2:

VMインスタンス:テストごとに2つのVMインスタンスが使用され、24個のOCPU、24Gbpsネットワーク帯域幅、384GBのメモリーを持つVM.Standard.E4.Flexが使用されました。Oracle Linux 8はLinuxテストに使用されました。

テストに使用されるデータセット:次のファイル数とサイズを持つ14個のメイン・ディレクトリ。

データ・セット・ディレクトリ Size ファイル数 各ファイルのサイズ
ディレクトリ 1 107.658 GiB 110,242 1 MiB
ディレクトリ 2 1.687 GiB 110,569 15 MiB
ディレクトリ 3 222 GiB 111 2 GiB
ディレクトリ 4 1.265 TiB 1,295 1 GiB
ディレクトリ 5 26.359 GiB 1,687 16 MiB
ディレクトリ 6 105.281 MiB 26,952 4 KiB
ディレクトリ 7 29.697 MiB 30,410 1 KiB
ディレクトリ 8 83.124 GiB 340,488 256 KiB
ディレクトリ 9 21.662 GiB 354,909 64 KiB
ディレクトリ 10 142.629 GiB 36,514 4 MiB
ディレクトリ 11 452.328 MiB 57,898 8 MiB
ディレクトリ 12 144 GiB 72 2GiB
ディレクトリ 13 208.500 GiB 834 256 MiB
ディレクトリ 14 54.688 GiB 875 64 MiB

ノート:

Method 至: 自 Time コマンド フラグ/ノート
s5cmd NFS/ファイルPHXからオブジェクトIADへ 54m41.814s コピー --numworkers 74
OS同期 NFS/ファイルPHXからオブジェクトIADへ 65m43.200s NA --parallel-operations-count 50
rclone NFS/ファイルPHXからオブジェクトIADへ 111m59.704s コピー --oos-no-check-bucket --no-check-dest --ignore-checksum --oos-disable-checksum --transfers 50
rclone オブジェクトPHXからオブジェクトIAD 28m55.663s コピー --oos-no-check-bucket --no-check-dest --ignore-checksum --oos-disable-checksum --transfers 400。2つのVM間で同じコマンドが実行され、同時実行性が800の転送
python一括コピー・スクリプト オブジェクトPHXからオブジェクトIAD 25m43.715s デフォルト 1 VM、50ワーカー、1回につき100,000個のファイルがキューに入れられる

s5cmdおよびos syncコマンドは、ファイルシステム/NFSをオブジェクト・ストレージに対して適切に実行します。バルク・コピー・スクリプトはバケットからバケットへの転送のみを行い、NFS移行についてテストされませんでした。

rcloneおよびpythonバルク・コピー・スクリプトのみがリージョン間でバケットからバケットへの転送を実行できるため、他のツールはテストされませんでした。pythonバルク・コピー・スクリプトは、クロス・リージョン・バケットからバケットへのデータでより適切ですが、OCI Object Storageとの互換性はありますが、rcloneでは多くのバックエンドおよびクラウド・プロバイダがサポートされます。

rcloneを使用して小規模なテスト実行を行い、Microsoft Azure Blob Storage、Amazon Simple Storage Service (Amazon S3)、およびGoogle Cloud Platform Cloud StorageからOCI Object Storageにデータを転送し、これらのタイプの転送に対してツールが機能することを検証しました。詳細は、Rcloneを使用したクラウド内のオブジェクト・ストレージへのデータの移動を参照してください。

テスト環境 3:

VMインスタンス:テストごとに1から2個のVMインスタンスが使用され、24個のOCPU、24Gbpsネットワーク帯域幅、384GBのメモリーを持つVM.Standard.E4.Flexが使用されました。Oracle Linux 8はLinuxテストに使用されました。すべてのテストはバケット間でした。

合計サイズ ファイル数 ファイル・サイズ範囲
7.74 TiB 1,000,000 30 MiB
Method 至: 自 Time コマンド フラグ ノート  
rclone オブジェクト間IAD -> IAD 18h39m11.4s コピー --oos-no-check-bucket --fast-list --no-traverse --transfers 500 --oos-chunk-size 10Mi 1 VM、ファイル数が多いため非常に遅く、ソースへのコールをリスト  
rclone オブジェクト間IAD -> IAD 55m8.431s コピー --oos-no-check-bucket --no-traverse --transfers 500 --oos-chunk-size 10Mi --files-from <file> 2 VM、VM当たり500の転送、オブジェクト/ファイル・リストに一度に1,000個のファイルが供給され、ソースと宛先のリストが防止され、パフォーマンスが向上します  
python一括コピー・スクリプト オブジェクト間IAD -> IAD 28m21.013s NA デフォルト 1 VM、50ワーカー、1回につき100,000個のファイルがキューに入れられる  
python一括コピー・スクリプト オブジェクト間IAD -> IAD NA NA デフォルト 2つのVM、VM当たり50人のワーカー、一度に100,000個のファイルがキューに入れられます。429個のエラーを受け取り、スクリプトがハングし、完了できませんでした  
s5cmd オブジェクト間IAD -> IAD 14m10.864s コピー デフォルト(256人の従業員) 1 VM NA
s5cmd オブジェクト間IAD -> IAD 7m50.013s コピー デフォルト 2 VM、各VMに256人のワーカー ほぼ半分の時間を1 VMとして実行
s5cmd オブジェクト間IAD -> IAD 3m23.382s コピー --numworkers 1000 1 VM、1,000人の従業員 複数のテストで、これがs5cmdを使用したこのデータ・セットの最適な実行であることがわかりました
rclone オブジェクト間IAD -> PHX 184m36.536s コピー --oos-no-check-bucket --no-traverse --transfers 500 --oos-chunk-size 10Mi --files-from <file> 2 VM、VM当たり500転送、オブジェクト/ファイル・リストに一度に1,000ファイルを提供  
python一括コピー・スクリプト オブジェクト間IAD -> PHX 35m31.633s NA デフォルト 1VM、50ワーカー、一度に100,000個のファイルがキューに入れられる  

s5cmdコマンドは、大きいファイル数と小さいファイルに対して一貫して最適に実行されました。s5cmdは、同じテナンシおよび同じリージョン内でバケットからバケットへのコピーのみを実行できるため制限されます。

ファイルがコマンドにフィードされ、別のVMにスケール・アウトされると、rcloneが大幅に改善されます。Rcloneは、他のツールよりも動作が遅くなる可能性があり、Rcloneがサポートする様々なプラットフォームおよび実行できる移行のタイプで最も汎用的です。

OCI Object Storage Bulk Copy Python APIは、OCIネイティブのCopyObject APIのみを使用でき、スロットルされる前に最大50人のワーカーの同時実行性しか取得できません。

IADからPHXへのテストは、IADからIADに最も効果的であったものに対してのみ行われ、問題のあるテストは再実行されませんでした。IADからPHXへのs5cmdは、同じリージョン内でバケット間コピーのみを実行できるため、実行されませんでした。

次のステップ

移行のニーズに関連する関連チュートリアルに進みます。データをOCIクラウド・ストレージ・サービスに移動するには:

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。