Implementa un sistema de archivos paralelos de Lustre en GCP

1. Descripción general

Te damos la bienvenida al codelab de Google para ejecutar un clúster de sistema de archivos paralelo de Lustre en Google Cloud Platform.

d51beef5f729cbe9.png

Los datos son fundamentales para la práctica de la computación de alto rendimiento, y acceder a grandes cantidades de datos a velocidades extremadamente altas y con latencias bajas siempre ha sido un desafío clave para ejecutar cargas de trabajo de HPC. Este requisito de almacenamiento de alto rendimiento no ha cambiado en la nube y, de hecho, la capacidad de utilizar grandes cantidades de almacenamiento de forma rápida y sencilla se ha vuelto primordial.

Los centros de HPC satisfacen esta necesidad desde hace mucho tiempo en las instalaciones con tecnologías como el sistema de archivos paralelos Lustre. Lustre es una de las soluciones de almacenamiento de alto rendimiento de código abierto más populares en la actualidad y, desde junio de 2005, la utiliza de forma constante al menos la mitad de las diez supercomputadoras más rápidas y más de 60 de las 100 más rápidas del mundo. Lustre tiene la capacidad de escalar hasta cientos de PB de capacidad y ofrecer el máximo rendimiento posible para los trabajos de HPC, con sistemas que ofrecen TB/s de capacidad de procesamiento en un solo espacio de nombres.

Para satisfacer la demanda de almacenamiento, Google Cloud adoptó dos enfoques. En primer lugar, GCP se asoció con DDN para llevar su software DDN EXAScaler Lustre compatible y de nivel empresarial a GCP Marketplace. En segundo lugar, nuestros ingenieros de Google Cloud desarrollaron y publicaron como código abierto un conjunto de secuencias de comandos para configurar y, luego, implementar con facilidad un clúster de almacenamiento de Lustre en Google Compute Engine con Google Cloud Deployment Manager.

Lustre en Google Cloud Platform es igualmente capaz de ofrecer el máximo rendimiento de la infraestructura en la que se ejecuta. Su rendimiento en GCP es tan bueno que ocupó el 8º lugar en la comparativa de sistemas de almacenamiento IO-500 en 2019 con nuestro socio DDN, lo que representa el sistema de archivos basado en la nube con la clasificación más alta en IO-500. Hoy te guiaremos por la implementación de las secuencias de comandos de Deployment Manager de código abierto para Lustre. Si te interesa tener una experiencia empresarial y reforzada de Lustre, con asistencia de expertos en Lustre para tu clúster de Lustre, así como funciones como una GUI de administración y supervisión o ajustes de Lustre, te recomendamos que investigues la oferta de DDN EXAScaler en Marketplace.

Qué aprenderás

  • Cómo usar el servicio de Deployment Manager de GCP
  • Cómo configurar e implementar un sistema de archivos Lustre en GCP
  • Cómo configurar la segmentación y probar E/S simples en el sistema de archivos Lustre

Requisitos previos

  • Una cuenta de Google Cloud Platform y un proyecto con facturación
  • Experiencia básica en Linux

2. Configuración

Configuración del entorno de autoaprendizaje

Crea un proyecto

Si aún no tienes una Cuenta de Google (Gmail o G Suite), debes crear una. Accede a Google Cloud Platform Console ( console.cloud.google.com) y abre la página Administrar recursos:

359c06e07e6d699f.png

Haz clic en Crear proyecto.

25c23d651abb837b.png

Ingresa un nombre para el proyecto. Recuerda el ID del proyecto (destacado en rojo en la captura de pantalla anterior). El ID del proyecto debe ser un nombre único en todos los proyectos de Google Cloud. Si el nombre de tu proyecto no es único, Google Cloud generará un ID de proyecto aleatorio basado en el nombre del proyecto.

A continuación, deberás habilitar la facturación en Developers Console para usar los recursos de Google Cloud.

Ejecutar este codelab debería costar solo unos pocos dólares, pero su costo podría aumentar si decides usar más recursos o si los dejas en ejecución (consulta la sección “Conclusión” al final de este documento). La calculadora de precios de Google Cloud está disponible aquí.

Los usuarios nuevos de Google Cloud Platform son aptos para obtener una prueba gratuita de USD 300.

Google Cloud Shell

Si bien Google Cloud se puede operar de manera remota desde tu laptop, en este codelab usaremos Google Cloud Shell, un entorno de línea de comandos que se ejecuta en la nube.

Inicia Google Cloud Shell

En GCP Console, haga clic en el ícono de Cloud Shell en la barra de herramientas superior derecha:

dbad104cef962719.png

Luego, haz clic en Iniciar Cloud Shell:

4e50db320508ac88.png

El aprovisionamiento y la conexión al entorno debería llevar solo unos minutos:

20b0aa80492144d.png

Esta máquina virtual está cargada con todas las herramientas de desarrollo que necesitarás. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud, lo que permite mejorar considerablemente el rendimiento de la red y simplificar la autenticación. Gran parte de tu trabajo en este lab, si no todo, se puede hacer simplemente con un navegador web o una Chromebook de Google.

Una vez que te conectes a Cloud Shell, deberías ver que ya te autenticaste y que el proyecto ya se configuró con tu PROJECT_ID:

$ gcloud auth list

Resultado del comando:

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
$ gcloud config list project

Resultado del comando:

[core]
project = <PROJECT_ID>

Si el ID del proyecto no está configurado correctamente, puedes establecerlo con este comando:

$ gcloud config set project <PROJECT_ID>

Resultado del comando:

Updated property [core/project].

3. Prepara y revisa la configuración de implementación de Lustre

Descarga las secuencias de comandos de Deployment Manager de Lustre

En la sesión de Cloud Shell, ejecuta el siguiente comando para clonar (descargar) el repositorio de Git que contiene los archivos de deployment-manager de Lustre para Google Cloud:

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

Ejecuta el siguiente comando para cambiar al directorio de configuración de la implementación de Lustre:

cd deploymentmanager-samples/community/lustre/

Configura el archivo YAML de implementación de Lustre

Deployment Manager usa un archivo YAML para proporcionar la configuración de la implementación. Este archivo YAML detalla la configuración de la implementación, como la versión de Lustre que se implementará y los tipos de instancias de máquinas que se implementarán. De forma predeterminada, el archivo está configurado para implementarse en un proyecto nuevo sin aumentos de cuota. Sin embargo, puedes cambiar el tipo o la capacidad de la máquina según lo desees para este codelab. Este codelab se escribió para usar estos valores predeterminados, por lo que, si realizas algún cambio, debes mantenerlo a lo largo de todo el codelab para evitar errores. En producción, recomendamos al menos una instancia de 32 CPU virtuales para el nodo de MDS y al menos una instancia de 8 o 16 CPU virtuales para los nodos de OSS, según la capacidad y el tipo de almacenamiento.

Para revisar o editar el archivo YAML en la sesión de Cloud Shell, abre el archivo YAML de configuración de la implementación Lustre-cluster.yaml. Puedes usar tu editor de línea de comandos preferido (vi, nano, emacs, etc.) o el editor de código de Cloud Console para ver el contenido del archivo:

11efd5af658f1842.png

El contenido del archivo se verá de la siguiente manera:

# [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]

En este archivo YAML, hay varios campos. Los campos que se muestran a continuación con un asterisco (*) son obligatorios. Estos campos incluyen lo siguiente:

Configuración del clúster

  • cluster_name*: Nombre del clúster de Lustre, antepone todos los recursos implementados
  • zone* - Zona en la que se implementará el clúster
  • cidr* - Rango de IP en formato CIDR
  • external_ips*: Es verdadero o falso. Indica si los nodos de Lustre tienen direcciones IP externas. Si es falso, se configura Cloud NAT como una puerta de enlace de NAT.
  • vpc_net: Define este campo y el campo vpc_subnet para implementar el clúster de Lustre en una VPC existente.
  • vpc_subnet: Subred de VPC existente en la que se implementará el clúster de Lustre
  • shared_vpc_host_proj: Define este campo, así como los campos vpc_net y vpc_subnet, para implementar el clúster en una VPC compartida.

Configuración del sistema de archivos

  • fs_name: Nombre del sistema de archivos Lustre
  • lustre_version: Es la versión de Lustre que se implementará. Usa "latest-release" para implementar la rama más reciente de https://downloads.whamcloud.com/public/lustre/ o lustre-X.X.X para implementar cualquier otra versión.
  • e2fs_version: Versión de E2fsprogs para implementar. Usa "latest" para implementar la rama más reciente de https://downloads.whamcloud.com/public/e2fsprogs/ o X.XX.X.wcX para implementar cualquier otra versión.

Configuración de MDS/MGS

  • mds_ip_address: Es la dirección IP interna que se especificará para el nodo MDS/MGS.
  • mds_machine_type: Es el tipo de máquina que se usará para el nodo de MDS/MGS (consulta https://cloud.google.com/compute/docs/machine-types).
  • mds_boot_disk_type: Tipo de disco que se usará para el disco de arranque de MDS/MGS (pd-standard, pd-ssd)
  • mds_boot_disk_size_gb: Es el tamaño del disco de arranque de MDS en GB.
  • mdt_disk_type* - Tipo de disco que se usará para el disco de destino de metadatos (MDT) (pd-standard, pd-ssd, local-ssd)
  • mdt_disk_size_gb*: Tamaño del disco del MDT en GB

Configuración de OSS

  • oss_node_count*: Cantidad de nodos de servidor de almacenamiento de objetos (OSS) que se crearán
  • oss_ip_range_start: Es el inicio del rango de IP para los nodos de OSS. Si no se especifica, usa la asignación automática de IP.
  • oss_machine_type: Tipo de máquina que se usará para los nodos de OSS
  • oss_boot_disk_type: Tipo de disco que se usará para el disco de arranque del OSS (pd-standard, pd-ssd)
  • oss_boot_disk_size_gb: Tamaño del disco de arranque de MDS en GB
  • ost_disk_type* - Tipo de disco que se usará para el disco de destino de Object Storage (OST) (pd-standard, pd-ssd, local-ssd)
  • ost_disk_size_gb* - Tamaño del disco de OST en GB

4. Implementa y verifica la configuración

Implementa la configuración

En la sesión de Cloud Shell, ejecuta el siguiente comando desde la carpeta Lustre-gcp:

gcloud deployment-manager deployments create lustre --config lustre.yaml

Este comando crea una implementación llamada Lustre. La operación puede tardar entre 10 y 20 minutos en completarse, así que ten paciencia.

Una vez que se complete la implementación, verás un resultado similar al siguiente:

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  []

Verifica la implementación

5f2a0557d3f2476f.png

Sigue estos pasos para ver la implementación en Google Cloud Platform Console:

  • En Cloud Console, abre el menú Productos y servicios en la esquina superior izquierda de la consola (tres líneas horizontales).
  • Haz clic en Deployment Manager.
  • Haz clic en Lustre para ver los detalles de la implementación.
  • Haz clic en Overview - Lustre. En el panel Propiedades de implementación, se muestra la configuración general de la implementación.
  • Haz clic en "Ver" en la propiedad Config. En el panel Config, se muestra el contenido del archivo YAML de configuración de la implementación que se modificó anteriormente. Verifica que el contenido sea correcto antes de continuar. Si necesitas cambiar una configuración de implementación, simplemente borra la implementación según los pasos que se indican en "Limpia la implementación" y reinicia la implementación según los pasos que se indican en "Configura el archivo YAML de implementación de Lustre".
  • (Opcional) En la sección Lustre-cluster, haz clic en cada uno de los recursos creados por la plantilla Lustre.jinja y revisa los detalles.

Una vez verificada la configuración de la implementación, confirmemos que se iniciaron las instancias del clúster. En el menú Productos y servicios de la consola de Cloud Platform, haz clic en Compute Engine > Instancias de VM.

aec8498e04a3c334.png

En la página Instancias de VM, revisa las cinco instancias de máquinas virtuales que creó el administrador de implementaciones. Esto incluye lustre-mds1, lustre-oss1, lustre-oss2, lustre-oss3 y lustre-oss4.

5. Accede al clúster de Lustre

Supervisa la instalación

En la página Instancias de VM, haz clic en lustre-mds1 para abrir la página Detalles de la instancia.

ba0bea7acdbb9527.png

Haz clic en Puerto en serie 1 (consola) para abrir la página de salida de la consola en serie. Usaremos esta salida serial para supervisar el proceso de instalación de la instancia de MDS y esperaremos hasta que se complete la secuencia de comandos de inicio. Haz clic en el botón "Actualizar" en la parte superior de la página para actualizar la salida serial. El nodo se reiniciará una vez para iniciar el kernel de Lustre y mostrará mensajes similares a los siguientes:

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)

Esto significa que Lustre está instalado en el clúster de Lustre y que el sistema de archivos está listo para usarse.

Accede al clúster de Lustre

En la sesión de Cloud Shell, haz clic en el botón SSH junto a la instancia lustre-mds1 en la consola de Google Cloud. Como alternativa, ejecuta el siguiente comando en Cloud Shell y reemplaza <ZONE> por la zona del nodo lustre-mds1:

gcloud compute ssh lustre-mds1 --zone=<ZONE>

Este comando accede a la máquina virtual lustre-mds1. Esta es la instancia del servidor de metadatos (MDS) de Lustre, que también actúa como la instancia del servidor de administración (MGS) de Lustre. Esta instancia controla todas las solicitudes de autenticación y metadatos del sistema de archivos.

Activaremos el sistema de archivos en nuestra instancia lustre-mds1 para poder probarlo más adelante. Ejecuta los siguientes comandos:

sudo mkdir /mnt/lustre
sudo mount -t lustre lustre-mds1:/lustre /mnt/lustre
cd /mnt/lustre

Estos tres comandos realizan tres acciones. El primer comando crea un directorio local que usaremos como punto de activación en “/mnt/lustre”. El segundo comando ejecuta el comando "mount" para activar el sistema de archivos de tipo "lustre", que se encuentra en el servidor lustre-mds1 y en el que el nombre del sistema de archivos es "lustre", que se ve como "/lustre". El comando mount activa el sistema de archivos Lustre en tu directorio local "/mnt/lustre". Por último, el tercer comando cambia el directorio a /mnt/lustre, donde se encuentra montado Lustre.

Ahora activaste el sistema de archivos Lustre en /mnt/lustre. Veamos qué podemos hacer con este sistema de archivos.

6. Visita guiada por las herramientas de la CLI de Lustre

Si no conoces Lustre ni sus herramientas, aquí te explicaremos algunos comandos importantes.

La herramienta de administración de clústeres de bajo nivel de Lustre es "lctl". Podemos usar lctl para configurar y administrar el clúster de Lustre, y para ver los servicios del clúster de Lustre. Para ver los servicios y las instancias en nuestro nuevo clúster de Lustre, ejecuta lo siguiente:

sudo lctl dl

Verás un resultado similar al siguiente, según los cambios que hayas realizado en el archivo de configuración YAML de 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 nuestro servidor de administración de Lustre (MGS) como el elemento 1, nuestro servidor de metadatos de Lustre (MDS) como el elemento 3, nuestro destino de metadatos de Lustre (MDT) como el elemento 5 y nuestros cuatro servidores de almacenamiento de objetos de Lustre (OSS) como los elementos del 8 al 12. Para comprender cuáles son los otros servicios, consulta el Manual de Lustre.

La herramienta de configuración del sistema de archivos de Lustre es "lfs". Podemos usar lfs para administrar el segmentado de archivos en nuestros servidores de almacenamiento de objetos (OSS) de Lustre y sus respectivos destinos de almacenamiento de objetos (OST), así como para ejecutar operaciones comunes del sistema de archivos, como find, df y la administración de cuotas.

El striping nos permite configurar cómo se distribuye un archivo en nuestro clúster de Lustre para ofrecer el mejor rendimiento posible. Si bien segmentar un archivo grande en la mayor cantidad posible de OSS suele ofrecer el mejor rendimiento, ya que paraleliza las E/S, segmentar un archivo pequeño puede generar un rendimiento peor que si ese archivo solo se escribiera en una sola instancia.

Para probar esto, configuremos dos directorios, uno con un recuento de bandas de un OSS y otro con un recuento de bandas de "-1", lo que indica que los archivos escritos en ese directorio deben distribuirse en tantas OSS como sea posible. Los directorios pueden contener configuraciones de bandas que heredan los archivos creados dentro de ellos, pero los subdirectorios y los archivos individuales dentro de ese directorio se pueden configurar para que tengan bandas diferentes si se desea. Para crear estos dos directorios, ejecuta los siguientes comandos mientras estás en el directorio “/mnt/lustre”:

sudo mkdir stripe_one
sudo mkdir stripe_all
sudo lfs setstripe -c 1 stripe_one/
sudo lfs setstripe -c -1 stripe_all/

Puedes ver la configuración de bandas de un archivo o directorio con lfs getstripe:

sudo lfs getstripe stripe_all/

Verás un resultado que muestra el recuento de bandas establecido como -1:

stripe_all/
stripe_count:  -1 stripe_size:   1048576 pattern:    raid0 stripe_offset: -1

Ahora, estamos listos para probar las mejoras de rendimiento que se pueden lograr escribiendo un archivo grande segmentado en varios OSS.

7. Prueba la E/S de Lustre

Ejecutaremos dos pruebas simples de E/S de Lustre para demostrar las posibles ventajas de rendimiento y capacidades de escalamiento del sistema de archivos Lustre. Primero, ejecutaremos una prueba simple con la utilidad "dd" para escribir un archivo de 5 GB en nuestro directorio "stripe_one". Ejecuta el siguiente comando:

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

El proceso para escribir 5 GB de datos en el sistema de archivos tarda alrededor de 27 segundos en promedio, y se escribe en un solo disco persistente (PD) en un solo servidor de Object Storage (OSS).

Para probar el fraccionamiento en varios OSS y, por lo tanto, en varios PD, solo necesitamos cambiar el directorio de salida en el que escribimos. Ejecuta el siguiente comando:

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

Observa que cambiamos "of=stripe_one/test" a "of=stripe_all/test". Esto permitirá que nuestra escritura de un solo flujo distribuya sus escrituras en todos nuestros servidores de almacenamiento de objetos y complete la escritura en un promedio de 5.5 segundos, aproximadamente 4 veces más rápido con cuatro OSS.

Este rendimiento sigue aumentando a medida que agregas servidores de almacenamiento de objetos, y puedes agregar OSS con el sistema de archivos en línea y comenzar a segmentar datos en ellos para aumentar la capacidad y el rendimiento en línea. Las posibilidades son infinitas con Lustre en Google Cloud Platform, y nos entusiasma ver lo que puedes crear y los problemas que puedes resolver.

8. Conclusión

Felicitaciones. Creaste un clúster de Lustre en Google Cloud Platform. Puedes usar estas secuencias de comandos como punto de partida para compilar tu propio clúster de Lustre y para integrarlo en tu clúster de procesamiento basado en la nube.

Limpia la implementación

Sal de la sesión del nodo de Lustre:

exit

Puedes limpiar fácilmente la implementación después de que terminemos ejecutando el siguiente comando desde tu Google Cloud Shell, después de salir del clúster de Lustre:

gcloud deployment-manager deployments delete lustre

Cuando se te indique, escribe Y para continuar. Esta operación puede tardar un poco. Ten paciencia.

Borra el proyecto

Para limpiar, simplemente borraremos nuestro proyecto.

  • En el menú de navegación, selecciona IAM y administración.
  • Luego, haz clic en Configuración en el submenú.
  • Haz clic en el ícono de la papelera con el texto "Borrar proyecto".
  • Sigue las instrucciones de las indicaciones

Temas abordados

  • Cómo usar el servicio de GCP Deployment Manager
  • Cómo configurar e implementar un sistema de archivos Lustre en GCP
  • Cómo configurar la segmentación y probar E/S simples en el sistema de archivos Lustre

Buscar asistencia

¿Estás creando algo genial con las secuencias de comandos del administrador de implementación de Lustre? ¿Tienes alguna pregunta? Chatea con nosotros en el grupo de debate de Google Cloud Lustre. Para solicitar funciones, proporcionar comentarios o informar errores, usa este formulario, o bien modifica el código y envía una solicitud de extracción. ¿Quieres hablar con un experto de Google Cloud? Comunícate hoy mismo con el equipo de Google Cloud a través del sitio web de computación de alto rendimiento de Google Cloud.

Más información

Comentarios

Envía tus comentarios sobre este codelab a través de este vínculo. Completar los comentarios lleva menos de 5 minutos. ¡Gracias!