1. Visão geral
Bem-vindo ao codelab do Google para executar um cluster de sistema de arquivos paralelo do Lustre no Google Cloud Platform.

Os dados são essenciais para a prática da computação de alto desempenho (HPC), e o acesso a grandes quantidades de dados em velocidades extremamente altas e com baixa latência sempre foi um desafio fundamental na execução de cargas de trabalho de HPC. Esse requisito de armazenamento de alto desempenho não mudou na nuvem. Na verdade, a capacidade de usar grandes quantidades de armazenamento de forma rápida e fácil se tornou fundamental.
As centrais de HPC atendem a essa necessidade há muito tempo no local usando tecnologias como o sistema de arquivos paralelos Lustre. O Lustre é uma das soluções de armazenamento de alto desempenho de código aberto mais conhecidas atualmente. Desde junho de 2005, ele é usado por pelo menos metade dos dez e mais de 60 dos 100 supercomputadores mais rápidos do mundo. O Lustre tem a capacidade de escalonar verticalmente para centenas de PB de capacidade e oferecer o máximo desempenho possível para jobs de HPC, com sistemas que oferecem TB/s de capacidade de processamento em um único namespace.
Para atender à demanda de armazenamento, o Google Cloud adotou duas abordagens. Primeiro, o GCP fez uma parceria com a DDN para trazer o software DDN EXAScaler Lustre de nível empresarial compatível para o GCP Marketplace. Em segundo lugar, nossos engenheiros do Google Cloud desenvolveram e disponibilizaram como código aberto um conjunto de scripts para configurar e implantar facilmente um cluster de armazenamento do Lustre no Google Compute Engine usando o Google Cloud Deployment Manager.
O Lustre no Google Cloud Platform também é capaz de oferecer o desempenho máximo da infraestrutura em que está sendo executado. O desempenho dele no GCP é tão bom que ficou em 8º lugar no benchmark do sistema de armazenamento IO-500 em 2019 com nosso parceiro DDN, representando o sistema de arquivos baseado na nuvem com a melhor classificação no IO-500. Hoje, vamos mostrar como implantar os scripts do Deployment Manager de código aberto para o Lustre. Se você quiser uma experiência empresarial e reforçada do Lustre, com suporte de especialistas para seu cluster, além de recursos como uma GUI de gerenciamento e monitoramento ou ajustes do Lustre, recomendamos investigar a oferta do DDN EXAScaler no Marketplace.
O que você vai aprender
- Como usar o serviço do Deployment Manager do GCP
- Como configurar e implantar um sistema de arquivos Lustre no GCP.
- Como configurar o striping e testar E/S simples no sistema de arquivos Lustre.
Pré-requisitos
- Conta e projeto do Google Cloud Platform com faturamento
- Experiência básica com Linux
2. Configuração
Configuração de ambiente autoguiada
Criar um projeto
Se você ainda não tem uma Conta do Google (Gmail ou G Suite), crie uma. Faça login no Console do Google Cloud Platform ( console.cloud.google.com) e abra a página "Gerenciar recursos":

Clique em Criar projeto.

Digite um nome de projeto. Guarde o ID do projeto (destacado em vermelho na captura de tela acima). O ID do projeto precisa ser um nome exclusivo em todos os projetos do Google Cloud. Se o nome do projeto não for exclusivo, o Google Cloud vai gerar um ID do projeto aleatório com base no nome do projeto.
Em seguida, será necessário ativar o faturamento no Developers Console para usar os recursos do Google Cloud.
A execução deste codelab não deve custar mais do que alguns dólares, mas pode ser mais se você decidir usar mais recursos ou deixá-los em execução. Consulte a seção "Conclusão" no final deste documento. A calculadora de preços do Google Cloud Platform está disponível neste link.
Novos usuários do Google Cloud Platform estão qualificados para uma avaliação sem custo financeiro de US$300.
Google Cloud Shell
Embora o Google Cloud possa ser operado remotamente em seu laptop, neste codelab vamos usar o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.
Iniciar o Google Cloud Shell
No Console do GCP, clique no ícone do Cloud Shell na barra de ferramentas localizada no canto superior direito:

Em seguida, clique em Iniciar o Cloud Shell:

O provisionamento e a conexão ao ambiente levarão apenas alguns instantes para serem concluídos:

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB, além de ser executada no Google Cloud. Isso aprimora o desempenho da rede e simplifica a autenticação. Praticamente todo o trabalho neste laboratório pode ser feito em um navegador da Web ou em um Google Chromebook.
Depois de se conectar ao Cloud Shell, você vai ver que sua conta já está autenticada e que o projeto está configurado com seu PROJECT_ID:
$ gcloud auth list
Saída de comando:
Credentialed accounts:
- <myaccount>@<mydomain>.com (active)
$ gcloud config list project
Saída de comando:
[core]
project = <PROJECT_ID>
Se o ID do projeto não estiver definido corretamente, use este comando:
$ gcloud config set project <PROJECT_ID>
Saída de comando:
Updated property [core/project].
3. Preparar e analisar a configuração de implantação do Lustre
Fazer o download dos scripts do Lustre Deployment Manager
Na sessão do Cloud Shell, execute o comando a seguir para clonar (fazer o download) do repositório Git que contém os arquivos do deployment-manager do Lustre para o Google Cloud Platform:
git clone https://github.com/GoogleCloudPlatform/deploymentmanager-samples.git
Mude para o diretório de configuração de implantação do Lustre executando o seguinte comando:
cd deploymentmanager-samples/community/lustre/
Configurar o YAML de implantação do Lustre
O Deployment Manager usa um arquivo YAML para fornecer a configuração de implantação. Esse arquivo YAML detalha a configuração da implantação, como a versão do Lustre e os tipos de instância de máquina a serem implantados. Por padrão, o arquivo é configurado para implantação em um novo projeto sem aumentos de cota. No entanto, você pode mudar o tipo de máquina ou a capacidade conforme desejar para este codelab. Este codelab foi escrito para usar esses padrões. Portanto, se você fizer alguma mudança, precisará mantê-la ao longo do codelab para evitar erros. Em produção, recomendamos pelo menos uma instância de 32 vCPUs para o nó do MDS e pelo menos uma instância de 8 ou 16 vCPUs para os nós do OSS, dependendo da capacidade e do tipo de armazenamento.
Para revisar ou editar o arquivo YAML na sessão do Cloud Shell, abra o arquivo YAML de configuração da implantação Lustre-cluster.yaml. É possível usar o editor de linha de comando que preferir (vi, nano, emacs etc.) ou o editor de código do console do Cloud para ver o conteúdo do arquivo:

O conteúdo do arquivo será semelhante a este:
# [START cluster_yaml]
imports:
- path: lustre.jinja
resources:
- name: lustre
type: lustre.jinja
properties:
## Cluster Configuration
cluster_name : lustre
zone : us-central1-f
cidr : 10.20.0.0/16
external_ips : True
### Use these fields to deploy Lustre in an existing VPC, Subnet, and/or Shared VPC
#vpc_net : < VPC Network Name >
#vpc_subnet : < VPC Subnet Name >
#shared_vpc_host_proj : < Shared VPC Host Project name >
## Filesystem Configuration
fs_name : lustre
### Review https://downloads.whamcloud.com/public/ to determine version naming
lustre_version : latest-release
e2fs_version : latest
## Lustre MDS/MGS Node Configuration
#mds_node_count : 1
mds_ip_address : 10.20.0.2
mds_machine_type : n1-standard-8
### MDS/MGS Boot disk
mds_boot_disk_type : pd-standard
mds_boot_disk_size_gb : 10
### Lustre MetaData Target disk
mdt_disk_type : pd-ssd
mdt_disk_size_gb : 1000
## Lustre OSS Configuration
oss_node_count : 4
oss_ip_range_start : 10.20.0.5
oss_machine_type : n1-standard-4
### OSS Boot disk
oss_boot_disk_type : pd-standard
oss_boot_disk_size_gb : 10
### Lustre Object Storage Target disk
ost_disk_type : pd-standard
ost_disk_size_gb : 5000
# [END cluster_yaml]
Esse arquivo YAML tem vários campos. Os campos abaixo com um asterisco (*) são obrigatórios. Esses campos incluem:
Configuração do cluster
- cluster_name* - Nome do cluster Lustre, adiciona um prefixo a todos os recursos implantados
- zone* - Zona em que o cluster será implantado
- cidr* - Intervalo de IP no formato CIDR
- external_ips* - True/False, os nós do Lustre têm endereços IP externos. Se for "false", um Cloud NAT será configurado como um gateway NAT.
- vpc_net: defina esse campo e o campo vpc_subnet para implantar o cluster do Lustre em uma VPC atual.
- vpc_subnet: sub-rede VPC atual para implantar o cluster do Lustre
- shared_vpc_host_proj: defina esse campo, bem como os campos vpc_net e vpc_subnet, para implantar o cluster em uma VPC compartilhada.
Configuração do sistema de arquivos
- fs_name: nome do sistema de arquivos Lustre
- lustre_version: versão do Lustre a ser implantada. Use "latest-release" para implantar a ramificação mais recente de https://downloads.whamcloud.com/public/lustre/ ou lustre-X.X.X para implantar outras versões.
- e2fs_version: versão do E2fsprogs a ser implantada. Use "latest" para implantar o branch mais recente de https://downloads.whamcloud.com/public/e2fsprogs/ ou X.XX.X.wcX para implantar outras versões.
Configuração do MDS/MGS
- mds_ip_address: endereço IP interno a ser especificado para o nó MDS/MGS.
- mds_machine_type: tipo de máquina a ser usado para o nó MDS/MGS. Consulte https://cloud.google.com/compute/docs/machine-types.
- mds_boot_disk_type: tipo de disco a ser usado para o disco de inicialização do MDS/MGS (pd-standard, pd-ssd)
- mds_boot_disk_size_gb: tamanho do disco de inicialização do MDS em GB
- mdt_disk_type*: tipo de disco a ser usado para o disco de destino de metadados (MDT, na sigla em inglês) (pd-standard, pd-ssd, local-ssd)
- mdt_disk_size_gb* - Tamanho do disco MDT em GB
Configuração do OSS
- oss_node_count* - Número de nós do servidor de armazenamento de objetos (OSS) a serem criados
- oss_ip_range_start: início do intervalo de IPs para os nós do OSS. Se não for especificado, use a atribuição automática de IP
- oss_machine_type: tipo de máquina a ser usado para nós do OSS.
- oss_boot_disk_type: tipo de disco a ser usado para o disco de inicialização do OSS (pd-standard, pd-ssd)
- oss_boot_disk_size_gb: tamanho do disco de inicialização do MDS em GB
- ost_disk_type* - Tipo de disco a ser usado para o disco de destino de armazenamento de objetos (OST, na sigla em inglês): pd-standard, pd-ssd, local-ssd.
- ost_disk_size_gb* - Tamanho do disco OST em GB
4. Como implantar e verificar a configuração
Implantar a configuração
Na sessão do Cloud Shell, execute o seguinte comando na pasta Lustre-gcp:
gcloud deployment-manager deployments create lustre --config lustre.yaml
Esse comando cria uma implantação chamada Lustre. A operação pode levar de 10 a 20 minutos para ser concluída. Aguarde.
Quando a implantação for concluída, você verá uma saída semelhante a esta:
Create operation operation-1572410719018-5961966591cad-e25384f6-d4c905f8 completed successfully.
NAME TYPE STATE ERRORS INTENT
lustre-all-internal-firewall-rule compute.v1.firewall COMPLETED []
lustre-lustre-network compute.v1.network COMPLETED []
lustre-lustre-subnet compute.v1.subnetwork COMPLETED []
lustre-mds1 compute.v1.instance COMPLETED []
lustre-oss1 compute.v1.instance COMPLETED []
lustre-oss2 compute.v1.instance COMPLETED []
lustre-oss3 compute.v1.instance COMPLETED []
lustre-oss4 compute.v1.instance COMPLETED []
lustre-ssh-firewall-rule compute.v1.firewall COMPLETED []
Verificar a implantação

Siga estas etapas para ver a implantação no console do Google Cloud Platform:
- No console do Cloud Platform, abra o menu Produtos e serviços no canto superior esquerdo do console (três linhas horizontais).
- Clique em Deployment Manager.
- Clique em Lustre para conferir os detalhes da implantação.
- Clique em Visão geral - Lustre. O painel Propriedades da implantação mostra a configuração geral da implantação.
- Clique em Ver na propriedade Configuração. O painel Config mostra o conteúdo do arquivo YAML de configuração de implantação modificado anteriormente. Verifique se o conteúdo está correto antes de continuar. Se você precisar mudar uma configuração de implantação, basta excluir a implantação de acordo com as etapas em "Limpar a implantação" e reiniciar a implantação de acordo com as etapas em "Configurar o YAML de implantação do Lustre".
- (Opcional) Na seção Lustre-cluster, clique em cada um dos recursos criados pelo modelo Lustre.jinja e analise os detalhes.
Com a configuração da implantação verificada, vamos confirmar se as instâncias do cluster foram iniciadas. No console do Cloud Platform, no menu Produtos e serviços, clique em Compute Engine > Instâncias de VM.

Na página Instâncias de VM, revise as cinco instâncias de máquina virtual criadas pelo Deployment Manager. Isso inclui lustre-mds1, lustre-oss1, lustre-oss2, lustre-oss3 e lustre-oss4.
5. Acessar o cluster do Lustre
Monitorar a instalação
Na página "Instâncias de VM", clique em lustre-mds1 para abrir a página de detalhes da instância.

Clique em Porta serial 1 (console) para abrir a página de saída do console serial. Vamos usar essa saída serial para monitorar o processo de instalação da instância do MDS e aguardar até que o script de inicialização seja concluído. Clique no botão "Atualizar" na parte de cima da página para atualizar a saída serial. O nó será reinicializado uma vez para inicializar o kernel do Lustre e vai mostrar mensagens semelhantes a estas:
Startup finished in 838ms (kernel) + 6.964s (initrd) + 49.302s (userspace) = 57.105s.
Lustre: lustre-MDT0000: Connection restored to 374e2d80-0b31-0cd7-b2bf-de35b8119534 (at 0@lo)
Isso significa que o Lustre está instalado no cluster e o sistema de arquivos está pronto para ser usado.
Acessar o cluster do Lustre
Na sessão do Cloud Shell, clique no botão SSH ao lado da instância lustre-mds1 no console do Google Cloud. Como alternativa, execute o seguinte comando no Cloud Shell, substituindo <ZONE> pela zona do nó lustre-mds1:
gcloud compute ssh lustre-mds1 --zone=<ZONE>
Esse comando faz login na máquina virtual lustre-mds1. Essa é a instância do servidor de metadados (MDS) do Lustre, que também atua como a instância do servidor de gerenciamento (MGS) do Lustre. Essa instância processa todas as solicitações de autenticação e metadados do sistema de arquivos.
Vamos montar o sistema de arquivos na instância lustre-mds1 para poder testá-lo mais tarde. Execute os seguintes comandos:
sudo mkdir /mnt/lustre sudo mount -t lustre lustre-mds1:/lustre /mnt/lustre cd /mnt/lustre
Esses três comandos fazem três coisas. O primeiro comando cria um diretório local que será usado como um ponto de montagem em "/mnt/lustre". O segundo comando executa o comando "mount" para montar o sistema de arquivos do tipo "lustre", que fica no servidor lustre-mds1, e em que o nome do sistema de arquivos é "lustre", visto como "/lustre". O comando de montagem monta o sistema de arquivos Lustre no diretório local "/mnt/lustre". Por fim, o terceiro comando muda o diretório para /mnt/lustre, onde o Lustre está montado.
Agora você montou o sistema de arquivos Lustre em /mnt/lustre. Vamos ver o que podemos fazer com esse sistema de arquivos.
6. Tour pelas ferramentas da CLI do Lustre
Se você não conhece o Lustre e as ferramentas dele, vamos explicar alguns comandos importantes aqui.
A ferramenta de gerenciamento de cluster de baixo nível do Lustre é "lctl". Podemos usar o lctl para configurar e gerenciar o cluster Lustre e para ver os serviços dele. Para conferir os serviços e instâncias no novo cluster do Lustre, execute:
sudo lctl dl
Você vai ver uma saída semelhante à abaixo, dependendo das mudanças feitas no arquivo de configuração YAML do Lustre:
0 UP osd-ldiskfs lustre-MDT0000-osd lustre-MDT0000-osd_UUID 11
1 UP mgs MGS MGS 12
2 UP mgc MGC10.128.15.2@tcp 374e2d80-0b31-0cd7-b2bf-de35b8119534 4
3 UP mds MDS MDS_uuid 2
4 UP lod lustre-MDT0000-mdtlov lustre-MDT0000-mdtlov_UUID 3
5 UP mdt lustre-MDT0000 lustre-MDT0000_UUID 12
6 UP mdd lustre-MDD0000 lustre-MDD0000_UUID 3
7 UP qmt lustre-QMT0000 lustre-QMT0000_UUID 3
8 UP lwp lustre-MDT0000-lwp-MDT0000 lustre-MDT0000-lwp-MDT0000_UUID 4
9 UP osp lustre-OST0000-osc-MDT0000 lustre-MDT0000-mdtlov_UUID 4
10 UP osp lustre-OST0002-osc-MDT0000 lustre-MDT0000-mdtlov_UUID 4
11 UP osp lustre-OST0001-osc-MDT0000 lustre-MDT0000-mdtlov_UUID 4
12 UP osp lustre-OST0003-osc-MDT0000 lustre-MDT0000-mdtlov_UUID 4
Podemos ver o servidor de gerenciamento do Lustre (MGS) como item 1, o servidor de metadados do Lustre (MDS) como item 3, o destino de metadados do Lustre (MDT) como item 5 e os quatro servidores de armazenamento de objetos do Lustre (OSS) como itens de 8 a 12. Para entender quais são os outros serviços, consulte o Manual do Lustre (em inglês).
A ferramenta de configuração do sistema de arquivos do Lustre é "lfs". Podemos usar o lfs para gerenciar o striping de arquivos nos nossos servidores de armazenamento de objetos (OSS) do Lustre e nos respectivos destinos de armazenamento de objetos (OST), além de executar operações comuns do sistema de arquivos, como find, df e gerenciamento de cotas.
O striping permite configurar como um arquivo é distribuído no cluster do Lustre para oferecer o melhor desempenho possível. Embora a divisão de um arquivo grande em tantos OSSs quanto possível geralmente ofereça o melhor desempenho ao paralelizar a E/S, a divisão de um arquivo pequeno pode levar a um desempenho pior do que se esse arquivo fosse gravado em uma única instância.
Para testar isso, vamos configurar dois diretórios, um com uma contagem de faixas de um OSS e outro com uma contagem de faixas de "-1", indicando que os arquivos gravados nesse diretório devem ser distribuídos pelo maior número possível de OSSs. Os diretórios podem conter configurações de divisão que são herdadas pelos arquivos criados neles, mas os subdiretórios e arquivos individuais dentro desse diretório podem ser configurados para serem divididos de maneira diferente, se desejado. Para criar esses dois diretórios, execute os seguintes comandos no diretório "/mnt/lustre":
sudo mkdir stripe_one sudo mkdir stripe_all sudo lfs setstripe -c 1 stripe_one/ sudo lfs setstripe -c -1 stripe_all/
É possível conferir as configurações de faixa de um arquivo ou diretório usando lfs getstripe:
sudo lfs getstripe stripe_all/
Você vai ver uma saída mostrando a contagem de faixas definida como -1:
stripe_all/
stripe_count: -1 stripe_size: 1048576 pattern: raid0 stripe_offset: -1
Agora estamos prontos para testar as melhorias de desempenho que podem ser alcançadas ao gravar um arquivo grande distribuído em vários OSSs.
7. Testar E/S do Lustre
Vamos executar dois testes simples do Lustre IO para demonstrar as possíveis vantagens de desempenho e recursos de escalonamento do sistema de arquivos Lustre. Primeiro, vamos executar um teste simples usando o utilitário "dd" para gravar um arquivo de 5 GB no diretório "stripe_one". Execute o seguinte comando:
sudo dd if=/dev/zero of=stripe_one/test bs=1M count=5000
O processo para gravar 5 GB de dados no sistema de arquivos leva cerca de 27 segundos, gravando em um único disco permanente (PD) em um único servidor de armazenamento de objetos (OSS).
Para testar o striping em vários OSSs e, portanto, em vários PDs, basta mudar o diretório de saída em que gravamos. Execute o seguinte comando:
sudo dd if=/dev/zero of=stripe_all/test bs=1M count=5000
Perceba que mudamos "of=stripe_one/test" para "of=stripe_all/test". Isso permite que nossa gravação de fluxo único distribua as gravações em todos os servidores de armazenamento de objetos e conclua a gravação em média em 5, 5 segundos, cerca de 4 vezes mais rápido com quatro OSSs.
Esse desempenho continua aumentando à medida que você adiciona servidores de armazenamento de objetos. É possível adicionar OSSs com o sistema de arquivos on-line e começar a dividir os dados para aumentar a capacidade e o desempenho on-line. As possibilidades são infinitas usando o Lustre no Google Cloud Platform, e estamos animados para ver o que você pode criar e quais problemas pode resolver.
8. Conclusão
Parabéns, você criou um cluster do Lustre no Google Cloud Platform! Você pode usar esses scripts como ponto de partida para criar seu próprio cluster Lustre e integrá-lo ao cluster de computação baseado na nuvem.
Limpar a implantação
Saia do nó do Lustre:
exit
É fácil liberar espaço da implantação depois que terminarmos. Basta executar o seguinte comando no Google Cloud Shell depois de sair do cluster Lustre:
gcloud deployment-manager deployments delete lustre
Quando for solicitado, digite Y para continuar. Essa operação pode levar algum tempo. Aguarde.
Excluir o projeto
Para limpar, basta excluir o projeto.
- No menu de navegação, selecione "IAM e administrador".
- Em seguida, clique em "Configurações" no submenu.
- Clique no ícone da lixeira com o texto "Excluir projeto".
- Siga as instruções
O que aprendemos
- Como usar o serviço do Deployment Manager do GCP.
- Como configurar e implantar um sistema de arquivos Lustre no GCP.
- Como configurar o striping e testar E/S simples no sistema de arquivos Lustre.
Receber suporte
Você está criando algo legal usando os scripts do Deployment Manager do Lustre? Dúvidas? Converse com a gente no grupo de discussão do Google Cloud Lustre. Para solicitar recursos, enviar feedback ou relatar bugs, use este formulário. Você também pode modificar o código e enviar uma solicitação de pull. Quer falar com um especialista do Google Cloud? Entre em contato com a equipe do Google Cloud hoje mesmo pelo site de computação de alto desempenho do Google Cloud.
Saiba mais
Feedback
Envie feedback sobre este codelab usando este link. O feedback leva menos de 5 minutos para ser concluído. Agradecemos pela atenção!