1. Présentation
Bienvenue dans l'atelier de programmation Google consacré à l'exécution d'un cluster de systèmes de fichiers parallèles Lustre sur Google Cloud Platform.
Les données sont au cœur de la pratique du calcul hautes performances. Accéder à de grandes quantités de données à des vitesses extrêmement élevées et à des latences faibles a toujours représenté un défi majeur lors de l'exécution de charges de travail HPC. Cette exigence de stockage hautes performances n'a pas changé dans le cloud, et la possibilité d'utiliser rapidement et facilement de grandes quantités d'espace de stockage est devenue essentielle.
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 Open Source hautes performances les plus populaires à l'heure actuelle. Depuis juin 2005, elle est utilisée de manière constante par au moins la moitié des dix supercalculateurs les plus rapides au monde, ainsi que par plus de 60 supercalculateurs parmi les 100 plus rapides. Lustre peut être étendu jusqu'à des centaines de pétaoctets de capacité et fournir les performances maximales possibles pour les tâches HPC, avec des systèmes offrant un débit de plusieurs téraoctets par seconde 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 lancer son logiciel DDN EXAScaler Lustre compatible sur GCP Marketplace. Ensuite, les ingénieurs de 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 également capable de maximiser les performances de l'infrastructure sur laquelle elle s'exécute. Ses performances sur GCP sont si bonnes qu'elle s'est classée à la huitième place du benchmark des systèmes de stockage IO-500 en 2019 avec notre partenaire DDN, qui représente le système de fichiers cloud le mieux classé sur la gamme IO-500. Aujourd'hui, nous allons vous guider dans le déploiement des scripts Open Source Deployment Manager pour Lustre. Si vous souhaitez bénéficier d'une expérience d'entreprise renforcée avec Lustre, avec l'assistance d'experts Lustre pour votre cluster Lustre, ainsi que des fonctionnalités telles qu'une IUG de gestion et de surveillance ou des réglages Lustre, nous vous recommandons d'étudier l'offre DDN EXAScaler Marketplace.
Points abordés
- Utiliser le service GCP Deployment Manager
- 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:
Cliquez sur Créer un projet.
Saisissez un nom de projet. Retenez l'ID du projet (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ère un ID de projet aléatoire basé sur le nom du projet.
Vous devez ensuite activer la facturation dans Developers Console pour pouvoir utiliser les ressources Google Cloud.
L'exécution de cet atelier de programmation ne devrait pas vous coûter plus cher que quelques dollars, mais ce montant peut être plus élevé si vous décidez d'utiliser plus de ressources ou de continuer à les exécuter (consultez la section "Conclusion" à la fin de ce document). Vous pouvez accéder au simulateur de coût de Google Cloud Platform sur cette page.
Les nouveaux utilisateurs de Google Cloud Platform peuvent bénéficier d'un essai sans frais de 300$.
Google Cloud Shell
Bien que Google Cloud puisse être utilisé à distance depuis votre ordinateur portable, nous allons utiliser Google Cloud Shell dans 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 :
Cliquez ensuite sur Démarrer Cloud Shell:
Le provisionnement de l'environnement et la connexion ne devraient pas prendre plus de quelques minutes :
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 avec votre ID_PROJET :
$ 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 la commande suivante :
$ gcloud config set project <PROJECT_ID>
Résultat de la commande :
Updated property [core/project].
3. Préparer et examiner la configuration de déploiement de Lustre
Télécharger les scripts Lustre Deployment Manager
Dans la session Cloud Shell, exécutez la commande suivante pour cloner (télécharger) le dépôt Git contenant les fichiers Lustre pour le gestionnaire de déploiement de Google Cloud Platform :
git clone https://github.com/GoogleCloudPlatform/deploymentmanager-samples.git
Accédez au répertoire de configuration de 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é selon vos besoins pour cet atelier de programmation. Cet atelier de programmation utilise ces valeurs par défaut. Par conséquent, si vous apportez des modifications, vous devez les appliquer tout au long de cet atelier de programmation pour éviter les erreurs. En production, nous vous recommandons d'utiliser au moins une instance de 32 vCPU pour le nœud MDS et au moins une instance de 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 de déploiement Lustre-cluster.yaml
. 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 Console pour afficher le contenu du fichier :
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 contenant un astérisque (*) sont obligatoires. Ces champs sont les suivants :
Configuration du cluster
- cluster_name* : nom du cluster Lustre : ajoute toutes les ressources déployées
- zone* : zone dans laquelle déployer le cluster
- cidr* : plage d'adresses IP au format CIDR
- external_ips* : vrai/faux, les nœuds Lustre disposent d'adresses IP externes. Si la valeur est "false", un Cloud NAT est configuré en tant que passerelle NAT.
- vpc_net : définit 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
- fs_name - Nom du système de fichiers Lustre
- lustre_version : version Lustre à déployer. Utilisez "latest-release" pour déployer la dernière branche à partir de https://downloads.whamcloud.com/public/lustre/ ou sur lustre-X.X.X pour déployer toute autre version.
- e2fs_version : version E2fsprogs à déployer. Utilisez "latest" pour déployer la dernière branche depuis https://downloads.whamcloud.com/public/e2fsprogs/ ou X.XX.X.wcX pour déployer toute autre version
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 (consultez la page 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 de la cible de métadonnées (MDT) (pd-standard, pd-ssd, local-ssd)
- mdt_disk_size_gb* : taille du disque MDT en Go
Configuration de l'OS
- oss_node_count* : nombre de nœuds de serveur de stockage d'objets (OSS) à créer
- oss_ip_range_start : début de la plage d'adresses IP du ou des nœuds OSS. Si aucune valeur n'est spécifiée, utilisez l'attribution automatique d'adresses IP.
- oss_machine_type : type de machine à utiliser pour le ou 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. Cette opération peut prendre entre 10 et 20 minutes. Veuillez donc 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
Pour afficher le déploiement dans la console Google Cloud Platform, procédez comme suit:
- Dans la console Cloud Platform, ouvrez le menu Products and Services (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 Overview - Lustre. Le volet Deployment Properties (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 de 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, il vous suffit de supprimer le déploiement en suivant les étapes de la section "Nettoyer le déploiement", puis de redémarrer le déploiement conformément aux étapes de la section "Configurer un 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.
Une fois la configuration du déploiement validée, vérifions 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.
Sur la page Instances de VM, examinez les cinq instances de machine virtuelle 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".
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 présentés 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 permet de se connecter à la machine virtuelle lustre-mds1. Il s'agit de l'instance du serveur de métadonnées (MDS) Lustre, qui sert également 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 afin de 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 ont trois fonctions. La première commande crée un répertoire local que nous utiliserons comme point d'installation sur "/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", affiché sous la forme "/lustre". La commande d'installation installe le système de fichiers Lustre dans votre répertoire local "/mnt/lustre". Enfin, la troisième commande change de répertoire pour accéder au répertoire /mnt/lustre, où Lustre est installé.
Vous avez maintenant installé le système de fichiers Lustre à l'emplacement /mnt/lustre. Voyons ce que nous pouvons faire avec ce système de fichiers.
6. Visite guidée des outils CLI de Lustre
Si vous ne connaissez pas bien 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, ainsi que 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
Un résultat semblable à celui ci-dessous s'affiche, en fonction des modifications 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 de 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) comme éléments 8 à 12. Pour en savoir plus sur les autres services, consultez le manuel Lustre.
L'outil de configuration du système de fichiers de Lustre est "lfs". Nous pouvons utiliser lfs pour gérer la répartition des fichiers sur nos serveurs de stockage d'objets Lustre (OSS) et leurs cibles de stockage d'objets (OST) respectives, ainsi que pour exécuter des opérations courantes du système de fichiers comme find, df et la gestion des quotas.
Le striping nous permet de configurer la distribution d'un fichier sur notre cluster Lustre afin d'obtenir les meilleures performances possibles. Bien que la répartition d'un fichier volumineux sur autant d'OSS que possible offre souvent les meilleures performances en parallèle avec l'E/S, la compression d'un petit fichier peut entraîner de moins bonnes performances que 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 d'un OSS et l'autre avec un nombre de bandes "-1", ce qui indique que les fichiers écrits dans ce répertoire doivent être répartis sur autant d'OSS que possible. Les répertoires peuvent contenir des configurations de bandes qui sont héritées par les fichiers qui y sont créés. Toutefois, si vous le souhaitez, vous pouvez configurer des sous-répertoires et des fichiers individuels au sein de ces répertoires pour qu'ils présentent des bandes différentes. 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 la commande lfs gettripe:
sudo lfs getstripe stripe_all/
Le résultat qui s'affiche indique que le nombre de bandes est 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 divisé en bandes sur plusieurs OSS.
7. E/S Test Lustre
Nous allons effectuer deux tests simples de l'E/S Lustre pour démontrer les avantages possibles en termes de performances et les capacités de scaling du système de fichiers Lustre. Nous allons d'abord 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 de stockage d'objets (OSS).
Pour tester le striping sur plusieurs OSS et donc plusieurs PD, 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 en flux unique de distribuer ses écritures sur l'ensemble de nos serveurs Object Storage et d'effectuer l'écriture en moyenne en 5,5 secondes, soit environ quatre fois plus rapidement avec quatre OSS.
Ces performances continuent de s'améliorer à 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 à les extraire par bande pour augmenter la capacité et les performances en ligne. Les possibilités sont infinies avec Lustre sur Google Cloud Platform. Nous sommes impatients de voir ce que vous pouvez créer et les problèmes que vous pouvez 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 cloud computing.
Nettoyer le déploiement
Déconnectez-vous du nœud Lustre:
exit
Une fois l'opération terminée, vous pouvez facilement nettoyer le déploiement. Pour ce faire, exécutez la commande suivante depuis 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 un 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 à l'écran.
Points abordés
- Utiliser le service GCP Deployment Manager
- Configurer et déployer un système de fichiers Lustre sur GCP
- Configurer la répartition par bandes et tester les E/S simples sur le système de fichiers Lustre
Obtenir de l'aide
Créez-vous quelque chose d'intéressant à l'aide des scripts du gestionnaire de déploiement 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 de tirage. Vous souhaitez parler à un expert Google Cloud ? Contactez l'équipe Google Cloud dès aujourd'hui via le site Web Google Cloud sur le calcul hautes performances.
En savoir plus
Commentaires
Pour nous envoyer vos commentaires sur cet atelier de programmation, cliquez ici. L'envoi de commentaires ne prend pas plus de cinq minutes. Merci !