次の方法で共有


Azure Managed Lustre で Azure Blob Storage を使用する

Azure Managed Lustre は Azure Blob Storage と統合され、BLOB コンテナーからファイル システムにデータをインポートするプロセスを簡略化します。 ファイル システムから長期ストレージ用の BLOB コンテナーにデータをエクスポートすることもできます。 この記事では、Azure Managed Lustre ファイル システムと BLOB 統合を使用するための概念について説明します。

互換性のある BLOB コンテナーに必要な要件と構成については、 Blob 統合の前提条件を参照してください。

BLOB 統合の概要

クラスターの作成中に BLOB 統合を構成できますクラスターの作成後いつでもインポート ジョブを作成できます。 データがインポートされたら、他のファイル システム データと同様にデータを操作できます。 新しいファイルが作成されるか、ファイル システムで既存のファイルが変更されると、クライアントで Lustre CLI コマンドを実行するか、エクスポート ジョブを使用してデータをエクスポート して、これらのファイルをストレージ アカウントにエクスポートできます

BLOB コンテナーから Azure Managed Lustre ファイル システムにデータをインポートすると、ファイル名 (名前空間) とメタデータのみが Lustre 名前空間にインポートされます。 BLOB の実際の内容は、クライアントが最初にアクセスしたときにインポートされます。 Lustre 階層ストレージ管理 (HSM) 機能が BLOB の内容をファイル システム内の対応するファイルに取り込む間に、データに最初にアクセスする際に若干の遅延が発生します。

sudo 機能を備えたマウントされたクライアントから Lustre の lfs hsm_restore コマンドを使用して、BLOB の内容をプリフェッチできます。 詳細については、「 Blob Storage からのデータのリストア」を参照してください。

Azure Managed Lustre は、階層型名前空間が有効になっているストレージ アカウントと、非階層型またはフラットな名前空間を持つストレージ アカウントと連携します。 次の小さな違いが適用されます。

  • 階層型名前空間が有効になっているストレージ アカウントの場合、Azure Managed Lustre は BLOB ヘッダーから POSIX 属性を読み取ります。
  • 階層型名前空間が有効になっていないストレージ アカウントの場合、Azure Managed Lustre は BLOB メタデータから POSIX 属性を読み取ります。 メタデータを保持するために、BLOB コンテナーの内容と同じ名前の別の空のファイルが作成されます。 このファイルは、Azure Managed Lustre ファイル システム内の実際のデータ ディレクトリの兄弟です。

Blob Storage からのインポート

クラスターの作成中に Blob Storage との統合を構成できます。またクラスターの作成後いつでもインポート ジョブを作成できます。

BLOB コンテナーの要件

クラスターの作成時に BLOB 統合を構成する場合は、インポートするコンテナーとログ コンテナーという 2 つの個別の BLOB コンテナーを識別する必要があります。 インポートするコンテナーには、Azure Managed Lustre ファイル システムにインポートするデータが含まれています。 ログ コンテナーは、インポート ジョブのログを格納するために使用されます。 これら 2 つのコンテナーは、同じストレージ アカウントに存在する必要があります。 BLOB コンテナーの要件の詳細については、「 Blob 統合の前提条件を参照してください。

プレフィックスのインポート

BLOB コンテナーからデータをインポートする場合は、必要に応じて 1 つ以上のプレフィックスを指定して、Azure Managed Lustre ファイル システムにインポートされたデータをフィルター処理できます。 プレフィックスの 1 つに一致する BLOB コンテナー内のファイル名は、ファイル システムのメタデータ レコードに追加されます。 クライアントが最初にファイルにアクセスすると、その内容が BLOB コンテナーから取得され、ファイル システムに格納されます。

Azure portal で、クラスターの作成時に Advanced タブの Import prefix フィールドを使用して、BLOB コンテナーからインポートするデータを指定します。 これらのフィールドは、初期インポート ジョブにのみ適用されます。 クラスターの作成後にインポート プレフィックスを変更することはできません。

インポート ジョブの場合は、ジョブの作成時にインポート プレフィックスを指定できます。 Azure portal から、 Import プレフィックス フィールドにインポート プレフィックスを指定できます。 REST API を使用してインポート ジョブを作成するときに、インポート プレフィックスを指定することもできます。

インポート プレフィックスを指定する場合は、次の点に注意してください。

  • 既定のインポート プレフィックスは /。 この既定の動作では、BLOB コンテナー全体の内容がインポートされます。
  • 複数のプレフィックスを指定する場合、プレフィックスは重複しない必要があります。 たとえば、 /data/data2を指定した場合、プレフィックスが重複しているため、インポート ジョブは失敗します。
  • BLOB コンテナーが階層型名前空間が有効になっているストレージ アカウント内にある場合は、プレフィックスをファイル パスと考えることができます。 パスの下の項目は、Azure Managed Lustre ファイル システムに含まれています。
  • BLOB コンテナーが非階層 (またはフラット) 名前空間を持つストレージ アカウント内にある場合、インポート プレフィックスは、BLOB 名の先頭と比較される検索文字列と考えることができます。 コンテナー内の BLOB の名前がインポート プレフィックスとして指定した文字列で始まる場合、そのファイルはファイル システムでアクセス可能になります。 Lustre は階層ファイル システムであり、BLOB 名の / 文字は Lustre に格納されるとディレクトリ区切り記号になります。

競合解決モード

BLOB コンテナーからデータをインポートする場合は、BLOB コンテナーとファイル システムの間の競合を処理する方法を指定できます。 このオプションは、既存のクラスターに対して実行されるインポート ジョブにのみ適用されます。 次の表に、使用可能な競合解決モードとその説明を示します。

モード 説明
fail 競合が検出された場合、インポート ジョブはすぐに失敗し、エラーが発生します。
skip 競合が検出された場合、インポート ジョブはファイルをスキップします。
overwrite-dirty インポート ジョブは、競合するパスを評価して、削除して再インポートする必要があるかどうかを確認します。 詳細については、「 overwrite-dirty モードを参照してください。
overwrite-always インポート ジョブは競合するパスを評価し、ダーティな場合は常に削除/再インポートし、クリーンな場合はリリースします。 詳細については、 overwrite-always モードを参照してください。

上書きダーティ モード

overwrite-dirty モードは、競合するパスを評価して、削除して再インポートする必要があるかどうかを確認します。 大まかに言うと、 overwrite-dirty モードでは HSM の状態がチェックされます。 HSM の状態が CleanArchived の場合は、Lustre が認識できる限りデータが BLOB コンテナーと同期されていることを意味し、必要に応じて属性のみが更新されます。 それ以外の場合、ファイルは削除され、BLOB コンテナーから再インポートされます。

HSM の状態を確認しても、Lustre 内のファイルが BLOB コンテナー内のファイルと一致することは保証されません。 Lustre のファイルが BLOB コンテナー内のファイルとできるだけ密接に一致することを確認する必要がある場合は、 overwrite-always モードを使用します。

常に上書きモード

overwrite-always モードでは、競合するパスが評価され、ダーティな場合は常に削除/再インポートされ、クリーンな場合はリリースされます。 このモードは、ファイル システムが常に BLOB コンテナーと同期していることを確認する場合に便利です。 また、以前に復元されたすべてのファイルは最初のアクセス時に解放または削除/再インポートされるため、最もコストの高いオプションでもあります。

エラー許容度

BLOB コンテナーからデータをインポートする場合は、エラー許容度を指定できます。 エラー許容レベルは、インポート プロセス中に発生した一時的なエラー (オペレーティング システム エラーやネットワークの中断など) をインポート ジョブが処理する方法を決定します。 このコンテキストのエラーは、競合解決モードによって処理されるファイルの競合を指さないことに注意してください。

インポート ジョブでは、次のエラー許容オプションを使用できます。

  • エラーを許可しない (既定値): インポート中にエラーが発生した場合、インポート ジョブはすぐに失敗します。 これが既定の動作です。
  • エラーの許可: エラーが発生し、エラーがログに記録された場合、インポート ジョブは続行されます。 インポート ジョブが完了したら、ログ コンテナーでエラーを表示できます。

BLOB インポート ジョブに関する考慮事項

次の項目は、BLOB コンテナーからデータをインポートするときに考慮する必要があります。

  • 一度に実行できるインポートまたはエクスポート アクションは 1 つだけです。 たとえば、インポート ジョブが進行中の場合、別のインポート ジョブを開始しようとするとエラーが返されます。
  • インポート ジョブは取り消すことができます。 既存のクラスターで開始されたインポート ジョブ、またはクラスターの作成時に開始されたインポート ジョブを取り消すことができます。
  • クラスターのデプロイは、対応するインポート ジョブが完了する前に正常に返される可能性があります。 インポート ジョブはバックグラウンドで引き続き実行されます。 インポート ジョブの進行状況は、次の方法で監視できます。
    • Azure portal: Azure portal にインポート ジョブの状態が表示されます。 ファイル システムに移動し、 Blob 統合 を選択してインポート ジョブの状態を表示します。
    • ルート ディレクトリの Lustre ファイル: インポート時に、 /lustre/IMPORT_<state>.<timestamp_start> に似た名前のファイルが Lustre ルート ディレクトリに作成されます。 <state> プレースホルダーは、インポートの進行に合って変更されます。 インポート ジョブが正常に完了すると、ファイルが削除されます。
  • 完了したインポート ジョブの詳細を表示するには、ログ コンテナーを確認します。 ログ コンテナーには、インポート 中に発生したエラーや競合など、インポート ジョブのログが含まれます。
  • 何らかの理由でインポート ジョブが失敗した場合、インポートされたファイルの数や競合の数など、インポート ジョブに関する完全な統計情報がない可能性があります。

Blob Storage からデータを復元する

既定では、対応するファイルがクライアントから初めてアクセスされるときに、BLOB の内容がファイル システムにインポートされます。 特定のワークロードやシナリオでは、最初にアクセスする前に BLOB コンテナーからデータを復元することをお勧めします。 BLOB の内容をプリフェッチして、インポート後に BLOB に初めてアクセスするときの初期遅延を回避できます。 BLOB の内容をプリフェッチするには、sudo 機能を備えたマウントされたクライアントから Lustre の lfs hsm_restore コマンドを使用できます。 次のコマンドは、BLOB の内容をファイル システムにプリフェッチします。

nohup find local/directory -type f -print0 | xargs -0 -n 1 sudo lfs hsm_restore &

このコマンドは、復元要求を非同期的に処理するようにメタデータ サーバーに指示します。 コマンド ラインは復元の完了を待ちません。つまり、コマンド ラインはメタデータ サーバーで復元のために多数のエントリをキューに入れる可能性があります。 この方法では、メタデータ サーバーが過剰になり、復元のパフォーマンスが低下する可能性があります。

この潜在的なパフォーマンスの問題を回避するには、パスを確認し、指定したサイズのバッチで復元要求を発行する基本的なスクリプトを作成します。 適切なパフォーマンスを実現し、メタデータ サーバーの負荷を抑えるために、1,000 ~ 5,000 の要求の任意の場所でバッチ サイズを使用することをお勧めします。

例: バッチ復元スクリプトを作成する

次の例は、BLOB コンテナーからデータをバッチで復元するスクリプトを作成する方法を示しています。 次の内容を含む file_restorer.bash という名前のファイルを作成します。

#!/bin/bash
set -feu
set -o pipefail
main()
{
    if [ $# -lt 2 ]; then
        echo "$0 <path_to_fully_restore> <max_restores_at_a_time>"
        echo "Missing parameters"
        exit 1
    fi
    local RESTORE_PATH=$1
    local MAX_RESTORES=$2
    local FILES_LIST="/tmp/files_to_restore"
    find "$RESTORE_PATH" -type f > "$FILES_LIST"
    local TOTAL_FILES
    TOTAL_FILES=$(wc -l "$FILES_LIST")
    local RESTORE_TOTAL=0
    local RESTORE_COUNT=0
    while IFS="" read -r p || [ -n "$p" ]; do
        printf '%s\n' "$p"
        lfs hsm_restore "$p"
        ((RESTORE_COUNT++)) || true
        ((RESTORE_TOTAL++)) || true
        if (( RESTORE_COUNT >= MAX_RESTORES )); then
            while true; do
                local STATE
                STATE=$(lfs hsm_state "$p")
                RELEASED=') released exists archived'
                if ! [[ $STATE =~ $RELEASED ]]; then
                    echo "Restored $RESTORE_TOTAL / $TOTAL_FILES"
                    break
                fi
                sleep 0.2
            done
            RESTORE_COUNT=0
        fi
    done < "$FILES_LIST"
}
main "$@"

次の例は、サンプル出力と共にスクリプトを実行する方法を示しています。

root@vm:~# time ~azureuser/file_restorer.bash /lustre/client/ 5000
Finding all files to restore beneath: /lustre/client/
Found 78100 to restore
Initiating restores in batches of 5000...
Restored 5000 / 78100
Restored 10000 / 78100
Restored 15000 / 78100
Restored 20000 / 78100
Restored 25000 / 78100
Restored 30000 / 78100
Restored 35000 / 78100
Restored 40000 / 78100
Restored 45000 / 78100
Restored 50000 / 78100
Restored 55000 / 78100
Restored 60000 / 78100
Restored 65000 / 78100
Restored 70000 / 78100
Restored 75000 / 78100
Restored 78100 / 78100
real	6m59.633s
user	1m20.273s
sys	0m37.960s

Note

現時点では、Azure Managed Lustre は最大スループットレートが約 7.5GiB/秒で Blob Storage からデータを復元します。

エクスポート ジョブを使用して Blob Storage にデータをエクスポートする

エクスポート ジョブを することで、Azure Managed Lustre ファイル システムから Azure Blob Storage の長期ストレージにデータをコピーできます

エクスポート ジョブ中にエクスポートされるファイルはどれですか?

Azure Managed Lustre システムからファイルをエクスポートする場合、ファイル システムの作成時に指定した BLOB コンテナーにすべてのファイルがコピーされるわけではありません。 エクスポート ジョブには、次の規則が適用されます。

  • エクスポート ジョブは、新しいファイルまたは内容が変更されたファイルのみをコピーします。 ファイル システムの作成時に BLOB コンテナーからインポートしたファイルが変更されていない場合、エクスポート ジョブはファイルをエクスポートしません。
  • メタデータが変更されたファイルはエクスポートされません。 メタデータの変更には、所有者、アクセス許可、拡張属性、名前の変更 (名前の変更) が含まれます。
  • Azure Managed Lustre ファイル システムで削除されたファイルは、エクスポート ジョブ中に元の BLOB コンテナーでは削除されません。 エクスポート ジョブでは、BLOB コンテナー内のファイルは削除されません。

アクティブ・ファイル・システムでのエクスポート・ジョブの実行

アクティブなファイル システムでは、エクスポート ジョブ中にファイルを変更すると、エラー状態になることがあります。 このエラー状態により、ファイル システム内のすべてのデータを Blob Storage にエクスポートできないことがわかります。 このような場合は、新しいエクスポート ジョブを作成 してエクスポートを再試行できます。 新しいジョブは、前のジョブでコピーされなかったファイルのみをコピーします。

アクティビティが多いファイル システムでは、ファイルが頻繁に変更されるため、再試行が複数回失敗する可能性があります。 ファイルが Blob Storage に正常にエクスポートされたことを確認するには、対応する BLOB のタイムスタンプを確認します。 ジョブが完了したら、デプロイ時に構成されたログ コンテナーを表示して、エクスポート ジョブに関する詳細情報を表示することもできます。 ログ コンテナーは、失敗したファイルと失敗した理由に関する診断情報を提供します。

クラスターの使用停止を準備していて、Blob Storage への最終的なエクスポートを実行する場合は、エクスポート ジョブを開始する前にすべての I/O アクティビティが停止していることを確認する必要があります。 この方法は、ファイル システムアクティビティによるエラーを回避することで、すべてのデータがエクスポートされることを保証するのに役立ちます。

エクスポートされたファイルのメタデータ

ファイルが Azure Managed Lustre ファイル システムから BLOB コンテナーにエクスポートされると、追加のメタデータが保存され、ファイル システムへの内容の再インポートが簡略化されます。

次の表に、BLOB メタデータにキーと値のペアとして保存される Lustre ファイル システムの POSIX 属性を示します。

POSIX 属性 Type
owner int
group int
permissions 8 進数または rwxrwxrwx 形式。スティッキー ビットがサポートされています

ディレクトリ属性は空の BLOB に保存されます。 この BLOB はディレクトリ パスと同じ名前を持ち、BLOB メタデータに次のキーと値のペアが含まれています: hdi_isfolder : true

コンテナーを使用して新しい Lustre クラスターをハイドレートする前に、POSIX 属性を手動で変更できます。 前に説明したキーと値のペアを使用して、BLOB メタデータを編集または追加します。

エクスポート ジョブに関する考慮事項

エクスポート ジョブを使用してデータをエクスポートする場合は、次の点を考慮する必要があります。

  • 一度に実行できるインポートまたはエクスポート アクションは 1 つだけです。 たとえば、エクスポート ジョブが進行中の場合、別のエクスポート ジョブを開始しようとするとエラーが返されます。

AzCopy または Storage Explorer を使用して Lustre BLOB コンテナーをコピーする

AzCopy または Storage Explorer を使用して、Lustre が使用する BLOB コンテナーを移動またはコピーできます。

AzCopy の場合は、次のフラグを追加してディレクトリ属性を含めることができます。

--include-directory-stub

このフラグを含めると、転送中にディレクトリ POSIX 属性 ( ownergrouppermissionsなど) が保持されます。 このフラグを指定せずにストレージ コンテナーで azcopy を使用する場合、またはフラグを false に設定した場合、データとディレクトリは転送に含まれますが、ディレクトリは POSIX 属性を保持しません。

Storage Explorer で、 Settings でこのフラグを有効にするには、 Transfers を選択し、 ディレクトリ スタブのチェック ボックスをオンにします。

Storage Explorer での転送中にディレクトリ スタブを含める方法を示すスクリーンショット。

次のステップ