排查存储问题 - FSx for Lustre
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

排查存储问题

在某些情况下,您可能会遇到文件系统存储问题。您可以使用 lfs 命令(例如 lfs migrate 命令)来解决这些问题。

由于存储目标上没有空间而导致写入错误

您可以使用 lfs df -h 命令检查文件系统的存储使用情况,如 文件系统存储布局 中所述。filesystem_summary 字段报告文件系统的总存储使用情况。

如果文件系统磁盘使用率为 100%,请考虑增加文件系统的存储容量。有关更多信息,请参阅管理存储容量

如果文件系统存储使用率非 100%,但仍然出现写入错误,则您正在写入的文件可能会在已满的 OST 上被条带化。

要采取的操作

  • 如果多个 OST 均已满,请增加文件系统的存储容量。按照 OST 上的存储空间不平衡 部分的操作检查 OST 上的存储空间是否不平衡。

  • 如果您的 OST 未满,请通过对所有客户端实例应用以下调整来调整客户端脏页缓冲区的大小:

    sudo lctl set_param osc.*.max_dirty_mb=64

OST 上的存储空间不平衡

Amazon FSx for Lustre 在 OST 上均匀分配新的文件条带。但是,由于 I/O 模式或文件存储布局,您的文件系统仍可能变得不平衡。因此,有些存储目标可能已满,而另一些则相对较空。

您可以使用 lfs migrate 命令将文件或目录从较满的 OST 移动到不太满的 OST。您可以在屏蔽模式或非屏蔽模式下使用 lfs migrate 命令。

  • 屏蔽模式lfs migrate 命令的默认模式。在屏蔽模式下运行时,lfs migrate 会先在数据迁移之前获取文件和目录的组锁以防止对文件进行修改,迁移完成后再释放锁。屏蔽模式可以通过阻止其他进程修改文件,防止这些进程中断迁移。缺点是,阻止应用程序修改文件可能会导致应用程序延迟或错误。

  • -n 选项的 lfs migrate 命令启用非屏蔽模式。在非屏蔽模式下运行 lfs migrate 时,其他进程仍然可以修改正在迁移的文件。如果某个进程在 lfs migrate 完成文件迁移之前对其进行了修改,则 lfs migrate 将无法迁移该文件,从而使该文件保持其原始条带布局。

我们建议您使用非屏蔽模式,因为它不太可能干扰您的应用程序。

要采取的操作

  1. 启动一个相对较大的客户端实例(例如 Amazon EC2 c5n.4xlarge 实例类型)以挂载到文件系统。

  2. 在运行非屏蔽模式或屏蔽模式脚本之前,请先在每个客户端实例上运行以下命令以加快该进程:

    sudo lctl set_param 'mdc.*.max_rpcs_in_flight=60' sudo lctl set_param 'mdc.*.max_mod_rpcs_in_flight=59'
  3. 启动屏幕会话并运行非屏蔽模式或屏蔽模式脚本。请务必在脚本中更改相应变量:

    • 非屏蔽模式脚本:

      #!/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
    • 屏蔽模式脚本:

      • OSTS 中的值替换为 OST 的值。

      • nproc 提供一个整数值,以设置要并行运行的最大处理进程数。例如,Amazon EC2 c5n.4xlarge 实例类型有 16 个 vCPU,因此 nproc 可以使用 16(或小于 16 的值)。

      • 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

备注

  • 如果您发现文件系统的读取性能受到影响,则可以随时使用 ctrl-c 或 kill -9 停止迁移,并将线程数(nproc 值)减少至较低数字(例如 8),然后继续迁移文件。

  • 对于同样由客户端工作负载打开的文件,lfs migrate 命令将失败。它将引发错误并移至下一个文件;因此,如果要访问的文件很多,则脚本可能无法迁移任何文件,并且将反映为迁移进展非常缓慢。

  • 您可以使用以下任一方法来监控 OST 的使用情况

    • 客户端挂载时,运行以下命令监控 OST 的使用情况并找到使用率大于 85% 的 OST:

      lfs df -h |egrep '( 8[5-9]| 9[1-9]|100)%'
    • 查看 Amazon CloudWatch 指标OST FreeDataStorageCapacity,,检查Minimum。如果您的脚本发现使用率超过 85% 的 OST,则当指标接近 15% 时,请使用 ctrl-ckill -9 停止迁移。

  • 您也可以考虑更改文件系统或目录的条带配置,以便在多个存储目标之间对新文件进行条带化处理。有关更多信息,请参阅 对文件系统中的数据进行条带化