O Managed Lustre do Google Cloud pode importar e exportar dados para o Cloud Storage. As transferências de dados são incrementais. Elas só copiam arquivos que ainda não existem no destino ou que foram alterados desde a transferência.
Os buckets do Cloud Storage com namespace hierárquico ativado oferecem velocidades de transferência mais rápidas de e para o Managed Lustre em comparação com os buckets padrão.
Desempenho
As transferências entre o Managed Lustre e o Cloud Storage podem atingir as seguintes velocidades:
- Para arquivos com mais de 32 MB, até 100 GBps. A velocidade de transferência é limitada pela capacidade máxima de processamento de uma instância (capacidade da instância multiplicada pela camada de performance).
Considerações sobre a largura de banda de saída do Cloud Storage
O Cloud Storage oferece uma largura de banda de saída padrão de até 200 Gbps por região por projeto. Se você tiver várias instâncias do Managed Lustre no mesmo projeto e região, poderá solicitar um aumento no limite da largura de banda de saída. Para mais informações, consulte as cotas de largura de banda do Cloud Storage.
Permissões necessárias
Permissões para iniciar a transferência
O usuário ou a conta de serviço usada para iniciar a transferência precisa das seguintes permissões:
lustre.instances.exportDatapara transferir do Managed Lustre para o Cloud Storage.lustre.instances.importDatapara transferir do Cloud Storage.
Essas duas permissões são concedidas com o papel roles/lustre.admin. É possível criar um papel personalizado para
conceder permissões de forma independente.
Permissões para o agente de serviço do Managed Lustre
Acessar o agente de serviço do Managed Lustre
Um agente de serviço do Managed Lustre é criado na primeira vez que você cria uma instância do Managed Lustre no projeto. A identidade do agente de serviço está no formato
service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com.
Se você ainda não tiver um agente de serviço do Managed Lustre
Execute o
services identity createcomando:gcloud beta services identity create \ --service=lustre.googleapis.com \ --project=PROJECT_NUMBER_OR_IDSubstitua PROJECT_NUMBER_OR_ID pelo número ou ID do projeto em que você quer criar a instância do Managed Lustre O resultado será o seguinte:
Service identity created: service-1234567890@gcp-sa-lustre.iam.gserviceaccount.comCopie o valor da identidade do agente de serviço para usar na próxima etapa.
Se você já tiver criado uma instância do Managed Lustre
Para criar a identidade do agente de serviço, acesse o número do projeto. Um PROJECT_NUMBER não é o mesmo que um ID do projeto:
- Um ID do projeto é uma string exclusiva que pode ser uma combinação de letras, números e hifens. Você especifica um ID do projeto ao criar o projeto. Por exemplo,
example-project-123. - Um número do projeto é um identificador exclusivo gerado automaticamente para o projeto que consiste apenas em números. Por exemplo,
1234567890.
Para acessar o PROJECT_NUMBER de um determinado ID do projeto, use o
gcloud projects describecomando:gcloud projects describe PROJECT_ID --format="value(projectNumber)"- Um ID do projeto é uma string exclusiva que pode ser uma combinação de letras, números e hifens. Você especifica um ID do projeto ao criar o projeto. Por exemplo,
Copie o número do projeto retornado para a identidade do agente de serviço:
service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.comCopie a identidade do agente de serviço para usar na próxima etapa.
Conceder permissões
O agente de serviço do Managed Lustre requer um dos seguintes papéis do Cloud Storage:
- Para transferir dados de e para o Cloud Storage:
roles/storage.objectUserno bucket do Cloud Storage. - Para transferir apenas do Cloud Storage:
roles/storage.objectViewerno bucket do Cloud Storage.
Para conceder um desses papéis, execute o seguinte comando gcloud:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_AGENT_IDENTITY \
--role=roles/storage.objectViewer_OR_objectUser
SERVICE_AGENT_IDENTITY é a identidade do agente de serviço do Managed Lustre da etapa anterior.
Importar dados para o Managed Lustre
É possível importar dados de um bucket do Cloud Storage. O bucket pode estar no mesmo projeto ou em um projeto diferente. O bucket pode estar em uma zona ou região diferente
da instância do Managed Lustre, mas as transferências entre regiões
podem ser mais lentas do que as transferências intrarregionais.
gcloud
gcloud lustre instances import-data INSTANCE_ID \
--location=LOCATION \
--gcs-path-uri=gs://BUCKET_NAME/ \
--lustre-path=PS_PATH
Em que:
- INSTANCE_ID é o nome da instância do Managed Lustre.
--locationé a zona da instância do Managed Lustre. Por exemplo,us-central1-a.--gcs-path-uriespecifica o URI de um bucket do Cloud Storage, ou um caminho dentro de um bucket, usando o formatogs://<bucket_name>/<optional_path_inside_bucket>/. Se um caminho dentro do bucket for especificado, ele precisará terminar com uma barra (/).--lustre-pathespecifica o caminho do diretório raiz para o sistema de arquivos do Managed Lustre. Precisa começar com/. O padrão é/. Se você especificar um valor diferente do padrão, o diretório já precisará existir no sistema de arquivos.
Os seguintes parâmetros são opcionais:
--request-idpermite atribuir um ID exclusivo a essa solicitação. Se você tentar novamente essa solicitação usando o mesmo ID, o servidor vai ignorar a solicitação se ela já tiver sido concluída. Precisa ser um UUID válido UUID--asyncretorna uma resposta imediatamente, sem esperar que a operação seja concluída.
Para mais detalhes, consulte a documentação do SDK Cloud.
REST
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData
Authorization: Bearer [YOUR_ACCESS_TOKEN]
{
"gcsPath" : {
"uri" : "gs://BUCKET_NAME/"
},
"lustrePath" : {
"path" : "/PATH"
}
}
Em que:
- PROJECT_ID é o nome do Google Cloud projeto.
- LOCATION é a zona da instância do Managed Lustre. Por exemplo,
us-central1-a. - INSTANCE_ID é o nome da instância do Managed Lustre.
gcsPathcontém uma chaveuricujo valor especifica o URI de um bucket do Cloud Storage ou um caminho dentro de um bucket, usando o formatogs://<bucket_name>/<optional_path_inside_bucket>/. Se um caminho dentro do bucket for especificado, ele precisará terminar com uma barra (/).lustrePathcontém uma chavepathcujo valor especifica o caminho do diretório raiz para o sistema de arquivos do Managed Lustre. Precisa começar com/. O padrão é/. Se você especificar um valor diferente do padrão, o diretório já precisará existir no sistema de arquivos.
Para usar sua própria conta de serviço em vez do agente de serviço gerenciado pelo Google, a solicitação oferece suporte a um campo serviceAccount no objeto JSON:
"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"
Um exemplo de comando curl é:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData \
-d '{"gcsPath": {"uri":"gs://BUCKET_NAME/"}, "lustrePath": {"path":"/"}}'
Atributos de arquivo
Ao importar dados de um bucket do Cloud Storage para uma instância do Managed Lustre, os atributos de arquivo na instância do Managed Lustre são definidos de uma das duas maneiras a seguir:
- Se o objeto do Cloud Storage tiver metadados personalizados, conforme descrito para
exportar dados:
- O UID, o GID, o modo e o
mtimedo arquivo são definidos com base nos metadados personalizados do objeto. - O
atimedo arquivo é definido com o mesmo valor domtime.
- O UID, o GID, o modo e o
- Se o objeto do Cloud Storage não tiver os metadados personalizados:
- O UID e o GID do arquivo são definidos como 0 (
root). - O modo do arquivo é definido como
rwxr-xr-x(755). - O
atimee omtimedo arquivo são definidos como o horário de criação do objeto do Cloud Storage.
- O UID e o GID do arquivo são definidos como 0 (
Em ambos os casos:
- O
ctimede um arquivo é definido como o horário em que o arquivo foi gravado na instância. - O
atime, octimee omtimede um diretório são definidos como o horário em que o diretório foi criado na instância.
Exportar dados
É possível exportar dados da instância do Managed Lustre para um bucket do Cloud Storage no mesmo projeto ou em um projeto diferente. O bucket pode estar em uma zona ou região diferente da instância do Managed Lustre, mas as transferências entre regiões podem ser mais lentas do que as transferências intrarregionais.
gcloud
gcloud lustre instances export-data \
INSTANCE_ID \
--location=LOCATION \
--gcs-path-uri="gs://BUCKET_NAME/" \
--lustre-path="/"
Em que:
- INSTANCE_ID é o nome da instância do Managed Lustre.
--locationé a zona da instância do Managed Lustre. Por exemplo,us-central1-a.--gcs-path-uriespecifica o URI de um bucket do Cloud Storage ou um caminho dentro de um bucket, usando o formatogs://<bucket_name>/<optional_path_inside_bucket>/. Se um caminho dentro do bucket for especificado, ele precisará terminar com uma barra (/).--lustre-pathespecifica o caminho do diretório raiz para o sistema de arquivos do Managed Lustre. Precisa começar com/. O padrão é/.
Os seguintes parâmetros são opcionais:
--request-idpermite atribuir um ID exclusivo a essa solicitação. Se você tentar novamente essa solicitação usando o mesmo ID, o servidor vai ignorar a solicitação se ela já tiver sido concluída. Precisa ser um UUID válido UUID--asyncretorna uma resposta imediatamente, sem esperar que a operação seja concluída.
REST
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData
Authorization: Bearer [YOUR_ACCESS_TOKEN]
{
"lustrePath" : {
"path" : "/"
},
"gcsPath" : {
"uri" : "gs://BUCKET_NAME/"
}
}
Em que:
- PROJECT_ID é o nome do Google Cloud projeto.
- INSTANCE_ID é o nome da instância do Managed Lustre.
- LOCATION é a zona da instância do Managed Lustre. Por exemplo,
us-central1-a. lustrePathcontém uma chavepathcujo valor especifica o caminho do diretório raiz para o sistema de arquivos do Managed Lustre. Precisa começar com/. O padrão é/.gcsPathcontém uma chaveuricujo valor especifica o URI de um bucket do Cloud Storage ou um caminho dentro de um bucket, usando o formatogs://<bucket_name>/<optional_path_inside_bucket>/. Se um caminho dentro do bucket for especificado, ele precisará terminar com uma barra (/).
Para usar sua própria conta de serviço em vez do agente de serviço gerenciado pelo Google, a solicitação oferece suporte a um campo serviceAccount no objeto JSON:
"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"
Um exemplo de comando curl é:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json"
https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData \
-d '{"lustrePath": {"path":"/"}, "gcsPath": {"uri":"gs://BUCKET_NAME/"}}'
Atributos de arquivo
Ao exportar dados de uma instância do Managed Lustre para um bucket do Cloud Storage, os seguintes atributos de arquivo são preservados como metadados personalizados no Cloud Storage:
- O UID do arquivo é armazenado com a chave
goog-reserved-posix-uid. - O GID do arquivo é armazenado com a chave
goog-reserved-posix-gid. - O modo numérico do arquivo é armazenado com a chave
goog-reserved-posix-mode. - O
mtimedo arquivo é armazenado com a chavegoog-reserved-file-mtime.
Esses nomes de chave de metadados personalizados são os mesmos usados pelo Serviço de transferência do Cloud Storage para transferências com sistemas de arquivos POSIX.
Os seguintes atributos de arquivo não são preservados:
- Os links simbólicos não são preservados.
- Os links físicos são exportados como objetos separados do Cloud Storage, resultando em várias cópias.
- O conjunto de faixas do Lustre definido explicitamente usando
lfs setstripeoulfs setdirstripenão é preservado. - O
atimee octimedos arquivos não são preservados. - O
mtimedos diretórios não é preservado. - Os diretórios vazios não são preservados.
Receber operação
Para conferir o status de uma operação de importação ou exportação, você precisa do ID da operação. Esse ID é retornado pelo serviço quando você faz uma solicitação de importação ou exportação e usa o seguinte formato:
operation-1234567890123-6127783ad26ea-88913969-02748053
gcloud
gcloud lustre operations describe OPERATION_ID \
--location=LOCATION
REST
GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
Authorization: Bearer [YOUR_ACCESS_TOKEN]
Um exemplo de comando curl é:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
Cancelar operação
Para cancelar uma operação de importação ou exportação, você precisa do ID da operação. Esse ID é retornado pelo serviço quando você faz uma solicitação de importação ou exportação e usa o seguinte formato:
operation-1234567890123-6127783ad26ea-88913969-02748053
gcloud
gcloud lustre operations cancel OPERATION_ID \
--location=LOCATION
REST
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel
Authorization: Bearer [YOUR_ACCESS_TOKEN]
Um exemplo de comando curl é:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel
Limitações
Considere as seguintes limitações:
Apenas uma operação de transferência por instância pode estar ativa por vez. Iniciar uma segunda transferência antes que a primeira seja concluída retorna o seguinte erro:
ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation
Solução de problemas
Ao importar ou exportar dados para o Cloud Storage, você pode encontrar interrupções de transferência, problemas de permissão ou arquivos ignorados. Siga estas etapas para diagnosticar e resolver problemas comuns de transferência de dados.
Interrupções de transferência ou velocidades de saída lentas
Se uma operação de importação ou exportação for interrompida ou executada significativamente mais lenta do que o esperado, verifique o seguinte:
- Limites de largura de banda de saída do Cloud Storage:o Cloud Storage aplica uma cota de largura de banda de saída padrão de até 200 Gbps por região por projeto. Se várias instâncias ou cargas de trabalho de alta capacidade de processamento estiverem transferindo dados simultaneamente, você poderá ter um gargalo nessa cota. Consulte Cotas de largura de banda do Cloud Storage para solicitar um aumento de cota.
- Limites de capacidade de processamento da instância:as velocidades de transferência são limitadas pela capacidade máxima de processamento da instância (capacidade da instância multiplicada pela camada de performance). Verifique a camada de performance da instância para garantir que ela esteja alinhada às suas expectativas de performance.
Erros de permissão durante o início da transferência
Se o início de uma transferência falhar com um erro de permissão negada ou de autorização, verifique os seguintes papéis do IAM:
- Permissões de usuário e conta de serviço:a identidade que inicia o comando de transferência precisa ter
lustre.instances.importData(para importação) oulustre.instances.exportData(para exportação). Eles estão incluídos no papelroles/lustre.admin. - Permissões do agente de serviço: O agente de serviço do Managed Lustre gerenciado pelo Google
(
service-<PROJECT_NUMBER>@gcp-sa-lustre...) precisa terroles/storage.objectViewer(para importações) ouroles/storage.objectUser(para exportações) no bucket de destino do Cloud Storage. Consulte Conceder permissões ao agente de serviço para instruções detalhadas de configuração.
Arquivos ignorados ou atributos ausentes
As transferências de dados do Managed Lustre são incrementais. Elas só copiam arquivos que não existem no destino ou que foram alterados desde a última transferência.
- Se os arquivos parecerem ignorados, verifique se eles já foram transferidos com sucesso anteriormente e não foram modificados.
- Ao exportar dados para o Cloud Storage, os metadados POSIX (UID, GID, modo, mtime) são preservados usando chaves de metadados personalizados (por exemplo,
goog-reserved-posix-uid). Os links simbólicos, diretórios vazios e layouts de faixas PFL explícitos não são preservados durante a exportação. Consulte Atributos de arquivo de transferência de dados para mais detalhes.
Como inspecionar operações de transferência com falha
Se uma operação de transferência falhar, recupere a mensagem de erro detalhada e o motivo da falha usando o ID da operação:
gcloud lustre operations describe OPERATION_ID \
--location=LOCATION
Analise o campo error na saída da operação para determinar se a falha foi causada por objetos ausentes, tempos limite de rede ou autenticação.
Não é possível enfileirar a operação
Se você receber um erro semelhante a um dos seguintes ao tentar iniciar uma operação:
ERROR: (gcloud.lustre.instances.import-data) ABORTED: unable to queue the operation
ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation
ERROR: (gcloud.lustre.instances.update) ABORTED: unable to queue the operation
Esse erro ocorre quando você tenta iniciar uma operação enquanto outra operação do mesmo tipo já está em andamento na mesma instância.
- Importação/exportação:o Managed Lustre oferece suporte a apenas uma operação de transferência ativa por instância por vez. O enfileiramento não é compatível com operações de transferência.
- Atualização da instância:o Managed Lustre permite uma atualização ativa por instância por vez e permite que outra operação de atualização seja enfileirada.
Para resolver esse problema, aguarde a conclusão da operação atual antes de iniciar uma nova.
Erros FILESYSTEM_NO_SPACE_ON_DEVICE
Se a transferência retornar um erro FILESYSTEM_NO_SPACE_ON_DEVICE, mesmo que as ferramentas de monitoramento indiquem que o espaço livre agregado ainda está disponível, você poderá estar enfrentando desequilíbrio de OST, concessões de espaço do cliente ou esgotamento de inode.
Consulte No space left on device erros para detalhes e
estratégias de mitigação.