Solución de problemas de almacenamiento - FSxpara Lustre

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Solución de problemas de almacenamiento

En algunos casos, es posible que surjan problemas de almacenamiento de archivos. Puede solucionar estos problemas mediante comandos lfs, como el comando lfs migrate.

Error de escritura debido a la falta de espacio en el destino de almacenamiento

Puede comprobar el uso de almacenamiento de su sistema de archivos usando el comando lfs df -h, tal y como se describe en Disposición de almacenamiento del sistema de archivos. El campo filesystem_summary indica el uso total de almacenamiento del sistema de archivos.

Si el uso del disco del sistema de archivos es del 100 %, considere la posibilidad de aumentar la capacidad de almacenamiento del sistema de archivos. Para obtener más información, consulte Administración de la capacidad de almacenamiento.

Si el uso del almacenamiento del sistema de archivos no es del 100% y se siguen produciendo errores de escritura, es posible que el archivo en el OST que está escribiendo esté dividido o lleno.

Acción que debe ejecutarse

  • Si muchos de los archivos OSTs están llenos, aumente la capacidad de almacenamiento del sistema de archivos. Compruebe si el almacenamiento está OSTs desequilibrado siguiendo las acciones de la Almacenamiento desequilibrado activado OSTs sección.

  • Si no OSTs está lleno, ajuste el tamaño del búfer de páginas sin procesar del cliente aplicando los siguientes ajustes a todas las instancias del cliente:

    sudo lctl set_param osc.*.max_dirty_mb=64

Almacenamiento desequilibrado activado OSTs

Amazon FSx for Lustre distribuye las nuevas franjas de archivos de manera uniforme. OSTs Sin embargo, es posible que su sistema de archivos siga desequilibrado debido a los patrones de E/S o al diseño del almacenamiento de archivos. Como resultado, algunos destinos de almacenamiento pueden llenarse mientras que otros permanecen relativamente vacíos.

El lfs migrate comando se utiliza para mover archivos o directorios de más llenos a menos llenos. OSTs Puede utilizar el comando lfs migrate en modo de bloqueo o sin bloqueo.

  • El modo de bloqueo es el modo por defecto del comando lfs migrate. Cuando se ejecuta en modo de bloqueo, lfs migrate primero adquiere un bloqueo de grupo en los archivos y directorios antes de la migración de datos para evitar modificaciones en los archivos, y luego libera el bloqueo cuando finaliza la migración. Al impedir que otros procesos modifiquen los archivos, el modo de bloqueo evita que estos procesos interrumpan la migración. El inconveniente es que impedir que una aplicación modifique un archivo puede provocar retrasos o errores en la aplicación.

  • El modo sin bloqueo se habilita para el comando lfs migrate con la opción -n. Cuando se ejecuta lfs migrate en el modo sin bloqueo, otros procesos pueden seguir modificando los archivos que se están migrando. Si un proceso modifica un archivo antes de que lfs migrate finalice la migración, lfs migrate no podrá migrar ese archivo, dejando el archivo con su disposición de franjas original.

Le recomendamos que utilice el modo sin bloqueo, ya que es menos probable que interfiera con la aplicación.

Acción que se debe ejecutar

  1. Lance una instancia de cliente relativamente grande (como la EC2 c5n.4xlarge instancia de Amazon) para montarla en el sistema de archivos.

  2. Antes de ejecutar el script en modo sin bloqueo o el script en modo de bloqueo, ejecute primero los siguientes comandos en cada instancia de cliente para acelerar el proceso:

    sudo lctl set_param 'mdc.*.max_rpcs_in_flight=60' sudo lctl set_param 'mdc.*.max_mod_rpcs_in_flight=59'
  3. Inicie una sesión de pantalla y ejecute el script de modo sin bloqueo o el script de modo de bloqueo. Asegúrese de cambiar las variables adecuadas en los scripts:

    • Script para el modo sin bloqueo:

      #!/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
    • Script para el modo de bloqueo:

      • Sustituya los OSTS valores por los valores de suOSTs.

      • Proporcione un valor entero a nproc para establecer el número de procesos max-procs que se ejecutarán en paralelo. Por ejemplo, el tipo de EC2 c5n.4xlarge instancia de Amazon tiene 16vCPUs, por lo que puedes usar 16 (o un valor inferior a 16) paranproc.

      • Introduzca la ruta del directorio de montaje mnt_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

Notas

  • Si observa que esto afecta al rendimiento de las lecturas del sistema de archivos, puede detener las migraciones en cualquier momento utilizando ctrl-c o kill -9, y reducir el número de subprocesos (valor nproc) a un número inferior (por ejemplo, 8) y reanudar la migración de los archivos.

  • El comando lfs migrate fallará en un archivo que también esté abierto por la carga de trabajo del cliente. Lanzará un error y pasará al siguiente archivo; por lo tanto, es posible que, si se está accediendo a muchos archivos, el script no pueda migrar ningún archivo, y se reflejará como que la migración avanza muy lentamente.

  • Puedes monitorizar OST el uso mediante uno de los siguientes métodos

    • Al montar el cliente, ejecute el siguiente comando para supervisar el OST uso y encontrar el que OST tenga un uso superior al 85%:

      lfs df -h |egrep '( 8[5-9]| 9[1-9]|100)%'
    • Comprueba la CloudWatch métrica de AmazonOST FreeDataStorageCapacity, compruebaMinimum. Si tu script encuentra OSTs que está lleno por encima del 85%, cuando la métrica esté cerca del 15%, usa ctrl-c o kill -9 para detener la migración.

  • También puede considerar cambiar la configuración de franjas de su sistema de archivos o de un directorio, de modo que los nuevos archivos sean fragmentados a través de múltiples destinos de almacenamiento. Para obtener más información, consulte Fragmentación de datos en su sistema de archivos.