Solução de problemas de armazenamento - FSx para Lustre

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Solução de problemas de armazenamento

Em alguns casos, você pode ter problemas de armazenamento com seu sistema de arquivos. Você pode solucionar esses problemas usando comandos lfs, como o comando lfs migrate.

Erro de gravação devido à falta de espaço no destino de armazenamento

Você pode verificar o uso de armazenamento do seu sistema de arquivos usando o comando lfs df -h, conforme descrito em Layout de armazenamento do sistema de arquivos. O campo filesystem_summary relata o uso total do armazenamento do sistema de arquivos.

Se o uso do disco do sistema de arquivos estiver em 100%, considere aumentar a capacidade de armazenamento do sistema de arquivos. Para obter mais informações, consulte Como gerenciar a capacidade de armazenamento.

Se o uso do armazenamento do sistema de arquivos não estiver em 100% e você ainda receber erros de gravação, o arquivo no qual você está gravando pode estar distribuído em um OST cheio.

Medida a ser tomada

  • Se muitos deles OSTs estiverem cheios, aumente a capacidade de armazenamento do seu sistema de arquivos. Verifique se há armazenamento OSTs desbalanceado seguindo as ações da Armazenamento desbalanceado ativado OSTs seção.

  • Se você não OSTs estiver cheio, ajuste o tamanho do buffer da página suja do cliente aplicando o seguinte ajuste a todas as instâncias do seu cliente:

    sudo lctl set_param osc.*.max_dirty_mb=64

Armazenamento desbalanceado ativado OSTs

O Amazon FSx for Lustre distribui as novas faixas de arquivos uniformemente. OSTs No entanto, seu sistema de arquivos ainda pode ficar desbalanceado devido aos padrões de E/S ou ao layout de armazenamento de arquivos. Como resultado, alguns destinos de armazenamento podem ficar cheios, enquanto outros permanecem relativamente vazios.

Você usa o lfs migrate comando para mover arquivos ou diretórios de mais cheios para menos cheios. OSTs Você pode usar o comando lfs migrate no modo de bloqueio ou sem bloqueio.

  • O modo de bloqueio é o modo padrão para o comando lfs migrate. Quando executado no modo de bloqueio, o comando lfs migrate primeiro adquire um bloqueio de grupo nos arquivos e diretórios antes da migração de dados para evitar modificações nos arquivos e, em seguida, libera o bloqueio quando a migração é concluída. Ao impedir que outros processos modifiquem os arquivos, o modo de bloqueio impede que esses processos interrompam a migração. A desvantagem é que impedir que uma aplicação modifique um arquivo pode resultar em atrasos ou erros na aplicação.

  • O modo sem bloqueio é habilitado para o comando lfs migrate com a opção -n. Ao executar lfs migrate no modo sem bloqueio, outros processos ainda podem modificar os arquivos que estão sendo migrados. Se um processo modificar um arquivo antes que o comando lfs migrate conclua a migração, o comando lfs migrate falhará na migração desse arquivo, deixando o arquivo com seu layout de faixa original.

Recomendamos que você use o modo sem bloqueio, pois é menos provável que ele interfira na sua aplicação.

Medida a ser tomada

  1. Execute uma instância de cliente relativamente grande (como o tipo de EC2 c5n.4xlarge instância Amazon) para montar no sistema de arquivos.

  2. Antes de executar o script do modo sem bloqueio ou o script do modo de bloqueio, primeiro execute os seguintes comandos em cada instância do cliente para acelerar o processo:

    sudo lctl set_param 'mdc.*.max_rpcs_in_flight=60' sudo lctl set_param 'mdc.*.max_mod_rpcs_in_flight=59'
  3. Inicie uma sessão de tela e execute o script do modo sem bloqueio ou do modo de bloqueio. Certifique-se de alterar as variáveis apropriadas nos scripts:

    • Script de modo sem bloqueio:

      #!/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 de modo de bloqueio:

      • Substitua os valores em OSTS pelos valores do seu OSTs.

      • Forneça um valor inteiro para nproc a fim de definir o número de processos max-procs a serem executados em paralelo. Por exemplo, o tipo de EC2 c5n.4xlarge instância Amazon tem 16 vCPUs, então você pode usar 16 (ou um valor < 16) paranproc.

      • Forneça o caminho do diretório de montagem em 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

Observações

  • Se você perceber que há um impacto na performance das leituras do sistema de arquivos, será possível interromper as migrações a qualquer momento usando ctrl-c ou kill -9 e reduzir o número de threads (valor nproc) de volta para um número menor (como 8) e continuar a migração dos arquivos.

  • O comando lfs migrate falhará em um arquivo que também é aberto pela workload do cliente. Isso vai gerar um erro e mover para o próximo arquivo; portanto, é possível que, se houver muitos arquivos sendo acessados, o script não consiga migrar nenhum arquivo e isso será refletido como progresso muito lento da migração.

  • Você pode monitorar o uso do OST usando qualquer um dos métodos a seguir

    • Na montagem do cliente, execute o seguinte comando para monitorar o uso do OST e encontrar o OST com uso maior que 85%:

      lfs df -h |egrep '( 8[5-9]| 9[1-9]|100)%'
    • Verifique a CloudWatch métrica da AmazonOST FreeDataStorageCapacity, verifiqueMinimum. Se seu script descobrir OSTs que estão mais de 85% cheios, quando a métrica estiver próxima de 15%, use ctrl-c ou interrompa kill -9 a migração.

  • Você também pode considerar alterar a configuração de distribuição do seu sistema de arquivos ou de um diretório para que os novos arquivos sejam distribuídos em vários destinos de armazenamento. Para obter mais informações, consulte em Distribuição de dados no sistema de arquivos.