Déployer un système de fichiers parallèles Lustre sur GCP

1. Présentation

Bienvenue dans l'atelier de programmation Google pour exécuter un cluster de système de fichiers parallèles Lustre sur Google Cloud Platform.

d51beef5f729cbe9.png

Les données sont au cœur du calcul hautes performances (HPC). L'accès à de grandes quantités de données à des vitesses extrêmement élevées et avec une faible latence a toujours été un défi majeur pour l'exécution des charges de travail HPC. Cette exigence de stockage haute performance n'a pas changé dans le cloud. En fait, la capacité à utiliser de grandes quantités de stockage rapidement et facilement est devenue primordiale.

Les centres HPC répondent depuis longtemps à ce besoin sur site à l'aide de technologies telles que le système de fichiers parallèles Lustre. Lustre est l'une des solutions de stockage hautes performances Open Source les plus populaires aujourd'hui. Depuis juin 2005, elle est constamment utilisée par au moins la moitié des dix et plus de 60 des 100 supercalculateurs les plus rapides au monde. Lustre peut évoluer jusqu'à des centaines de pétaoctets de capacité et offrir les meilleures performances possibles pour les jobs HPC, avec des systèmes offrant des téraoctets par seconde de débit dans un seul espace de noms.

Pour répondre à la demande de stockage, Google Cloud a adopté deux approches. Tout d'abord, GCP s'est associé à DDN pour proposer son logiciel DDN EXAScaler Lustre de classe entreprise compatible sur GCP Marketplace. Deuxièmement, nos ingénieurs Google Cloud ont développé et mis à disposition en Open Source un ensemble de scripts permettant de configurer et de déployer facilement un cluster de stockage Lustre sur Google Compute Engine à l'aide de Google Cloud Deployment Manager.

Lustre sur Google Cloud Platform est tout aussi capable de fournir les performances maximales de l'infrastructure sur laquelle il s'exécute. Ses performances sur GCP sont si bonnes qu'il s'est classé 8e au benchmark IO-500 des systèmes de stockage en 2019 avec notre partenaire DDN, ce qui représente le système de fichiers basé sur le cloud le mieux classé de l'IO-500. Aujourd'hui, nous allons vous expliquer comment déployer les scripts Open Source Deployment Manager pour Lustre. Si vous souhaitez bénéficier d'une expérience Lustre d'entreprise renforcée, avec une assistance d'experts Lustre pour votre cluster Lustre, ainsi que des fonctionnalités telles qu'une interface utilisateur graphique de gestion et de surveillance ou des réglages Lustre, nous vous recommandons d'examiner l'offre DDN EXAScaler sur le Marketplace.

Points abordés

  • Utiliser le service GCP Deployment Manager
  • Découvrez comment configurer et déployer un système de fichiers Lustre sur GCP.
  • Configurer le striping et tester les E/S simples sur le système de fichiers Lustre

Prérequis

  • Compte Google Cloud Platform et projet avec facturation
  • Expérience Linux de base

2. Configuration

Configuration de l'environnement au rythme de chacun

Créer un projet

Si vous ne possédez pas encore de compte Google (Gmail ou G Suite), vous devez en créer un. Connectez-vous à la console Google Cloud Platform ( console.cloud.google.com) et ouvrez la page Gérer les ressources :

359c06e07e6d699f.png

Cliquez sur Créer un projet.

25c23d651abb837b.png

Saisissez le nom du projet. Retenez l'ID du projet (mis en évidence en rouge dans la capture d'écran ci-dessus). L'ID du projet doit être un nom unique parmi tous les projets Google Cloud. Si le nom de votre projet n'est pas unique, Google Cloud générera un ID de projet aléatoire basé sur le nom du projet.

Vous devez ensuite activer la facturation dans la console Developers pour pouvoir utiliser les ressources Google Cloud.

Suivre cet atelier de programmation ne devrait pas vous coûter plus d'un euro. Cependant, cela peut s'avérer plus coûteux si vous décidez d'utiliser davantage de ressources ou si vous n'interrompez pas les ressources (voir la section "Conclusion" à la fin du présent document). Le simulateur de coût Google Cloud Platform est disponible sur cette page.

Les nouveaux utilisateurs de Google Cloud Platform peuvent bénéficier d'un essai sans frais avec 300$de crédits.

Google Cloud Shell

Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons nous servir de Google Cloud Shell pour cet atelier de programmation, un environnement de ligne de commande exécuté dans le cloud.

Lancer Google Cloud Shell

Depuis la console GCP, cliquez sur l'icône Cloud Shell de la barre d'outils située dans l'angle supérieur droit :

dbad104cef962719.png

Cliquez ensuite sur Démarrer Cloud Shell :

4e50db320508ac88.png

Le provisionnement de l'environnement et la connexion ne devraient pas prendre plus de quelques minutes :

20b0aa80492144d.png

Cette machine virtuelle contient tous les outils de développement nécessaires. Elle comprend un répertoire d'accueil persistant de 5 Go et s'exécute sur Google Cloud, ce qui améliore nettement les performances du réseau et simplifie l'authentification. Vous pouvez réaliser une grande partie, voire la totalité, des activités de cet atelier dans un simple navigateur Web ou sur un Google Chromebook.

Une fois connecté à Cloud Shell, vous êtes en principe authentifié, et le projet est déjà défini sur votre PROJECT_ID :

$ gcloud auth list

Résultat de la commande :

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

Résultat de la commande :

[core]
project = <PROJECT_ID>

Si l'ID de projet n'est pas défini correctement, vous pouvez le définir avec cette commande :

$ gcloud config set project <PROJECT_ID>

Résultat de la commande :

Updated property [core/project].

3. Préparer et examiner la configuration du déploiement Lustre

Télécharger les scripts Deployment Manager Lustre

Dans la session Cloud Shell, exécutez la commande suivante pour cloner (télécharger) le dépôt Git contenant les fichiers Deployment Manager de Lustre pour Google Cloud Platform :

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

Passez au répertoire de configuration du déploiement Lustre en exécutant la commande suivante :

cd deploymentmanager-samples/community/lustre/

Configurer le fichier YAML de déploiement Lustre

Deployment Manager utilise un fichier YAML pour fournir la configuration du déploiement. Ce fichier YAML détaille la configuration du déploiement, comme la version de Lustre à déployer et les types d'instances de machine à déployer. Par défaut, le fichier est configuré pour être déployé dans un nouveau projet sans augmentation de quota. Toutefois, vous pouvez modifier le type de machine ou la capacité comme vous le souhaitez pour cet atelier de programmation. Cet atelier de programmation est écrit pour utiliser ces valeurs par défaut. Par conséquent, si vous apportez des modifications, vous devez les appliquer tout au long de cet atelier pour éviter les erreurs. En production, nous recommandons au moins une instance à 32 vCPU pour le nœud MDS, et au moins une instance à 8 ou 16 vCPU pour les nœuds OSS, en fonction de la capacité et du type de stockage.

Pour examiner ou modifier le fichier YAML dans la session Cloud Shell, ouvrez le fichier YAML de configuration du déploiement Lustre-cluster.yaml. Pour afficher le contenu du fichier, vous pouvez utiliser l'éditeur de ligne de commande de votre choix (vi, nano, emacs, etc.) ou l'éditeur de code de la console Cloud :

11efd5af658f1842.png

Le contenu du fichier se présente comme suit :

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

Ce fichier YAML contient plusieurs champs. Les champs ci-dessous marqués d'un astérisque (*) sont obligatoires. Ces champs sont les suivants :

Configuration du cluster

  • cluster_name* : nom du cluster Lustre, préfixe toutes les ressources déployées
  • zone* : zone dans laquelle déployer le cluster.
  • cidr* : plage d'adresses IP au format CIDR
  • external_ips* : "True" ou "False" (les nœuds Lustre ont des adresses IP externes). Si la valeur est "false", une passerelle NAT Cloud NAT est configurée.
  • vpc_net : définissez ce champ et le champ vpc_subnet pour déployer le cluster Lustre sur un VPC existant.
  • vpc_subnet : sous-réseau VPC existant sur lequel déployer le cluster Lustre
  • shared_vpc_host_proj : définissez ce champ, ainsi que les champs vpc_net et vpc_subnet, pour déployer le cluster dans un VPC partagé.

Configuration du système de fichiers

Configuration MDS/MGS

  • mds_ip_address : adresse IP interne à spécifier pour le nœud MDS/MGS
  • mds_machine_type : type de machine à utiliser pour le nœud MDS/MGS (voir https://cloud.google.com/compute/docs/machine-types)
  • mds_boot_disk_type : type de disque à utiliser pour le disque de démarrage MDS/MGS (pd-standard, pd-ssd)
  • mds_boot_disk_size_gb : taille du disque de démarrage MDS en Go
  • mdt_disk_type* : type de disque à utiliser pour le disque MDT (pd-standard, pd-ssd, local-ssd)
  • mdt_disk_size_gb* : taille du disque MDT en Go

Configuration OSS

  • oss_node_count* : nombre de nœuds OSS (Object Storage Server) à créer
  • oss_ip_range_start : début de la plage d'adresses IP pour les nœuds OSS. Si aucune valeur n'est spécifiée, utiliser l'attribution automatique d'adresses IP
  • oss_machine_type : type de machine à utiliser pour les nœuds OSS
  • oss_boot_disk_type : type de disque à utiliser pour le disque de démarrage OSS (pd-standard, pd-ssd)
  • oss_boot_disk_size_gb : taille du disque de démarrage MDS en Go
  • ost_disk_type* : type de disque à utiliser pour le disque OST (Object Storage Target) (pd-standard, pd-ssd, local-ssd)
  • ost_disk_size_gb* : taille du disque OST en Go

4. Déployer et vérifier la configuration

Déployer la configuration

Dans la session Cloud Shell, exécutez la commande suivante à partir du dossier Lustre-gcp :

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

Cette commande crée un déploiement nommé Lustre. L'opération peut prendre entre 10 et 20 minutes. Merci de patienter.

Une fois le déploiement terminé, un résultat semblable à celui-ci s'affiche :

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

Vérifier le déploiement

5f2a0557d3f2476f.png

Pour afficher le déploiement dans la console Google Cloud Platform, procédez comme suit :

  • Dans la console Cloud Platform, ouvrez le menu Produits et services en haut à gauche de la console (trois lignes horizontales).
  • Cliquez sur Deployment Manager.
  • Cliquez sur Lustre pour afficher les détails du déploiement.
  • Cliquez sur Vue d'ensemble – Lustre. Le volet Propriétés du déploiement affiche la configuration globale du déploiement.
  • Cliquez sur Afficher dans la propriété Config. Le volet Config affiche le contenu du fichier YAML de configuration du déploiement modifié précédemment. Vérifiez que le contenu est correct avant de continuer. Si vous devez modifier une configuration de déploiement, supprimez simplement le déploiement en suivant les étapes décrites dans "Nettoyer le déploiement", puis redémarrez le déploiement en suivant les étapes décrites dans "Configurer le fichier YAML de déploiement Lustre".
  • (Facultatif) Dans la section Lustre-cluster, cliquez sur chacune des ressources créées par le modèle Lustre.jinja et examinez les détails.

Maintenant que la configuration du déploiement est vérifiée, confirmons que les instances du cluster sont démarrées. Dans la console Cloud Platform, dans le menu Produits et services, cliquez sur Compute Engine > Instances de VM.

aec8498e04a3c334.png

Sur la page Instances de VM, examinez les cinq instances de machines virtuelles créées par Deployment Manager. Cela inclut lustre-mds1, lustre-oss1, lustre-oss2, lustre-oss3 et lustre-oss4.

5. Accéder au cluster Lustre

Surveiller l'installation

Sur la page "Instances de VM", cliquez sur lustre-mds1 pour ouvrir la page "Détails de l'instance".

ba0bea7acdbb9527.png

Cliquez sur Port série 1 (console) pour ouvrir la page de sortie de la console série. Nous utiliserons cette sortie série pour surveiller le processus d'installation de l'instance MDS et attendre la fin du script de démarrage. Cliquez sur le bouton "Actualiser" en haut de la page pour mettre à jour la sortie série. Le nœud redémarre une fois pour démarrer dans le noyau Lustre et affiche des messages semblables à ceux ci-dessous :

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)

Cela signifie que Lustre est installé sur le cluster Lustre et que le système de fichiers est prêt à être utilisé.

Accéder au cluster Lustre

Dans la session Cloud Shell, cliquez sur le bouton SSH à côté de l'instance lustre-mds1 dans la console Google Cloud. Vous pouvez également exécuter la commande suivante dans Cloud Shell, en remplaçant <ZONE> par la zone du nœud lustre-mds1 :

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

Cette commande se connecte à la machine virtuelle lustre-mds1. Il s'agit de l'instance du serveur de métadonnées (MDS) Lustre, qui fait également office d'instance du serveur de gestion (MGS) Lustre. Cette instance gère toutes les requêtes d'authentification et de métadonnées pour le système de fichiers.

Montons le système de fichiers sur notre instance lustre-mds1 pour pouvoir le tester ultérieurement. Exécutez les commandes suivantes :

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

Ces trois commandes effectuent trois actions. La première commande crée un répertoire local que nous utiliserons comme point de montage à l'adresse "/mnt/lustre". La deuxième commande exécute la commande "mount" pour monter le système de fichiers de type "lustre", qui se trouve sur le serveur lustre-mds1 et dont le nom est "lustre", visible sous la forme "/lustre". La commande mount installe le système de fichiers Lustre dans votre répertoire local "/mnt/lustre". Enfin, la troisième commande permet de passer au répertoire /mnt/lustre, où Lustre est installé.

Vous avez maintenant installé le système de fichiers Lustre sur /mnt/lustre. Voyons ce que nous pouvons faire avec ce système de fichiers.

6. Visite guidée des outils CLI Lustre

Si vous ne connaissez pas Lustre et ses outils, nous allons vous présenter quelques commandes importantes.

L'outil de gestion de cluster de bas niveau de Lustre est "lctl". Nous pouvons utiliser lctl pour configurer et gérer le cluster Lustre, et pour afficher les services du cluster Lustre. Pour afficher les services et les instances de notre nouveau cluster Lustre, exécutez la commande suivante :

sudo lctl dl

Vous obtiendrez un résultat semblable à celui ci-dessous, en fonction des modifications que vous avez apportées au fichier de configuration YAML 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

Nous pouvons voir notre serveur de gestion Lustre (MGS) en tant qu'élément 1, notre serveur de métadonnées Lustre (MDS) en tant qu'élément 3, notre cible de métadonnées Lustre (MDT) en tant qu'élément 5 et nos quatre serveurs de stockage d'objets Lustre (OSS) en tant qu'éléments 8 à 12. Pour comprendre ce que sont les autres services, veuillez consulter le manuel Lustre.

L'outil de configuration du système de fichiers Lustre est "lfs". Nous pouvons utiliser lfs pour gérer le striping des fichiers sur nos serveurs de stockage d'objets (OSS) Lustre et leurs cibles de stockage d'objets (OST) respectives, ainsi que pour exécuter des opérations courantes sur le système de fichiers, comme la recherche, df et la gestion des quotas.

Le striping nous permet de configurer la façon dont un fichier est distribué sur notre cluster Lustre afin d'offrir les meilleures performances possibles. Bien que la répartition d'un fichier volumineux sur le plus grand nombre possible d'OSS offre souvent les meilleures performances en parallélisant les E/S, la répartition d'un petit fichier peut entraîner des performances inférieures à celles obtenues si ce fichier n'était écrit que sur une seule instance.

Pour tester cela, configurons deux répertoires : l'un avec un nombre de bandes OSS de 1 et l'autre avec un nombre de bandes de -1, ce qui indique que les fichiers écrits dans ce répertoire doivent être répartis sur le plus grand nombre possible d'OSS. Les répertoires peuvent contenir des configurations de bandes qui sont héritées par les fichiers créés dans ces répertoires. Toutefois, les sous-répertoires et les fichiers individuels de ce répertoire peuvent ensuite être configurés pour être mis en bandes différemment si vous le souhaitez. Pour créer ces deux répertoires, exécutez les commandes suivantes dans le répertoire "/mnt/lustre" :

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

Vous pouvez afficher les paramètres de bande d'un fichier ou d'un répertoire à l'aide de lfs getstripe :

sudo lfs getstripe stripe_all/

Le résultat affiche le nombre de bandes défini sur -1 :

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

Nous sommes maintenant prêts à tester les améliorations de performances réalisables en écrivant un fichier volumineux réparti sur plusieurs OSS.

7. Tester les E/S Lustre

Nous allons exécuter deux tests simples des E/S Lustre pour démontrer les avantages potentiels en termes de performances et les capacités de scaling du système de fichiers Lustre. Nous allons commencer par exécuter un test simple à l'aide de l'utilitaire "dd" pour écrire un fichier de 5 Go dans notre répertoire "stripe_one". Exécutez la commande suivante :

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

Le processus d'écriture de 5 Go de données dans le système de fichiers prend en moyenne 27 secondes, en écrivant sur un seul disque persistant (PD) sur un seul serveur Object Storage (OSS).

Pour tester le striping sur plusieurs OSS et donc sur plusieurs, il suffit de modifier le répertoire de sortie dans lequel nous écrivons. Exécutez la commande suivante :

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

Notez que nous avons remplacé "of=stripe_one/test" par "of=stripe_all/test". Cela permettra à notre écriture de flux unique de répartir ses écritures sur tous nos serveurs de stockage d'objets et de terminer l'écriture en 5, 5 secondes en moyenne, soit environ quatre fois plus rapidement avec quatre OSS.

Ces performances continuent d'augmenter à mesure que vous ajoutez des serveurs de stockage d'objets. Vous pouvez ajouter des OSS avec le système de fichiers en ligne et commencer à répartir les données sur ces serveurs pour augmenter la capacité et les performances en ligne. Les possibilités sont infinies avec Lustre sur Google Cloud Platform. Nous sommes impatients de découvrir ce que vous allez créer et les problèmes que vous allez résoudre.

8. Conclusion

Félicitations, vous avez créé un cluster Lustre sur Google Cloud Platform ! Vous pouvez utiliser ces scripts comme point de départ pour créer votre propre cluster Lustre et l'intégrer à votre cluster de calcul basé sur le cloud.

Nettoyer le déploiement

Déconnectez-vous du nœud Lustre :

exit

Une fois terminé, vous pouvez facilement nettoyer le déploiement en exécutant la commande suivante depuis votre Google Cloud Shell, après vous être déconnecté du cluster Lustre :

gcloud deployment-manager deployments delete lustre

Lorsque vous y êtes invité, saisissez Y pour continuer. Cette opération peut prendre un certain temps. Veuillez patienter.

Supprimer le projet

Pour effectuer le nettoyage, il suffit de supprimer notre projet.

  • Dans le menu de navigation, sélectionnez "IAM et administration".
  • Cliquez ensuite sur "Paramètres" dans le sous-menu.
  • Cliquez sur l'icône en forme de corbeille avec le texte "Supprimer le projet".
  • Suivez les instructions.

Points abordés

  • Utiliser le service GCP Deployment Manager
  • Découvrez comment configurer et déployer un système de fichiers Lustre sur GCP.
  • Configurer le striping et tester les E/S simples sur le système de fichiers Lustre

Obtenir de l'aide

Vous avez créé quelque chose de génial à l'aide des scripts Deployment Manager de Lustre ? Vous avez des questions ? Discutez avec nous dans le groupe de discussion Google Cloud Lustre. Pour demander des fonctionnalités, envoyer des commentaires ou signaler des bugs, veuillez utiliser ce formulaire. Vous pouvez également modifier le code et envoyer une demande d'extraction. Vous souhaitez parler à un expert Google Cloud ? Contactez l'équipe Google Cloud dès aujourd'hui sur le site Web de Google Cloud sur le calcul hautes performances.

En savoir plus

Commentaires

Veuillez nous faire part de vos commentaires sur cet atelier de programmation en cliquant sur ce lien. Il ne vous faudra pas plus de cinq minutes pour nous faire part de vos commentaires. Merci !