Implante um sistema de arquivos paralelo Lustre no GCP

1. Visão geral

Bem-vindo ao Google Codelab para executar um cluster de sistema de arquivos Lustre Parallel no Google Cloud Platform!

d51beef5f729cbe9.png

Os dados são essenciais para a prática da computação de alto desempenho, e o acesso a grandes quantidades de dados em velocidades extremamente altas e baixa latência sempre foi um desafio importante na execução de cargas de trabalho de HPC. Esse requisito de armazenamento de alto desempenho não mudou na nuvem, e, na verdade, a capacidade de utilizar grandes quantidades de armazenamento de forma rápida e fácil se tornou fundamental.

Os centros de HPC já atendiam essa necessidade localmente usando tecnologias como o sistema de arquivos paralelo Lustre. O Lustre é uma das soluções de armazenamento de alto desempenho de código aberto mais populares atualmente e, desde junho de 2005, tem sido usado consistentemente por pelo menos metade dos dez principais e por mais de 60 dos 100 supercomputadores mais rápidos do mundo. O Lustre pode ser dimensionado para centenas de PB de capacidade e oferecer o máximo desempenho possível para trabalhos de HPC, com sistemas que fornecem TB/s de throughput 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, com suporte e de nível empresarial, para o GCP Marketplace. Em segundo lugar, nossos engenheiros no Google Cloud desenvolveram e disponibilizaram em 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 ele ficou em 8o lugar no comparativo de mercado de sistemas de armazenamento IO-500 em 2019 com nosso parceiro DDN, que representa o sistema de arquivos baseado em nuvem com a mais alta 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 ter uma experiência reforçada e empresarial do Lustre, com suporte especializado do Lustre para o cluster do Lustre, além de recursos como uma GUI de gerenciamento e monitoramento ou ajustes do Lustre, recomendamos conhecer a oferta do DDN EXAScaler Marketplace.

O que você vai aprender

  • Como usar o serviço Deployment Manager do GCP
  • Como configurar e implantar um sistema de arquivos Lustre no GCP.
  • Como configurar a divisão e testar E/S simples no sistema de arquivos Lustre.

Pré-requisitos

  • Conta do Google Cloud Platform e um projeto 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:

359c06e07e6d699f.png

Clique em Criar projeto.

25c23d651abb837b.png

Digite um nome de projeto. Lembre-se do ID do projeto (destacado em vermelho na captura de tela acima). O ID do projeto precisa ser exclusivo em todos os projetos do Google Cloud. Se o nome do projeto não for exclusivo, o Google Cloud vai gerar um ID aleatório com base no nome do projeto.

Em seguida, ative o faturamento no console do desenvolvedor 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 se 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 aqui.

Novos usuários do Google Cloud Platform estão qualificados para um teste gratuito de US$ 300.

Google Cloud Shell

Embora o Google Cloud possa ser operado remotamente do seu laptop, neste codelab vamos usar o Google Cloud Shell, um ambiente de linha de comando executado no Cloud.

Inicie o Google Cloud Shell

No Console do GCP, clique no ícone do Cloud Shell na barra de ferramentas localizada no canto superior direito:

dbad104cef962719.png

Em seguida, clique em Iniciar o Cloud Shell:

4e50db320508ac88.png

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

20b0aa80492144d.png

Essa máquina virtual contém todas as ferramentas de desenvolvimento necessárias. Ela oferece um diretório principal persistente de 5 GB e é executada no Google Cloud. Isso aprimora o desempenho e a autenticação da rede. Praticamente todo o trabalho neste laboratório pode ser feito em um navegador da Web ou em um Chromebook do Google.

Após se conectar ao Cloud Shell, você já estará autenticado e o projeto estará 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. Prepare e revise 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 do Git que contém os arquivos de deployment-manager do Lustre para a Plataforma Google Cloud:

git clone https://github.com/GoogleCloudPlatform/deploymentmanager-samples.git

Alterne 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. O arquivo é configurado por padrão para ser implantado em um novo projeto sem aumento de cota. No entanto, você pode mudar o tipo de máquina ou a capacidade conforme desejar para este codelab. Este codelab foi criado para usar esses padrões. Portanto, se você fizer alguma mudança, será necessário contá-la ao longo do codelab para evitar erros. Na produção, recomendamos pelo menos uma instância de 32 vCPUs para o nó MDS e pelo menos uma instância de 8 ou 16 vCPUs para os nós 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. Você pode usar o editor de linha de comando que preferir (vi, nano, emacs etc.) ou o editor de código do Console do Cloud para conferir o conteúdo do arquivo:

11efd5af658f1842.png

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]

Dentro desse arquivo YAML há 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, que é adicionado no início de todos os recursos implantados
  • zone*: a zona em que o cluster será implantado
  • cidr* - intervalo de IP no formato CIDR
  • external_ips*: verdadeiro/falso, os nós do Lustre têm endereços IP externos. Se for falso, o Cloud NAT será configurado como um gateway NAT.
  • vpc_net: defina esse campo e o campo vpc_subnet para implantar o cluster Lustre em uma VPC existente.
  • 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

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 usar 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 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 IP para o(s) nó(s) OSS. Se não for especificado, usar a atribuição de IP automática
  • oss_machine_type - tipo de máquina a ser usado para nós 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) (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, por isso, seja paciente.

Quando a implantação terminar, uma resposta semelhante a esta vai aparecer:

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

5f2a0557d3f2476f.png

Siga estas etapas para visualizar a implantação no Console do Google Cloud Platform:

  • No console do Cloud Platform, abra o menu Products &Services 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 Overview - Lustre. O painel Propriedades da implantação exibe a configuração geral da implantação.
  • Clique em Ver na propriedade Configuração. O painel Configuração 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, exclua a implantação de acordo com as etapas em "Limpeza da implantação" e reinicie 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 revise os detalhes.

Com a configuração da implantação verificada, vamos confirmar se as instâncias do cluster foram iniciadas. No menu Produtos e serviços do console do Cloud Platform, clique em Compute Engine > Instâncias de VM.

aec8498e04a3c334.png

Na página Instâncias de VM, veja as cinco instâncias de máquina virtual que foram 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 "Detalhes da instância".

ba0bea7acdbb9527.png

Clique em Porta serial 1 (console) para abrir a página de saída do console serial. Usaremos essa saída serial para monitorar o processo de instalação da instância 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 no kernel do Lustre e exibir mensagens semelhantes às abaixo:

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 do Lustre, e o sistema de arquivos está pronto para ser utilizado.

Acessar o cluster 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 comando a seguir 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 do Lustre (MDS), que também atua como a instância do servidor de gerenciamento do Lustre (MGS). 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 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 onde o nome do sistema de arquivos é "lustre", exibido como "/lustre". O comando "mount" monta o sistema de arquivos Lustre no diretório local "/mnt/lustre". Por fim, o terceiro comando muda o diretório para o diretório /mnt/lustre, em que o Lustre está ativado.

Você montou o sistema de arquivos Lustre em /mnt/lustre. Vamos conferir o que podemos fazer com esse sistema de arquivos.

6. Tour pelas ferramentas de CLI do Lustre

Se você não conhece o Lustre e as ferramentas dele, vamos mostrar alguns comandos importantes.

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 conferir os serviços dele. Para conferir os serviços e as 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 alvo de metadados do Lustre (MDT) como item 5 e os quatro servidores de armazenamento do objeto do Lustre (OSS) como itens de 8 a 12. Para entender quais são os outros serviços, consulte o Manual do Lustre.

A ferramenta de configuração do sistema de arquivos do Lustre é "lfs". Podemos usar o lfs para gerenciar o stripping de arquivos nos nossos servidores de armazenamento de objetos do Lustre (OSS) 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 cota.

A distribuição nos permite configurar como um arquivo é distribuído no cluster do Lustre para oferecer o melhor desempenho possível. Embora dividir um arquivo grande no maior número possível de OSSs muitas vezes ofereça o melhor desempenho carregando a E/S em paralelo, dividir um arquivo pequeno pode gerar pior desempenho do que se o arquivo fosse gravado somente em uma única instância.

Para testar isso, vamos configurar dois diretórios, um com uma contagem de listras de um OSS e outro com uma contagem de listras de "-1", indicando que os arquivos gravados nesse diretório precisam ser divididos em tantos OSSs quanto possível. Os diretórios podem conter configurações de divisão herdadas por arquivos criados neles, mas os subdiretórios e arquivos individuais dentro desse diretório podem ser configurados para serem distribuídos de maneira diferente, se você quiser. 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/

A saída vai mostrar a contagem de listras 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 dividido em vários OSSs.

7. Testar a E/S do Lustre

Executaremos dois testes simples da E/S do Lustre para demonstrar as possíveis vantagens de desempenho e os 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 em nosso diretório "stripe_one". Execute o seguinte comando:

sudo dd if=/dev/zero of=stripe_one/test bs=1M count=5000

O processo de gravação de 5 GB de dados no sistema de arquivos leva em média 27 segundos, gravando em um único disco permanente (PD, na sigla em inglês) em um único servidor de armazenamento de objetos (OSS, na sigla em inglês).

Para testar o stripping 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 stream único distribua as gravações em todos os nossos servidores de armazenamento de objetos e conclua a gravação em uma média de 5, 5 segundos, cerca de quatro vezes mais rápido com quatro OSSs.

Esse desempenho continua aumentando conforme 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 ao usar o Lustre no Google Cloud Platform, e estamos animados para ver o que você pode criar e quais problemas é possível 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

Para limpar a implantação depois de terminar, execute o comando a seguir no Cloud Shell do Google Cloud, depois de sair do cluster do Lustre:

gcloud deployment-manager deployments delete lustre

Quando for solicitado, digite Y para continuar. Esta operação pode levar algum tempo.

Excluir o projeto

Para fazer a limpeza, 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 stripping 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, fornecer feedback ou informar bugs, use este formulário ou sinta-se à vontade para modificar o código e enviar uma solicitação de envio. Quer conversar com um especialista do Google Cloud? Entre em contato com a equipe do Google Cloud pelo site de computação de alto desempenho do Google Cloud.

Saiba mais

Feedback

Use este link para enviar feedback sobre este codelab. O feedback leva menos de cinco minutos. Valeu!