Azure Blob Storage gebruiken met Azure Managed Lustre
Azure Managed Lustre kan worden geïntegreerd met Azure Blob Storage om het importeren van gegevens uit een blobcontainer naar een bestandssysteem te vereenvoudigen. U kunt ook gegevens uit het bestandssysteem exporteren naar een blobcontainer voor langetermijnopslag. In dit artikel worden concepten uitgelegd voor het gebruik van blobintegratie met Azure Managed Lustre-bestandssystemen.
Zie vereisten voor blobintegratie voor meer informatie over de vereisten en configuratie die nodig zijn voor een compatibele blobcontainer.
Overzicht van Blob-integratie
U kunt blob-integratie configureren tijdens het maken van het cluster en u kunt op elk gewenst moment nadat het cluster is gemaakt een importtaak maken. Zodra de gegevens zijn geïmporteerd, kunt u met de gegevens werken zoals u dat zou doen met andere bestandssysteemgegevens. Wanneer er nieuwe bestanden worden gemaakt of bestaande bestanden worden gewijzigd in het bestandssysteem, kunt u deze bestanden weer exporteren naar het opslagaccount door Lustre CLI-opdrachten uit te voeren op de client of door de gegevens te exporteren met behulp van exporttaken.
Wanneer u gegevens uit een blobcontainer importeert naar een Azure Managed Lustre-bestandssysteem, worden alleen de bestandsnamen (naamruimte) en metagegevens geïmporteerd in de Lustre-naamruimte. De werkelijke inhoud van een blob wordt geïmporteerd wanneer deze voor het eerst wordt geopend door een client. Er is een kleine vertraging bij het openen van gegevens terwijl de HSM-functie (Lustre Hierarchical Storage Management) de blob-inhoud naar het bijbehorende bestand in het bestandssysteem haalt.
U kunt de inhoud van blobs vooraf maken met behulp van de opdracht van Lustre lfs hsm_restore
vanaf een gekoppelde client met sudo-mogelijkheden. Zie Gegevens herstellen vanuit Blob Storage voor meer informatie.
Azure Managed Lustre werkt met opslagaccounts waarvoor hiërarchische naamruimte is ingeschakeld en opslagaccounts met een niet-hierarchische of platte naamruimte. De volgende kleine verschillen zijn van toepassing:
- Voor een opslagaccount waarvoor hiërarchische naamruimte is ingeschakeld, leest Azure Managed Lustre POSIX-kenmerken uit de blob-header.
- Voor een opslagaccount waarvoor geen hiërarchische naamruimte is ingeschakeld, leest Azure Managed Lustre POSIX-kenmerken uit de blobmetagegevens. Er wordt een afzonderlijk, leeg bestand met dezelfde naam gemaakt als de inhoud van de blobcontainer om de metagegevens op te slaan. Dit bestand bevindt zich op hetzelfde niveau als de werkelijke gegevensmap in het Azure Managed Lustre-bestandssysteem.
Importeren uit Blob Storage
U kunt de integratie met Blob Storage configureren tijdens het maken van het cluster en u kunt op elk gewenst moment nadat het cluster is gemaakt een importtaak maken.
Vereisten voor blobcontainers
Wanneer u blobintegratie configureert tijdens het maken van het cluster, moet u twee afzonderlijke blobcontainers identificeren: de container die moet worden geïmporteerd en de container voor logboekregistratie. De container die u wilt importeren, bevat de gegevens die u wilt importeren in het Azure Managed Lustre-bestandssysteem. De logboekregistratiecontainer wordt gebruikt voor het opslaan van logboeken voor de importtaak. Deze twee containers moeten zich in hetzelfde opslagaccount bevinden. Zie Vereisten voor blobintegratie voor meer informatie over de vereisten voor de blobcontainer.
Voorvoegsel importeren
Bij het importeren van gegevens uit een blobcontainer kunt u desgewenst een of meer voorvoegsels opgeven om de gegevens te filteren die zijn geïmporteerd in het Azure Managed Lustre-bestandssysteem. Bestandsnamen in de blobcontainer die overeenkomen met een van de voorvoegsels, worden toegevoegd aan een metagegevensrecord in het bestandssysteem. Wanneer een client een bestand voor het eerst opent, wordt de inhoud ervan opgehaald uit de blobcontainer en opgeslagen in het bestandssysteem.
Gebruik in Azure Portal de velden Voorvoegsel importeren op het tabblad Geavanceerd tijdens het maken van het cluster om de gegevens op te geven die moeten worden geïmporteerd uit uw blobcontainer. Deze velden zijn alleen van toepassing op de eerste importtaak. U kunt het importvoorvoegsel niet wijzigen nadat het cluster is gemaakt.
Voor een importtaak kunt u importvoorvoegsels opgeven wanneer u de taak maakt. Vanuit Azure Portal kunt u importvoorvoegsels opgeven in de velden Voorvoegsel importeren. U kunt ook het importvoorvoegsel opgeven wanneer u de REST API gebruikt om een importtaak te maken.
Houd rekening met de volgende overwegingen bij het opgeven van importvoorvoegsels:
- Het standaardvoorvoegsel voor importeren is
/
. Met dit standaardgedrag wordt de inhoud van de hele blobcontainer geïmporteerd. - Als u meerdere voorvoegsels opgeeft, mogen de voorvoegsels niet overlappen. Als u bijvoorbeeld opgeeft
/data
en/data2
, mislukt de importtaak omdat de voorvoegsels elkaar overlappen. - Als de blobcontainer zich in een opslagaccount bevindt waarvoor hiërarchische naamruimte is ingeschakeld, kunt u het voorvoegsel beschouwen als bestandspad. Items onder het pad zijn opgenomen in het Bestandssysteem van Azure Managed Lustre.
- Als de blobcontainer zich in een opslagaccount bevindt met een niet-hierarchische (of platte) naamruimte, kunt u het importvoorvoegsel beschouwen als een zoekreeks die wordt vergeleken met het begin van de blobnaam. Als de naam van een blob in de container begint met de tekenreeks die u hebt opgegeven als het importvoorvoegsel, wordt dat bestand toegankelijk gemaakt in het bestandssysteem. Lustre is een hiërarchisch bestandssysteem en
/
tekens in blobnamen worden mapscheidingstekens wanneer ze worden opgeslagen in Lustre.
Conflictoplossingsmodus
Bij het importeren van gegevens uit een blobcontainer kunt u opgeven hoe conflicten tussen de blobcontainer en het bestandssysteem moeten worden verwerkt. Deze optie is alleen van toepassing op importtaken die worden uitgevoerd voor bestaande clusters. In de volgende tabel ziet u de beschikbare conflictoplossingsmodi en de bijbehorende beschrijvingen:
Modus | Beschrijving |
---|---|
fail |
De importtaak mislukt onmiddellijk met een fout als er een conflict wordt gedetecteerd. |
skip |
De importtaak slaat het bestand over als er een conflict wordt gedetecteerd. |
overwrite-dirty |
De importtaak evalueert een conflicterend pad om te zien of deze moet worden verwijderd en opnieuw moet worden geïmporteerd. Zie de overschrijfmodus voor meer informatie. |
overwrite-always |
De importtaak evalueert een conflicterend pad en verwijdert/importeert altijd als deze vuil is of wordt vrijgegeven als deze schoon is. Zie de overschrijfmodus voor meer informatie. |
Overschrijf-vuile modus
De overwrite-dirty
modus evalueert een conflicterend pad om te zien of het moet worden verwijderd en opnieuw moet wordenimporteerd. Op hoog niveau controleert overwrite-dirty
de modus de HSM-status. Als de HSM-status Schoon en Gearchiveerd is, wat betekent dat de gegevens gesynchroniseerd zijn met de blobcontainer, wat Lustre kan zien, worden alleen de kenmerken bijgewerkt, indien nodig. Anders wordt het bestand verwijderd en opnieuw uit de blobcontainer geimporteerd.
Het controleren van de HSM-status garandeert niet dat het bestand in Lustre overeenkomt met het bestand in de blobcontainer. Als u ervoor moet zorgen dat het bestand in Lustre overeenkomt met het bestand in de blobcontainer, gebruikt u de overwrite-always
modus.
Overschrijven-altijd-modus
De overwrite-always
modus evalueert een conflicterend pad en verwijdert/importeert altijd als het vuil is, of releases als het schoon is. Deze modus is handig als u ervoor wilt zorgen dat het bestandssysteem altijd gesynchroniseerd is met de blobcontainer. Het is ook de duurste optie, omdat elk eerder hersteld bestand wordt vrijgegeven of verwijderd/opnieuw wordt geïmporteerd bij eerste toegang.
Fouttolerantie
Bij het importeren van gegevens uit een blobcontainer kunt u de fouttolerantie opgeven. Het fouttolerantieniveau bepaalt hoe de importtaak tijdelijke fouten verwerkt die optreden tijdens het importproces, bijvoorbeeld fouten van het besturingssysteem of netwerkonderbrekingen. Het is belangrijk te weten dat fouten in deze context niet verwijzen naar bestandsconflicten, die worden verwerkt door de conflictoplossingsmodus.
De volgende opties voor fouttolerantie zijn beschikbaar voor importtaken:
- Geen fouten toestaan (standaard): de importtaak mislukt onmiddellijk als er een fout optreedt tijdens het importeren. Dit gedrag is de standaardinstelling.
- Fouten toestaan: de importtaak wordt voortgezet als er een fout optreedt en de fout wordt geregistreerd. Nadat de importtaak is voltooid, kunt u fouten weergeven in de container voor logboekregistratie.
Overwegingen voor blobimporttaken
De volgende items zijn belangrijk om rekening mee te houden bij het importeren van gegevens uit een blobcontainer:
- Slechts één import- of exportactie kan tegelijk worden uitgevoerd. Als er bijvoorbeeld een importtaak wordt uitgevoerd, wordt er een fout geretourneerd bij het starten van een andere importtaak.
- Importtaken kunnen worden geannuleerd. U kunt een importtaak annuleren die is gestart op een bestaand cluster of een importtaak die is gestart tijdens het maken van het cluster.
- De clusterimplementatie kan worden geretourneerd voordat de bijbehorende importtaak is voltooid. De importtaak wordt nog steeds op de achtergrond uitgevoerd. U kunt de voortgang van de importtaak op de volgende manieren controleren:
- Azure Portal: In Azure Portal wordt de status van de importtaak weergegeven. Navigeer naar het bestandssysteem en selecteer Blob-integratie om de status van de importtaak weer te geven.
-
Lustre-bestand in hoofdmap: een bestand met de naam
/lustre/IMPORT_<state>.<timestamp_start>
is gemaakt in de Lustre-hoofdmap tijdens het importeren. De<state>
tijdelijke aanduiding wordt gewijzigd wanneer het importeren vordert. Het bestand wordt verwijderd wanneer de importtaak is voltooid.
- Als u details over een voltooide importtaak wilt bekijken, kunt u de container voor logboekregistratie controleren. De container voor logboekregistratie bevat logboeken voor de importtaak, inclusief eventuele fouten of conflicten die zijn opgetreden tijdens het importeren.
- Als de importtaak om welke reden dan ook mislukt, hebt u mogelijk geen volledige statistieken over de importtaak, zoals het aantal geïmporteerde bestanden of het aantal conflicten.
Gegevens herstellen vanuit Blob Storage
Standaard wordt de inhoud van een blob geïmporteerd in een bestandssysteem wanneer het bijbehorende bestand voor het eerst wordt geopend door een client. Voor bepaalde werkbelastingen en scenario's wilt u mogelijk de gegevens herstellen uit een blobcontainer voordat deze voor het eerst worden geopend. U kunt ervoor kiezen om de inhoud van blobs vooraf te maken om de initiële vertraging te voorkomen wanneer de blob voor het eerst wordt geopend na het importeren. Als u de inhoud van blobs vooraf wilt fetcheren, kunt u de opdracht van Lustre lfs hsm_restore
gebruiken vanaf een gekoppelde client met sudo-mogelijkheden. Met de volgende opdracht wordt de inhoud van de blobs vooraf in het bestandssysteem gebruikt:
nohup find local/directory -type f -print0 | xargs -0 -n 1 sudo lfs hsm_restore &
Met deze opdracht wordt de metagegevensserver geïnformeerd om een herstelaanvraag asynchroon te verwerken. De opdrachtregel wacht niet totdat het herstellen is voltooid, wat betekent dat de opdrachtregel het potentieel heeft om een groot aantal vermeldingen in de wachtrij te plaatsen voor herstel op de metagegevensserver. Deze aanpak kan de metagegevensserver overbelasten en de prestaties voor herstelbewerkingen verminderen.
U kunt dit potentiële prestatieprobleem voorkomen door een eenvoudig script te maken dat probeert het pad te doorlopen en herstelaanvragen in batches van een opgegeven grootte uit te voeren. Om redelijke prestaties te bereiken en te voorkomen dat de metagegevensserver wordt overweldigd, raden we u aan om batchgrootten overal van 1.000 tot 5.000 aanvragen te gebruiken.
Voorbeeld: Een script voor batchherstel maken
In het volgende voorbeeld ziet u hoe u een script maakt om gegevens te herstellen uit een blobcontainer in batches. Maak een bestand met de naam file_restorer.bash
met de volgende inhoud:
#!/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 "$@"
In het volgende voorbeeld ziet u hoe u het script samen met de voorbeelduitvoer uitvoert:
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
Notitie
Op dit moment herstelt Azure Managed Lustre gegevens uit Blob Storage met een maximale doorvoersnelheid van ~7,5GiB/seconde.
Gegevens exporteren naar Blob Storage met behulp van een exporttaak
U kunt gegevens kopiëren van uw Azure Managed Lustre-bestandssysteem naar langetermijnopslag in Azure Blob Storage door een exporttaak te maken.
Welke bestanden worden tijdens een exporttaak geëxporteerd?
Wanneer u bestanden exporteert vanuit uw Azure Managed Lustre-systeem, worden niet alle bestanden gekopieerd naar de blobcontainer die u hebt opgegeven toen u het bestandssysteem maakte. De volgende regels zijn van toepassing op exporttaken:
- Exporttaken kopiëren alleen bestanden die nieuw zijn of waarvan de inhoud wordt gewijzigd. Als het bestand dat u tijdens het maken van het bestandssysteem hebt geïmporteerd uit de blobcontainer ongewijzigd is, exporteert de exporttaak het bestand niet.
- Bestanden met metagegevenswijzigingen worden alleen niet geëxporteerd. Metagegevenswijzigingen zijn onder andere: eigenaar, machtigingen, uitgebreide kenmerken en naamwijzigingen (hernoemd).
- Bestanden die zijn verwijderd in het Azure Managed Lustre-bestandssysteem, worden niet verwijderd in de oorspronkelijke blobcontainer tijdens de exporttaak. De exporttaak verwijdert geen bestanden in de blobcontainer.
- Blobnamen moeten voldoen aan bepaalde naamgevingsregels, wat betekent dat acceptabele blobnamen enigszins verschillen van acceptabele POSIX-bestandsnamen. Het exportproces behoudt speciale tekens in bestandsnamen door deze correct te escapen bij het exporteren naar blobs. Een bestandsnaam die echter in strijd is met een blobnaamregel, zoals een bestandsnaam die de maximale lengte van de blobnaam overschrijdt, resulteert in een fout bij het exporteren van dat bestand.
Exporttaken uitvoeren in actieve bestandssystemen
In actieve bestandssystemen kunnen wijzigingen in bestanden tijdens de exporttaak leiden tot de foutstatus. Met deze foutstatus weet u dat niet alle gegevens in het bestandssysteem kunnen worden geëxporteerd naar Blob Storage. In deze situatie kunt u het exporteren opnieuw proberen door een nieuwe exporttaak te maken. Met de nieuwe taak worden alleen de bestanden gekopieerd die niet in de vorige taak zijn gekopieerd.
In bestandssystemen met veel activiteit kunnen nieuwe pogingen meerdere keren mislukken omdat bestanden vaak worden gewijzigd. Als u wilt controleren of een bestand is geëxporteerd naar Blob Storage, controleert u de tijdstempel op de bijbehorende blob. Nadat de taak is voltooid, kunt u ook de logboekregistratiecontainer weergeven die tijdens de implementatie is geconfigureerd om gedetailleerde informatie over de exporttaak te bekijken. De container voor logboekregistratie biedt diagnostische informatie over welke bestanden zijn mislukt en waarom ze zijn mislukt.
Als u een cluster uit bedrijf neemt en een definitieve export naar Blob Storage wilt uitvoeren, moet u ervoor zorgen dat alle I/O-activiteiten worden gestopt voordat u de exporttaak start. Met deze aanpak kunt u garanderen dat alle gegevens worden geëxporteerd door fouten te voorkomen als gevolg van de activiteit van het bestandssysteem.
Metagegevens voor geëxporteerde bestanden
Wanneer bestanden worden geëxporteerd van het Azure Managed Lustre-bestandssysteem naar de blobcontainer, worden aanvullende metagegevens opgeslagen om het opnieuw importeren van de inhoud naar een bestandssysteem te vereenvoudigen.
De volgende tabel bevat POSIX-kenmerken uit het Lustre-bestandssysteem die zijn opgeslagen in de blobmetagegevens als sleutel-waardeparen:
POSIX-kenmerk | Type |
---|---|
owner |
int |
group |
int |
permissions |
octale of rwxrwxrwx-indeling; plak-bit wordt ondersteund |
Mapkenmerken worden opgeslagen in een lege blob. Deze blob heeft dezelfde naam als het mappad en bevat het volgende sleutel-waardepaar in de blobmetagegevens: hdi_isfolder : true
U kunt de POSIX-kenmerken handmatig wijzigen voordat u de container gebruikt om een nieuw Lustre-cluster te hydrateren. Bewerk of voeg blobmetagegevens toe met behulp van de sleutel-waardeparen die eerder zijn beschreven.
Overwegingen voor exporttaken
De volgende items zijn belangrijk om rekening mee te houden bij het exporteren van gegevens met een exporttaak:
- Slechts één import- of exportactie kan tegelijk worden uitgevoerd. Als er bijvoorbeeld een exporttaak wordt uitgevoerd, wordt er een fout geretourneerd bij het starten van een andere exporttaak.
Een Lustre-blobcontainer kopiëren met AzCopy of Storage Explorer
U kunt de blobcontainer die Lustre gebruikt, verplaatsen of kopiëren met behulp van AzCopy of Storage Explorer.
Voor AzCopy kunt u mapkenmerken opnemen door de volgende vlag toe te voegen:
--include-directory-stub
Als u deze vlag opvoegt, blijven de POSIX-kenmerken van de map behouden tijdens een overdracht, bijvoorbeeld owner
, group
en permissions
. Als u zonder deze vlag of met de vlag azcopy
op de opslagcontainer gebruiktfalse
, worden de gegevens en mappen opgenomen in de overdracht, maar de directory's behouden hun POSIX-kenmerken niet.
In Storage Explorer kunt u deze vlag inschakelen in Instellingen door Overdrachten in te schakelen en het selectievakje in te schakelen voor Map-stubs opnemen.