Fehlerbehebung bei Speicherproblemen - FSxfür Lustre

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Fehlerbehebung bei Speicherproblemen

In einigen Fällen können Speicherprobleme mit Ihrem Dateisystem auftreten. Sie können diese Probleme mithilfe von lfs Befehlen wie dem lfs migrate Befehl beheben.

Schreibfehler, da auf dem Speicherziel kein Speicherplatz verfügbar ist

Sie können die Speichernutzung Ihres Dateisystems mithilfe des lfs df -h Befehls überprüfen, wie unter beschriebenSpeicherlayout des Dateisystems. Das filesystem_summary Feld gibt die gesamte Speichernutzung des Dateisystems an.

Wenn die Festplattenauslastung des Dateisystems bei 100% liegt, sollten Sie erwägen, die Speicherkapazität Ihres Dateisystems zu erhöhen. Weitere Informationen finden Sie unter Verwaltung der Speicherkapazität.

Wenn die Speicherauslastung des Dateisystems nicht zu 100% beträgt und Sie immer noch Schreibfehler erhalten, wird die Datei, in die Sie schreiben, möglicherweise auf eine Datei verteiltOST, die voll ist.

Maßnahme

  • Wenn viele Ihrer Dateien voll OSTs sind, erhöhen Sie die Speicherkapazität Ihres Dateisystems. Prüfen Sie, ob unsymmetrischer Speicher aktiviert ist, OSTs indem Sie den Anweisungen im Unausgeglichener Speicher aktiviert OSTs Abschnitt folgen.

  • Wenn Sie nicht voll OSTs sind, optimieren Sie die Größe des Client-Buffers für Dirty Page, indem Sie die folgende Optimierung auf alle Ihre Client-Instances anwenden:

    sudo lctl set_param osc.*.max_dirty_mb=64

Unausgeglichener Speicher aktiviert OSTs

Amazon FSx for Lustre verteilt neue Dateistreifen gleichmäßig. OSTs Ihr Dateisystem kann jedoch aufgrund von I/O-Mustern oder dem Dateispeicherlayout immer noch aus dem Gleichgewicht geraten. Dies kann dazu führen, dass einige Speicherziele voll werden, während andere relativ leer bleiben.

Sie verwenden den lfs migrate Befehl, um Dateien oder Verzeichnisse von „mehr voll“ in „weniger voll“ zu verschieben. OSTs Sie können den lfs migrate Befehl entweder im Blockmodus oder im Blockmodus verwenden.

  • Der Blockmodus ist der Standardmodus für den lfs migrate Befehl. Bei der Ausführung im Blockmodus wird vor der Datenmigration lfs migrate zunächst eine Gruppensperre für die Dateien und Verzeichnisse eingerichtet, um Änderungen an den Dateien zu verhindern. Die Sperre wird dann aufgehoben, wenn die Migration abgeschlossen ist. Indem der Blockmodus verhindert, dass andere Prozesse die Dateien ändern, verhindert er, dass diese Prozesse die Migration unterbrechen. Der Nachteil ist, dass das Verhindern der Änderung einer Datei durch eine Anwendung zu Verzögerungen oder Fehlern bei der Anwendung führen kann.

  • Der blockfreie Modus ist für den lfs migrate Befehl mit der -n Option aktiviert. Wenn sie lfs migrate im blockfreien Modus ausgeführt werden, können andere Prozesse die Dateien, die migriert werden, trotzdem ändern. Wenn ein Prozess eine Datei ändert, bevor die Migration lfs migrate abgeschlossen ist, schlägt die Migration dieser Datei lfs migrate fehl und die Datei behält ihr ursprüngliches Stripe-Layout.

Wir empfehlen Ihnen, den Modus ohne Blockierung zu verwenden, da es weniger wahrscheinlich ist, dass er Ihre Anwendung beeinträchtigt.

Maßnahme

  1. Starten Sie eine relativ große Client-Instance (z. B. den EC2 c5n.4xlarge Amazon-Instance-Typ), um sie im Dateisystem zu mounten.

  2. Bevor Sie das Skript für den Nichtblockmodus oder das Blockmodus-Skript ausführen, führen Sie zunächst die folgenden Befehle auf jeder Client-Instance aus, um den Vorgang zu beschleunigen:

    sudo lctl set_param 'mdc.*.max_rpcs_in_flight=60' sudo lctl set_param 'mdc.*.max_mod_rpcs_in_flight=59'
  3. Starten Sie eine Bildschirmsitzung und führen Sie das Skript für den Nichtblockmodus oder das Blockmodus-Skript aus. Achten Sie darauf, die entsprechenden Variablen in den Skripten zu ändern:

    • Skript im Nicht-Blockmodus:

      #!/bin/bash # UNCOMMENT THE FOLLOWING LINES: # # TRY_COUNT=0 # MAX_MIGRATE_ATTEMPTS=100 # OSTS="fsname-OST0000_UUID" # DIR_OR_FILE_MIGRATED="/mnt/subdir/" # BATCH_SIZE=10 # PARALLEL_JOBS=16 # up to max-procs processes, set to 16 if client is c5n.4xlarge with 16 vcpu # LUSTRE_STRIPING_CONFIG="-E 100M -c 1 -E 10G -c 8 -E 100G -c 16 -E -1 -c 32" # should be consistent with the existing striping setup # if [ -z "$TRY_COUNT" -o -z "$MAX_MIGRATE_ATTEMPTS" -o -z "$OSTS" -o -z "$DIR_OR_FILE_MIGRATED" -o -z "$BATCH_SIZE" -o -z "$PARALLEL_JOBS" -o -z "$LUSTRE_STRIPING_CONFIG" ]; then echo "Some variables are not set." exit 1 fi echo "lfs migrate starts" while true; do output=$(sudo lfs find ! -L released --ost $OSTS --print0 $DIR_OR_FILE_MIGRATED | shuf -z | /bin/xargs -0 -P $PARALLEL_JOBS -n $BATCH_SIZE sudo lfs migrate -n $LUSTRE_STRIPING_CONFIG 2>&1) if [[ $? -eq 0 ]]; then echo "lfs migrate succeeds for $DIR_OR_FILE_MIGRATED at the $TRY_COUNT attempt, exiting." exit 0 elif [[ $? -eq 123 ]]; then echo "WARN: Target data objects are not located on these OSTs. Skipping lfs migrate" exit 1 else echo "lfs migrate fails for $DIR_OR_FILE_MIGRATED at the $TRY_COUNT attempt, retrying..." if (( ++TRY_COUNT >= MAX_MIGRATE_ATTEMPTS )); then echo "WARN: Exceeds max retry attempt. Skipping lfs migrate for $DIR_OR_FILE_MIGRATED. Failed with the following error" echo $output exit 1 fi fi done
    • Blockmodus-Skript:

      • Ersetzen Sie die Werte in OSTS durch die Werte von IhremOSTs.

      • Geben Sie einen Integer-Wert für annproc, um die Anzahl der Max-Procs-Prozesse festzulegen, die parallel ausgeführt werden sollen. Der EC2 c5n.4xlarge Amazon-Instance-Typ hat beispielsweise 16vCPUs, sodass Sie 16 (oder einen Wert < 16) für verwenden könnennproc.

      • Geben Sie Ihren Mount-Verzeichnispfad in einmnt_dir_path.

      # find all OSTs with usage above a certain threshold; for example, greater than or equal to 85% full for OST in $(lfs df -h |egrep '( 8[5-9]| 9[0-9]|100)%'|cut -d' ' -f1); do echo ${OST};done|tr '\012' ',' # customer can also just pass OST values directly to OSTS variable OSTS='dzfevbmv-OST0000_UUID,dzfevbmv-OST0002_UUID,dzfevbmv-OST0004_UUID,dzfevbmv-OST0005_UUID,dzfevbmv-OST0006_UUID,dzfevbmv-OST0008_UUID' nproc=<Run up to max-procs processes if client is c5n.4xlarge with 16 vcpu, this value can be set to 16> mnt_dir_path=<mount dir, e.g. '/my_mnt'> lfs find ${mnt_dir_path} --ost ${OSTS}| xargs -P ${nproc} -n2 lfs migrate -E 100M -c 1 -E 10G -c 8 -E 100G -c 16 -E -1 -c 32

Hinweise

  • Wenn Sie feststellen, dass die Leistung der Lesevorgänge des Dateisystems beeinträchtigt wird, können Sie die Migrationen jederzeit mit ctrl-c oder k ill -9 beenden und die Anzahl der Threads (nprocWert) wieder auf einen niedrigeren Wert (z. B. 8) reduzieren und die Migration der Dateien fortsetzen.

  • Der lfs migrate Befehl schlägt bei einer Datei fehl, die auch vom Client-Workload geöffnet wird. Es wird ein Fehler ausgegeben und zur nächsten Datei übergegangen. Daher ist es möglich, dass das Skript keine Dateien migrieren kann, wenn auf viele Dateien zugegriffen wird, und dies wird angezeigt, da die Migration sehr langsam voranschreitet.

  • Sie können die OST Nutzung mit einer der folgenden Methoden überwachen

    • Führen Sie auf dem Client-Mount den folgenden Befehl aus, um die OST Nutzung zu überwachen und herauszufinden, OST ob die Auslastung mehr als 85% beträgt:

      lfs df -h |egrep '( 8[5-9]| 9[1-9]|100)%'
    • Überprüfen Sie die CloudWatch Amazon-MetrikOST FreeDataStorageCapacity, überprüfen SieMinimum. Wenn Ihr Skript feststellt, OSTs dass mehr als 85% voll sind, verwenden Sie ctrl-c oder, um die Migration kill -9 zu beenden, wenn die Metrik fast 15% beträgt.

  • Sie können auch erwägen, die Stripe-Konfiguration Ihres Dateisystems oder eines Verzeichnisses zu ändern, sodass neue Dateien auf mehrere Speicherziele verteilt werden. Weitere Informationen finden Sie unterDaten in Ihrem Dateisystem entfernen.