1. Descripción general
Te damos la bienvenida al Codelab de Google para ejecutar un clúster del sistema de archivos paralelos de Lustre en Google Cloud Platform.
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 latencias bajas siempre ha sido un desafío clave para ejecutar cargas de trabajo de HPC. Este requisito de almacenamiento de alto rendimiento no cambió en la nube y, de hecho, la capacidad de utilizar grandes cantidades de almacenamiento de forma rápida y sencilla se volvió fundamental.
Durante mucho tiempo, los centros de HPC satisficieron esta necesidad 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, 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 la usan de forma constante. Lustre puede escalar hasta cientos de PB de capacidad y ofrecer el máximo rendimiento posible para las tareas de HPC, con sistemas que proporcionan TB/s de capacidad de procesamiento en un solo espacio de nombres.
Para satisfacer la demanda de almacenamiento, Google Cloud adoptó dos enfoques. Primero, 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 lanzaron como código abierto un conjunto de secuencias de comandos para configurar e implementar fácilmente un clúster de almacenamiento de Lustre en Google Compute Engine con Google Cloud Deployment Manager.
Lustre en Google Cloud Platform también puede ofrecer el máximo rendimiento de la infraestructura en la que se ejecuta. Su rendimiento en GCP es tan bueno que ocupó el puesto n° 8 en la comparativa del sistema de almacenamiento IO-500 en 2019 con nuestro socio DDN, que representa el sistema de archivos basado en la nube con la clasificación más alta en el IO-500. Hoy, le explicaremos cómo implementar las secuencias de comandos de código abierto de Deployment Manager para Lustre. Si te interesa tener una experiencia de Lustre empresarial y endurecida, 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 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 el seccionamiento y probar la E/S simple en el sistema de archivos Lustre
Requisitos previos
- 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 la consola de Google Cloud ( console.cloud.google.com) y abre la página Administrar recursos:
Haz clic en Crear proyecto.
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 del proyecto aleatorio según el nombre del proyecto.
A continuación, deberás habilitar la facturación en Play Console para usar los recursos de Google Cloud.
Ejecutar este codelab no debería costar más que 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 Platform 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:
Luego, haz clic en Iniciar Cloud Shell:
El aprovisionamiento y la conexión al entorno debería llevar solo unos minutos:
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 conectado a Cloud Shell, deberías ver que ya estás autenticado y que el proyecto ya está configurado 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 Lustre Deployment Manager
En la sesión de Cloud Shell, ejecuta el siguiente comando para clonar (descargar) el repositorio de Git que contiene los archivos del administrador de implementación de Lustre para Google Cloud Platform:
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/
Configurar YAML para la implementación de Lustre
Deployment Manager utiliza un archivo YAML para proporcionar la configuración de la implementación. En este archivo YAML, se 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. El archivo se configura de forma predeterminada para implementarse en un proyecto nuevo sin ningún aumento de cuota. Sin embargo, puedes cambiar el tipo de máquina o la capacidad como desees para este codelab. Este codelab está escrito para usar estos valores predeterminados, por lo que, si realizas algún cambio, debes implementar esos cambios a lo largo de este codelab para evitar errores. En producción, recomendamos al menos una instancia de 32 CPU virtuales para el nodo MDS y al menos una instancia de 8 o 16 CPU virtuales para los nodos de OSS, según el tipo y la capacidad de almacenamiento.
Para revisar o editar el archivo YAML en la sesión de Cloud Shell, abre el archivo YAML de configuración de implementación Lustre-cluster.yaml
. Puedes usar tu editor de línea de comandos preferido (vi, nano, emacs, etcétera) o el editor de código de Cloud Console para ver el contenido del archivo:
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]
Dentro de este archivo YAML, hay varios campos. Los campos que aparecen más abajo con un asterisco (*) son obligatorios. Estos campos incluyen lo siguiente:
Configuración del clúster
- cluster_name*: Es el nombre del clúster de Lustre. Se agrega al principio de todos los recursos implementados.
- zone*: Es la zona en la que se implementará el clúster.
- cidr*: Rango de IP en formato CIDR
- external_ips*: Verdadero/Falso. Los nodos de Lustre tienen direcciones IP externas. Si es falso, se configura Cloud NAT como una puerta de enlace NAT
- vpc_net: Define este campo, junto con el campo vpc_subnet, para implementar el clúster de Lustre en una VPC existente.
- vpc_subnet: Es la 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: Es el nombre del sistema de archivos Lustre.
- lustre_version: Versión de Lustre para 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: Es la versión de E2fsprogs que se 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: Dirección IP interna que se especificará para el nodo de MDS/MGS
- mds_machine_type: Es el tipo de máquina que se usará para el nodo MDS/MGS (consulta https://cloud.google.com/compute/docs/machine-types).
- mds_boot_disk_type: Tipo de disco que se utilizará 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*: Es el 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 MDT en GB
Configuración de OSS
- oss_node_count*: Es la cantidad de nodos de servidor de almacenamiento de objetos (OSS) que se crearán.
- oss_ip_range_start: inicio del rango de IP de los nodos OSS. Si no se especifica, usa la asignación de IP automática
- oss_machine_type: Tipo de máquina que se usará para los nodos OSS
- oss_boot_disk_type: Es el tipo de disco que se usará para el disco de arranque de 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 almacenamiento de objetos (OST) (pd-standard, pd-ssd, local-ssd)
- ost_disk_size_gb*: Es el tamaño del disco 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.
Cuando la implementación se haya completado, 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
Sigue estos pasos para ver la implementación en Google Cloud Platform Console:
- En la consola de Cloud Platform, 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 la 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ó antes. Verifica que el contenido sea correcto antes de continuar. Si necesitas cambiar la configuración de una implementación, simplemente borra la implementación según los pasos en “Limpia la implementación” y reinicia la implementación según los pasos en “Configura el YAML de la 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.
Con la configuración de la implementación verificada, confirmemos que se hayan iniciado las instancias del clúster. En la consola de Google Cloud Platform, en el menú Productos y servicios, haz clic en Compute Engine > Instancias de VM.
En la página Instancias de VM, revisa las cinco instancias de máquina virtual que creó el administrador de implementaciones. Esto incluye lustre-mds1, lustre-oss1, lustre-oss2, lustre-oss3 y lustre-oss4.
5. Accede al cúmulo 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.
Haz clic en Puerto en serie 1 (consola) para abrir la página de salida de la consola en serie. Usaremos este resultado en serie para supervisar el proceso de instalación de la instancia de MDS y esperar 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 en serie. El nodo se reiniciará una vez para iniciarse en 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 cúmulo 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 de Lustre (MDS), que también actúa como instancia del servidor de administración de Lustre (MGS). Esta instancia controla todas las solicitudes de autenticación y metadatos del sistema de archivos.
Activaremos el sistema de archivos en nuestra instancia de 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 del tipo "lustre", que se encuentra en el servidor lustre-mds1, y donde el nombre del sistema de archivos es "lustre", visto como "/lustre". El comando de activación activa el sistema de archivos Lustre en el directorio local “/mnt/lustre”. Por último, el tercer comando cambia de directorio al directorio /mnt/lustre, donde se activa Lustre.
Activaste el sistema de archivos Lustre en /mnt/lustre. Veamos qué podemos hacer con este sistema de archivos.
6. Recorrido por las herramientas de la CLI de Lustre
Si no conoces Lustre y sus herramientas, te explicaremos algunos comandos importantes aquí.
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, así como para ver los servicios del clúster. Para ver los servicios y las instancias de nuestro nuevo clúster de Lustre, ejecuta el siguiente comando:
sudo lctl dl
Verás un resultado similar al siguiente, según los cambios que hayas realizado en el archivo de configuración de 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 que nuestro servidor de gestión de Lustre (MGS) es el elemento 1, nuestro servidor de metadatos de Lustre (MDS) como elemento 3, nuestro objetivo de metadatos de Lustre (MDT) como elemento 5, y nuestros cuatro servidores de almacenamiento de objetos de Lustre (OSS) como 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 seccionamiento de archivos en nuestros servidores de almacenamiento de objetos (OSS) de Lustre y sus respectivos destinos de almacenamiento de objetos (OST), así como ejecutar operaciones comunes del sistema de archivos, como find, df y administración de cuotas.
El seccionamiento nos permite configurar cómo se distribuye un archivo en nuestro clúster de Lustre para ofrecer el mejor rendimiento posible. Si bien dividir un archivo grande en la mayor cantidad de OSS posible suele ofrecer el mejor rendimiento al paralelizar el E/S, quitar un archivo pequeño puede llevar a un peor rendimiento que si ese archivo se escribiera en una sola instancia.
Para probar esto, configuremos dos directorios, uno con un recuento de bandas de un OSS y el otro con un recuento de franjas de "-1", lo que indica que los archivos escritos en ese directorio deben dividirse en la mayor cantidad de OSS posible. Los directorios pueden contener configuraciones de fragmentación que heredan los archivos creados en ellos, pero los subdirectorios y los archivos individuales dentro de ese directorio se pueden configurar para que se seccionen de manera diferente si así se desea. Para crear estos dos directorios, ejecuta los siguientes comandos 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 franjas de un archivo o directorio con lfs gettripe:
sudo lfs getstripe stripe_all/
Verás un resultado que muestra el recuento de rayas 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 si escribes un archivo grande seccionado en varios OSS.
7. Prueba la E/S de Lustre
Ejecutaremos dos pruebas simples de la E/S de Lustre para demostrar las posibles ventajas de rendimiento y las 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 de escribir 5 GB de datos en el sistema de archivos tarda alrededor de 27 segundos en escribir en un solo disco persistente (PD) en un solo servidor de almacenamiento de objetos (OSS).
Para aplicar bandas de pruebas en varios OSS (y, por lo tanto, en varios PD), solo necesitamos cambiar el directorio de salida al que escribimos. Ejecuta el siguiente comando:
sudo dd if=/dev/zero of=stripe_all/test bs=1M count=5000
Ten en cuenta que cambiamos "of=stripe_one/test" a "of=stripe_all/test". Esto permitirá que nuestra operación de escritura de un solo flujo distribuya sus operaciones de escritura en todos nuestros servidores de almacenamiento de objetos y complete la operación 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. Puedes agregar OSS con el sistema de archivos en línea y comenzar a transferir datos para aumentar la capacidad y el rendimiento en línea. Con Lustre en Google Cloud Platform, las posibilidades son infinitas. Nos entusiasma ver qué puedes compilar y qué problemas puedes resolver.
8. Conclusión
Felicitaciones, creaste un clúster Lustre en Google Cloud Platform. Puedes usar estas secuencias de comandos como punto de partida para compilar tu propio clúster de Lustre y, luego, integrarlo a tu clúster de computación basado en la nube.
Limpia el objeto Deployment
Sal del nodo de Lustre:
exit
Puede limpiar fácilmente la implementación cuando terminemos. Para ello, ejecute el siguiente comando desde su 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 realizar la limpieza, simplemente borramos 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 que aparecen.
Temas abordados
- Cómo utilizar el servicio de Deployment Manager de GCP
- Cómo configurar e implementar un sistema de archivos Lustre en GCP
- Cómo configurar el seccionamiento y probar la E/S simple en el sistema de archivos Lustre
Buscar asistencia
¿Está creando algo interesante con los scripts de Lustre Deployment Manager? ¿Tienes alguna pregunta? Chatea con nosotros en el grupo de discusión de Google Cloud Lustre. Para solicitar funciones, enviar comentarios o informar errores, usa este formulario o no dudes en modificar el código y enviar una solicitud de extracción. ¿Quieres hablar con un experto de Google Cloud? Comunícate con el equipo de Google Cloud hoy mismo a través del sitio web de computación de alto rendimiento de Google Cloud.
Más información
Comentarios
Envía comentarios sobre este codelab a través de este vínculo. Completar los comentarios lleva menos de 5 minutos. ¡Gracias!