Espelhar do Cloud Storage

Um espelho do Cloud Storage fornece um serviço de sincronização automatizado e orientado por eventos que espelha continuamente os arquivos de um bucket do Cloud Storage para um diretório do Managed Lustre. O espelhamento é compatível apenas em uma direção, do Cloud Storage para o Managed Lustre.

Os espelhos do Cloud Storage estão disponíveis apenas mediante solicitação. Para indicar seu interesse, envie o formulário de solicitação de espelhamento do Cloud Storage.

Para receber suporte com espelhos ativos do Cloud Storage, entre em contato com google-cloud-managed-lustre-support@google.com.

Espelhamentos do Cloud Storage em comparação com transferências de dados sob demanda

O Managed Lustre é compatível com dois mecanismos para mover dados com o Cloud Storage:

Recurso Espelhos do Cloud Storage Transferências de dados on demand
Direção Cloud Storage para Managed Lustre Cloud Storage para Managed Lustre

Managed Lustre para Cloud Storage
Gatilho Orientado por eventos; sincroniza automaticamente na criação, atualização e exclusão de objetos Manual
Namespace hierárquico Sem suporte Compatível e recomendado para velocidades de transferência aceleradas
Buckets do Rapid Storage Sem suporte Sem suporte

Para informações sobre transferências sob demanda, consulte Transferir dados de ou para o Cloud Storage.

Como funciona um espelho do Cloud Storage

Um espelho do Cloud Storage executa transferências baseadas em eventos entre uma origem do Cloud Storage e um diretório de destino do Managed Lustre. A origem do Cloud Storage pode ser um bucket ou um prefixo de objeto específico dentro de um bucket. O espelhamento é realizado em duas fases: uma sincronização inicial quando você cria o espelho, seguida pela replicação contínua das mudanças subsequentes.

Sincronização inicial

Quando você cria um espelho do Cloud Storage, o serviço realiza uma sincronização inicial para copiar todos os objetos do caminho de origem do Cloud Storage para o diretório de destino do Managed Lustre.

Replicação contínua orientada por eventos

Após a sincronização inicial, o serviço de espelhamento detecta notificações de bucket e replica as mudanças.

A maioria dos objetos pode ser replicada em minutos. Quando um objeto é criado ou modificado, o arquivo inteiro é copiado.

  • A criação de um novo objeto no Cloud Storage cria automaticamente o arquivo correspondente no Managed Lustre.

  • Modificar um objeto atual no Cloud Storage substitui o arquivo no Managed Lustre, descartando todas as modificações locais feitas no sistema de arquivos.

  • As alterações nos atributos de metadados POSIX personalizados em objetos do Cloud Storage, como UID, GID, modo ou mtime, são atualizadas no arquivo do Managed Lustre correspondente.

  • A exclusão de um objeto no Cloud Storage exclui o arquivo espelhado no Managed Lustre por padrão. É possível mudar esse comportamento usando a flag --deleted-files-retained. Os diretórios pai vazios permanecem no sistema de arquivos depois que o último arquivo abaixo deles é excluído.

  • As modificações feitas no Managed Lustre em arquivos espelhados não são copiadas de volta para o bucket de origem. Se o objeto de origem for atualizado posteriormente, o arquivo do Managed Lustre será substituído pelo conteúdo do objeto de origem, descartando todas as modificações locais.

  • A exclusão de um arquivo espelhado no Managed Lustre não exclui o objeto correspondente no Cloud Storage.

Velocidades de transferência

As seguintes velocidades de transferência se aplicam aos espelhos do Cloud Storage com buckets e instâncias na mesma região do Google Cloud :

  • A sincronização inicial copia os dados atuais em até 100 GBps para arquivos com mais de 32 MB e até 10.000 objetos por segundo para arquivos pequenos.

  • A replicação contínua sincroniza automaticamente as mudanças em andamento, com o desempenho da transferência variando de acordo com o tamanho do arquivo:

    • Arquivos grandes de 10 MB ou mais são transferidos com uma capacidade de pico de até 3,5 GBps.
    • Arquivos pequenos de 4 KB ou menos são transferidos a até 4.900 objetos por segundo.

Se os dados forem gravados no Cloud Storage mais rápido do que o espelho pode copiá-los, os eventos serão colocados em uma lista de pendências, aumentando o tempo necessário para que as mudanças apareçam no Managed Lustre. O espelho é atualizado automaticamente quando a taxa de alteração diminui.

A velocidade de transferência é limitada por:

  • A capacidade de processamento máxima de uma instância, que é a capacidade da instância multiplicada pelo nível de desempenho.

  • Largura de banda de saída do Cloud Storage, que é limitada a 200 Gbps ou 25 GBps por região e por projeto. Para aumentar a largura de banda de saída, solicite um aumento de cota.

  • Latência de rede para transferências entre regiões. Coloque o bucket de origem e a instância na mesma região para ter o melhor desempenho.

Preços

Um espelho do Cloud Storage gera cobranças padrão do Cloud Storage, que são faturadas para o projeto que contém o bucket de origem:

  • A sincronização inicial realiza operações de lista de classe A e de leitura de classe B no bucket de origem, e a replicação contínua realiza operações de leitura de classe B, que geram cobranças de operação do Cloud Storage.
  • O espelhamento de dados de um bucket de origem em uma região diferente da instância do Managed Lustre gera cobranças de transferência de dados entre regiões.

Antes de começar

Para criar um espelho do Cloud Storage, é necessário:

  • Uma instância do Managed Lustre no estado ACTIVE.
  • Um bucket do Cloud Storage para usar como origem do espelho. Não há suporte para buckets com namespace hierárquico ativado, buckets do Rapid Storage e buckets com Pagamentos do solicitante ativados.

Permissões, papéis e recursos necessários

As seguintes permissões, papéis e recursos do IAM são necessários para criar e gerenciar espelhos do Cloud Storage.

Permissões do usuário

Para criar e gerenciar espelhos, sua conta de usuário ou de serviço precisa do papel de administrador do Managed Lustre, roles/lustre.admin.

Se você usar um papel personalizado, ele vai exigir as seguintes permissões:

  • lustre.mirrors.create para criar um espelho.
  • lustre.mirrors.get para descrever um espelho.
  • lustre.mirrors.list para listar espelhos.
  • lustre.mirrors.update para atualizar um espelho.
  • lustre.mirrors.delete para excluir um espelho.

Inicialização do agente de serviço do Cloud Storage

O agente de serviço do Cloud Storage precisa existir no projeto para que possa publicar eventos de notificação de bucket:

gcloud storage service-agent --project=PROJECT_ID

Substitua PROJECT_ID pelo ID do projeto Google Cloud .

Permissões do agente de serviço do Managed Lustre

O agente de serviço do Managed Lustre gerenciado pelo Google precisa de acesso ao bucket do Cloud Storage de origem. Para instruções sobre como encontrar ou inicializar a identidade do agente de serviço, consulte Agente de serviço do Managed Lustre.

O agente de serviço requer as seguintes permissões no bucket de origem do Cloud Storage:

  • storage.buckets.get
  • storage.buckets.update
  • storage.objects.get
  • storage.objects.list

Crie um papel personalizado com estas permissões:

gcloud iam roles create lustreMirrorUser \
  --project=PROJECT_ID \
  --title="Lustre mirror user" \
  --permissions=storage.buckets.get,storage.buckets.update,storage.objects.get,storage.objects.list

Conceda o papel personalizado ao agente de serviço do Managed Lustre no bucket de origem:

gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
  --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com" \
  --role="projects/PROJECT_ID/roles/lustreMirrorUser"

Substitua:

  • PROJECT_ID: o ID do projeto do Google Cloud .
  • BUCKET_NAME: o nome do bucket do Cloud Storage de origem.
  • PROJECT_NUMBER: o número do projeto do Google Cloud .

Criar um espelho do Cloud Storage

É possível criar um espelho do Cloud Storage por instância do Managed Lustre.

Não é possível criar um espelho do Cloud Storage enquanto uma operação de importação ou exportação está em andamento na instância.

gcloud

Execute o comando mirrors create:

gcloud lustre instances mirrors create MIRROR_NAME \
  --instance=INSTANCE_ID \
  --location=LOCATION \
  --direction=from-cloud-storage \
  --gcs-path-uri="gs://BUCKET_NAME/PREFIX/" \
  --lustre-path="/LUSTRE_DIRECTORY"

Em que:

  • MIRROR_NAME é o nome desse recurso de espelhamento. Precisa ter de 1 a 63 caracteres, conter apenas letras minúsculas, números e hifens, começar com uma letra e terminar com uma letra ou um número.
  • INSTANCE_ID é o ID da instância do Managed Lustre.
  • LOCATION é a zona da instância. Por exemplo, us-central1-a.
  • --direction especifica a direção do espelhamento. Precisa ser from-cloud-storage.
  • --gcs-path-uri é o bucket de origem do Cloud Storage e o prefixo de objeto opcional. Se você especificar um prefixo de objeto, o caminho precisará terminar com uma barra: gs://<var>BUCKET_NAME</var>/<var>PREFIX</var>/.
  • --lustre-path é o diretório de destino no sistema de arquivos do Managed Lustre. Precisa ser um caminho absoluto começando com /, por exemplo, /data ou /data/subdir. O padrão é o diretório raiz, /. Se o diretório especificado não existir, ele será criado.

Os seguintes parâmetros opcionais estão disponíveis:

  • --deleted-files-retained ou --no-deleted-files-retained: controla se os arquivos excluídos no Cloud Storage são retidos no Managed Lustre. O padrão é --no-deleted-files-retained.
  • --description=DESCRIPTION_TEXT: uma descrição opcional para o espelho.

REST

Envie uma solicitação POST para o método instances.mirrors.create:

POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors?mirrorId=MIRROR_NAME
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json

{
  "gcsPath": {
    "uri": "gs://BUCKET_NAME/PREFIX/"
  },
  "lustrePath": {
    "path": "/LUSTRE_DIRECTORY"
  },
  "direction": "FROM_CLOUD_STORAGE"
}

Em que:

  • PROJECT_ID é o ID do projeto do Google Cloud .
  • LOCATION é a zona da instância do Managed Lustre. Por exemplo, us-central1-a.
  • INSTANCE_ID é o ID da instância.
  • MIRROR_NAME é o nome desse recurso de espelhamento. Precisa ter de 1 a 63 caracteres, conter apenas letras minúsculas, números e hifens, começar com uma letra e terminar com uma letra ou um número.
  • gcsPath contém um campo uri com o bucket de origem do Cloud Storage e o prefixo de objeto opcional. Se você especificar um prefixo de objeto, o caminho precisará terminar com uma barra: gs://<var>BUCKET_NAME</var>/<var>PREFIX</var>/.
  • lustrePath é o diretório de destino no sistema de arquivos do Managed Lustre. Precisa ser um caminho absoluto começando com /, por exemplo, /data ou /data/subdir. O padrão é o diretório raiz, /. Se o diretório especificado não existir, ele será criado.
  • direction especifica a direção do espelhamento. Precisa ser FROM_CLOUD_STORAGE.

O corpo da solicitação também aceita os seguintes campos opcionais:

  • deletedFilesRetained: defina como true para reter arquivos no Managed Lustre depois que os arquivos correspondentes forem excluídos do Cloud Storage. O padrão é false.
  • description: uma descrição opcional para o espelho.

Atributos de arquivo

Quando um arquivo é copiado de um bucket do Cloud Storage para uma instância do Managed Lustre, os atributos do arquivo na instância do Managed Lustre são definidos de uma das duas maneiras:

  • Se o objeto do Cloud Storage tiver metadados personalizados, conforme descrito para exportar dados:
    • O UID, o GID, o modo e o mtime do arquivo são definidos com base nos metadados personalizados do objeto.
    • O atime do arquivo é definido com o mesmo valor que o mtime.
  • 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 está definido como rwxr-xr-x (755).
    • O atime e o mtime do arquivo são definidos como o horário de criação do objeto do Cloud Storage.

Em ambos os casos:

  • O ctime de um arquivo é definido como o horário em que o arquivo foi gravado na instância.
  • Os valores de atime, ctime e mtime de um diretório são definidos como o horário em que o diretório foi criado na instância.

Gerenciar espelhos do Cloud Storage

É possível listar, descrever, atualizar e excluir espelhos do Cloud Storage usando a ferramenta Google Cloud CLI ou a API REST. Para alterar o caminho de origem ou de destino de um espelhamento, exclua o espelhamento atual e crie um novo.

Listar um espelho

Para ver um espelho configurado em uma instância:

gcloud

gcloud lustre instances mirrors list \
  --instance=INSTANCE_ID \
  --location=LOCATION

REST

Envie uma solicitação GET para o método instances.mirrors.list:

GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors
Authorization: Bearer YOUR_ACCESS_TOKEN

Descreva um espelho

Para conferir a configuração e o status de funcionamento de um espelho:

gcloud

gcloud lustre instances mirrors describe MIRROR_NAME \
  --instance=INSTANCE_ID \
  --location=LOCATION

REST

Envie uma solicitação GET para o método instances.mirrors.get:

GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors/MIRROR_NAME
Authorization: Bearer YOUR_ACCESS_TOKEN

Estados do espelho

O campo state retornado pelos comandos list e describe informa onde o espelho está no ciclo de vida:

Estado Descrição
CREATING O recurso de espelho está sendo criado.
INITIAL_SYNC A sincronização inicial está copiando objetos do Cloud Storage.
ACTIVE O espelho está sincronizando as mudanças conforme elas ocorrem.
DELETING O espelho está sendo excluído.

Atualizar um espelho

É possível atualizar a descrição, os rótulos e se os arquivos excluídos devem ser mantidos.

Não é possível mudar os caminhos do Cloud Storage e do Managed Lustre. Para apontar um espelho para um caminho diferente, exclua o espelho e crie um novo.

A atualização de um espelho não executa novamente a sincronização inicial.

gcloud

gcloud lustre instances mirrors update MIRROR_NAME \
  --instance=INSTANCE_ID \
  --location=LOCATION \
  --description="DESCRIPTION_TEXT"

REST

Envie uma solicitação PATCH ao método instances.mirrors.patch com um parâmetro de consulta updateMask:

PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors/MIRROR_NAME?updateMask=description
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json

{
  "description": "DESCRIPTION_TEXT"
}

Excluir um espelho

Para excluir um espelho:

gcloud

gcloud lustre instances mirrors delete MIRROR_NAME \
  --instance=INSTANCE_ID \
  --location=LOCATION

REST

Envie uma solicitação DELETE para o método instances.mirrors.delete:

DELETE https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors/MIRROR_NAME
Authorization: Bearer YOUR_ACCESS_TOKEN

A exclusão de um espelho interrompe a sincronização futura entre o Cloud Storage e o Managed Lustre. Os arquivos que já foram copiados para o Managed Lustre não são excluídos quando o espelho é removido.

As transferências de arquivos em andamento quando um espelho é excluído são canceladas. As transferências incompletas podem deixar arquivos temporários com o formato de nome FILENAME.cloud_transfer.UUID.NUMBER.tmp no diretório de espelhamento após a exclusão do espelhamento. Você pode excluir esses arquivos.

Como visualizar registros

Os registros de espelhamento identificam arquivos individuais que não foram sincronizados.

Os registros são roteados para o Cloud Logging no recurso lustre.googleapis.com/Instance, com o nome de registro mirror.

Para ver os registros de operações de espelhamento:

  1. Acesse a Análise de registros.
  2. Digite a seguinte consulta:

    resource.type="lustre.googleapis.com/Instance"
    logName="projects/PROJECT_ID/logs/lustre.googleapis.com%2Fmirror"
    resource.labels.instance_id="INSTANCE_ID"
    

Solução de problemas

Erros de PERMISSION_DENIED no bucket de origem

Se a criação do espelho falhar com um erro PERMISSION_DENIED, os arquivos não estiverem sendo sincronizados ou houver registros mostrando erros "PERMISSION_DENIED":

  1. Verifique se o agente de serviço do Cloud Storage foi inicializado:

    gcloud storage service-agent --project=PROJECT_ID
    
  2. Confirme se o agente de serviço do Managed Lustre recebeu as permissões necessárias no bucket de origem. Consulte Conceder permissões de agente de serviço para mais detalhes.

As mudanças no Cloud Storage não estão sendo replicadas para o Managed Lustre

Se o estado do espelho for ACTIVE, mas os objetos novos ou modificados no Cloud Storage não estiverem aparecendo no Managed Lustre, confirme se a configuração de notificação do bucket existe no bucket de origem.

  1. Liste as notificações do bucket:

    gcloud storage buckets notifications list --bucket=BUCKET_NAME
    
  2. Se a saída estiver vazia, exclua o espelho atual e crie um novo:

    gcloud lustre instances mirrors delete MIRROR_NAME \
      --instance=INSTANCE_ID \
      --location=LOCATION
    

    Depois que a exclusão for concluída, crie um novo espelho.

Erros de conflito entre nomes

Se você notar que há arquivos faltando no Managed Lustre depois de adicioná-los ao Cloud Storage, verifique se há erros de conflito de nomenclatura no Cloud Logging:

  • Se um objeto criado no Cloud Storage tiver o mesmo nome de um diretório no Managed Lustre, a transferência vai falhar com um erro file exists, e o diretório não será substituído. A transferência com falha deixa um arquivo temporário com o formato de nome FILENAME.cloud_transfer.UUID.NUMBER.tmp no diretório pai.
  • Se um objeto criado no Cloud Storage tiver um prefixo de caminho que corresponda a um arquivo regular no Managed Lustre, a transferência vai falhar com um erro not a directory, e o arquivo atual não será substituído. Por exemplo, se models for um arquivo atual no Managed Lustre, a transferência de um objeto chamado models/weights.bin do Cloud Storage vai falhar porque o diretório models/ não pode ser criado.

Para resolver esses conflitos, renomeie ou exclua o diretório ou arquivo conflitante no Managed Lustre, remova todos os arquivos .tmp restantes e faça upload do objeto novamente no Cloud Storage para acionar a sincronização.

ABORTED: unable to queue the operation

Se você receber um erro ABORTED: unable to queue the operation ao criar um espelho ou iniciar um job de transferência sob demanda:

  • Verifique se não há operações import-data ou export-data em execução na instância antes de criar um espelho.
  • Aguarde a conclusão da criação do espelho e da sincronização inicial antes de tentar outras operações de dados administrativos na instância.

FILESYSTEM_NO_SPACE_ON_DEVICE

Se o espelhamento for interrompido e os registros indicarem erros de espaço, talvez o sistema de arquivos do Managed Lustre esteja sem inodes ou capacidade de disco. Você pode excluir arquivos desnecessários para liberar espaço ou aumentar a capacidade de armazenamento para expandir o sistema de arquivos.