Развертывание параллельной файловой системы Lustre на GCP

1. Обзор

Добро пожаловать в Google Codelab по запуску кластера параллельных файловых систем Lustre на платформе Google Cloud Platform!

d51beef5f729cbe9.png

Данные являются основой практики высокопроизводительных вычислений, и доступ к большим объемам данных на чрезвычайно высоких скоростях и с низкой задержкой всегда был ключевой проблемой при выполнении рабочих нагрузок HPC. Это требование к высокопроизводительному хранилищу не изменилось в облаке, и фактически возможность быстрого и легкого использования огромных объемов хранилища стала первостепенной задачей.

Центры высокопроизводительных вычислений (HPC) уже давно удовлетворяют эту потребность, используя собственные ресурсы и такие технологии, как параллельная файловая система Lustre. Lustre — одно из самых популярных сегодня решений для высокопроизводительного хранения данных с открытым исходным кодом, и с июня 2005 года оно постоянно используется как минимум половиной из десяти самых быстрых и более чем 60 из 100 самых быстрых суперкомпьютеров в мире. Lustre способен масштабироваться до сотен петабайт емкости и обеспечивать максимально возможную производительность для задач HPC, при этом системы обеспечивают пропускную способность в терабайтах в секунду в одном пространстве имен.

Для удовлетворения спроса на хранилище Google Cloud применил два подхода. Во-первых, GCP заключил партнерское соглашение с DDN, чтобы предоставить поддерживаемое ими корпоративное программное обеспечение DDN EXAScaler Lustre на GCP Marketplace . Во-вторых, наши инженеры в Google Cloud разработали и опубликовали в открытом доступе набор скриптов для простой настройки и развертывания кластера хранилища Lustre на Google Compute Engine с помощью Google Cloud Deployment Manager.

Lustre на платформе Google Cloud Platform одинаково хорошо справляется с обеспечением максимальной производительности инфраструктуры, на которой она работает. Ее производительность на GCP настолько высока, что в 2019 году она заняла 8-е место в бенчмарке систем хранения IO-500, разработанном нашим партнером DDN, что является наивысшим рейтингом облачных файловых систем в IO-500. Сегодня мы расскажем вам о развертывании скриптов Open Source Deployment Manager для Lustre. Если вас интересует корпоративная, защищенная среда Lustre с поддержкой экспертов Lustre для вашего кластера Lustre, а также такие функции, как графический интерфейс управления и мониторинга или настройка Lustre, мы рекомендуем изучить предложение DDN EXAScaler Marketplace .

Что вы узнаете

  • Как использовать службу GCP Deployment Manager
  • Как настроить и развернуть файловую систему Lustre в GCP.
  • Как настроить чередование данных и протестировать простые операции ввода-вывода в файловой системе Lustre.

Предварительные требования

  • Учетная запись Google Cloud Platform и проект с возможностью выставления счетов.
  • Базовые знания Linux

2. Настройка

Настройка среды для самостоятельного обучения

Создать проект

Если у вас еще нет учетной записи Google (Gmail или G Suite), вам необходимо ее создать . Войдите в консоль Google Cloud Platform ( console.cloud.google.com ) и откройте страницу «Управление ресурсами» :

359c06e07e6d699f.png

Нажмите «Создать проект».

25c23d651abb837b.png

Введите название проекта. Запомните идентификатор проекта (выделен красным на скриншоте выше). Идентификатор проекта должен быть уникальным для всех проектов Google Cloud. Если название вашего проекта не уникально, Google Cloud сгенерирует случайный идентификатор проекта на основе названия проекта.

Далее вам потребуется включить оплату в консоли разработчика, чтобы использовать ресурсы Google Cloud.

Выполнение этого практического задания не должно обойтись вам дороже нескольких долларов, но может обойтись дороже, если вы решите использовать больше ресурсов или оставите их запущенными (см. раздел «Заключение» в конце этого документа). Калькулятор цен Google Cloud Platform доступен здесь .

Новые пользователи Google Cloud Platform могут получить бесплатную пробную версию стоимостью 300 долларов .

Google Cloud Shell

Хотя Google Cloud можно запускать удалённо с ноутбука, в этом практическом занятии мы будем использовать Google Cloud Shell — среду командной строки, работающую в облаке.

Запустите Google Cloud Shell

В консоли GCP щелкните значок Cloud Shell на панели инструментов в правом верхнем углу:

dbad104cef962719.png

Затем нажмите кнопку «Запустить Cloud Shell» :

4e50db320508ac88.png

Подготовка и подключение к среде займут всего несколько минут:

20b0aa80492144d.png

Эта виртуальная машина оснащена всеми необходимыми инструментами разработки. Она предоставляет постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и упрощает аутентификацию. Большую часть, если не всю, работу в этой лаборатории можно выполнить с помощью веб-браузера или Google Chromebook.

После подключения к облачной оболочке вы увидите, что ваша аутентификация пройдена и проект уже настроен на ваш PROJECT_ID :

$ gcloud auth list

Вывод команды:

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

Вывод команды:

[core]
project = <PROJECT_ID>

Если идентификатор проекта указан неправильно, вы можете установить его с помощью этой команды:

$ gcloud config set project <PROJECT_ID>

Вывод команды:

Updated property [core/project].

3. Подготовка и проверка конфигурации развертывания Lustre.

Загрузите скрипты Lustre Deployment Manager.

В сессии Cloud Shell выполните следующую команду, чтобы клонировать (скачать) репозиторий Git , содержащий файлы менеджера развертывания Lustre для Google Cloud Platform:

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

Перейдите в каталог конфигурации развертывания Lustre, выполнив следующую команду:

cd deploymentmanager-samples/community/lustre/

Настройка YAML-файла развертывания Lustre

Менеджер развертывания использует YAML-файл для предоставления конфигурации развертывания. Этот YAML-файл подробно описывает конфигурацию развертывания, например, версию Lustre для развертывания и типы экземпляров машин для развертывания. По умолчанию файл настроен на развертывание в новом проекте без увеличения квоты, однако вы можете изменить тип машины или емкость по своему усмотрению для данного практического занятия. Данное практическое занятие написано с использованием этих значений по умолчанию, поэтому, если вы внесете какие-либо изменения, вы должны сохранить их на протяжении всего занятия, чтобы избежать ошибок. В производственной среде мы рекомендуем использовать как минимум 32 экземпляра vCPU для узла MDS и как минимум 8 или 16 экземпляров vCPU для узлов OSS, в зависимости от емкости и типа хранилища.

Чтобы просмотреть или отредактировать YAML-файл в сеансе Cloud Shell, откройте YAML-файл конфигурации развертывания Lustre-cluster.yaml . Вы можете использовать предпочитаемый вами редактор командной строки (vi, nano, emacs и т. д.) или редактор кода Cloud Console для просмотра содержимого файла:

11efd5af658f1842.png

Содержимое файла будет выглядеть следующим образом:

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

В этом YAML-файле содержится несколько полей. Поля, отмеченные звездочкой (*), являются обязательными. К таким полям относятся:

Конфигурация кластера

  • cluster_name* - Имя кластера Lustre, добавляется перед всеми развернутыми ресурсами.
  • зона* - Зона для развертывания кластера
  • cidr* - Диапазон IP-адресов в формате CIDR
  • external_ips* - True/False, узлы Lustre имеют внешние IP-адреса. Если false, то настраивается облачный NAT в качестве шлюза NAT.
  • vpc_net — Определите это поле, а также поле vpc_subnet, чтобы развернуть кластер Lustre в существующей VPC.
  • vpc_subnet - Существующая подсеть VPC для развертывания кластера Lustre.
  • shared_vpc_host_proj — Определите это поле, а также поля vpc_net и vpc_subnet, чтобы развернуть кластер в общей VPC.

Конфигурация файловой системы

  • fs_name - имя файловой системы Lustre
  • lustre_version - Версия Lustre для развертывания. Используйте "latest-release" для развертывания последней ветки из https://downloads.whamcloud.com/public/lustre/ или lustre-XXX для развертывания любой другой версии.
  • e2fs_version - версия E2fsprogs для развертывания; используйте "latest" для развертывания последней ветки из https://downloads.whamcloud.com/public/e2fsprogs/ или X.XX.X.wcX для развертывания любой другой версии.

Конфигурация MDS/MGS

  • mds_ip_address — Внутренний IP-адрес, который необходимо указать для узла MDS/MGS.
  • mds_machine_type — Тип машины, используемый для узла MDS/MGS (см. https://cloud.google.com/compute/docs/machine-types )
  • mds_boot_disk_type — Тип диска, используемый в качестве загрузочного диска MDS/MGS (pd-standard, pd-ssd)
  • mds_boot_disk_size_gb - Размер загрузочного диска MDS в ГБ
  • mdt_disk_type* - Тип диска, используемый для диска метаданных (MDT) (pd-standard, pd-ssd, local-ssd)
  • mdt_disk_size_gb* - Размер диска MDT в ГБ

Конфигурация OSS

  • oss_node_count* - Количество узлов сервера объектного хранилища (OSS), которые необходимо создать.
  • oss_ip_range_start — Начало диапазона IP-адресов для узла(ов) OSS. Если не указано, используется автоматическое назначение IP-адресов.
  • oss_machine_type — Тип машины, используемый для узлов с открытым исходным кодом.
  • oss_boot_disk_type — Тип диска, используемый в качестве загрузочного диска OSS (pd-standard, pd-ssd)
  • oss_boot_disk_size_gb - Размер загрузочного диска MDS в ГБ
  • ost_disk_type* - Тип диска, используемый в качестве диска целевого хранилища объектов (OST) (pd-standard, pd-ssd, local-ssd)
  • ost_disk_size_gb* - Размер OST-диска в ГБ

4. Развертывание и проверка конфигурации

Разверните конфигурацию

В сессии Cloud Shell выполните следующую команду из папки Lustre-gcp :

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

Эта команда создаст развертывание с именем Lustre . Операция может занять от 10 до 20 минут, поэтому , пожалуйста, наберитесь терпения .

После завершения развертывания вы увидите результат, похожий на следующий:

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

Проверьте развертывание.

5f2a0557d3f2476f.png

Чтобы просмотреть информацию о развертывании в консоли Google Cloud Platform, выполните следующие действия:

  • В консоли облачной платформы откройте меню «Продукты и услуги» в верхнем левом углу консоли (три горизонтальные линии).
  • Нажмите «Диспетчер развертывания» .
  • Нажмите на Lustre , чтобы просмотреть подробности развертывания.
  • Нажмите «Обзор» — «Lustre» . В панели « Свойства развертывания» отображается общая конфигурация развертывания.
  • Нажмите « Просмотреть » в свойстве «Конфигурация» . В панели «Конфигурация» отобразится содержимое файла конфигурации развертывания YAML, измененного ранее. Перед продолжением убедитесь в правильности содержимого. Если вам необходимо изменить конфигурацию развертывания, просто удалите развертывание в соответствии с шагами, описанными в разделе «Очистка развертывания», и перезапустите развертывание в соответствии с шагами, описанными в разделе «Настройка файла развертывания Lustre YAML».
  • (Необязательно) В разделе Lustre-cluster щелкните по каждому из ресурсов, созданных с помощью шаблона Lustre.jinja, и просмотрите подробные сведения.

После проверки конфигурации развертывания давайте убедимся, что экземпляры кластера запущены. В консоли облачной платформы в меню «Продукты и услуги» щелкните Compute Engine > Экземпляры виртуальных машин.

aec8498e04a3c334.png

На странице «Экземпляры виртуальных машин» просмотрите пять экземпляров виртуальных машин, созданных менеджером развертывания. Это lustre-mds1 , lustre-oss1 , lustre-oss2, lustre-oss3 и lustre-oss4 .

5. Получите доступ к кластеру Lustre.

Контроль установки

На странице «Экземпляры виртуальных машин» щелкните lustre-mds1 , чтобы открыть страницу с подробными сведениями об экземпляре.

ba0bea7acdbb9527.png

Нажмите на «Последовательный порт 1 (консоль)» , чтобы открыть страницу вывода последовательной консоли. Мы будем использовать этот вывод для мониторинга процесса установки экземпляра MDS и дождемся завершения выполнения скрипта запуска. Нажмите кнопку «Обновить» в верхней части страницы, чтобы обновить вывод последовательной консоли. Узел перезагрузится один раз для загрузки ядра Lustre и отобразит сообщения, аналогичные приведенным ниже:

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)

Это означает, что Lustre установлен на кластере Lustre, и файловая система готова к использованию!

Получите доступ к кластеру Lustre.

В сессии Cloud Shell нажмите кнопку SSH рядом с экземпляром lustre-mds1 в консоли Google Cloud. В качестве альтернативы выполните следующую команду в Cloud Shell, заменив <ZONE> зоной узла lustre-mds1:

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

Эта команда выполняет вход в виртуальную машину lustre-mds1. Это экземпляр сервера метаданных Lustre (MDS), который также выступает в качестве экземпляра сервера управления Lustre (MGS). Этот экземпляр обрабатывает все запросы аутентификации и метаданных для файловой системы.

Давайте смонтируем файловую систему на нашем экземпляре lustre-mds1, чтобы иметь возможность протестировать её позже. Выполните следующие команды:

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

Эти три команды выполняют три действия. Первая команда создает локальный каталог, который мы будем использовать в качестве точки монтирования по адресу "/mnt/lustre". Вторая команда запускает команду "mount" для монтирования файловой системы типа "lustre", которая находится на сервере lustre-mds1, и имя файловой системы которой - "lustre", отображаемое как "/lustre". Команда mount монтирует файловую систему Lustre в ваш локальный каталог "/mnt/lustre". Наконец, третья команда переходит в каталог /mnt/lustre, где смонтирована Lustre.

Теперь вы смонтировали файловую систему Lustre по адресу /mnt/lustre. Давайте посмотрим, что мы можем делать с этой файловой системой.

6. Обзор инструментов командной строки Lustre.

Если вы не знакомы с Lustre и его инструментами, мы рассмотрим здесь несколько важных команд.

Низкоуровневый инструмент управления кластером Lustre — это команда `lctl`. Мы можем использовать `lctl` для настройки и управления кластером Lustre, а также для просмотра его служб. Чтобы просмотреть службы и экземпляры в нашем новом кластере Lustre, выполните следующую команду:

sudo lctl dl

В зависимости от внесенных вами изменений в конфигурационный файл Lustre YAML, вы увидите результат, аналогичный приведенному ниже:

  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

В качестве элемента 1 мы видим наш сервер управления Lustre (MGS), в качестве элемента 3 — наш сервер метаданных Lustre (MDS), в качестве элемента 5 — наш целевой сервер метаданных Lustre (MDT), а в качестве элементов с 8 по 12 — наши четыре сервера объектного хранилища Lustre (OSS). Чтобы понять, что представляют собой остальные службы, пожалуйста, ознакомьтесь с руководством Lustre .

Инструмент настройки файловой системы Lustre называется "lfs". Мы можем использовать lfs для управления распределением файлов между нашими серверами объектного хранилища Lustre (OSS) и соответствующими им целевыми объектными хранилищами (OST), а также для выполнения распространенных операций с файловой системой, таких как find, df и управление квотами.

Распределение файлов по кластеру Lustre позволяет настроить способ их обработки для достижения максимально возможной производительности. Хотя распределение большого файла по как можно большему количеству экземпляров OSS часто обеспечивает наилучшую производительность за счет распараллеливания операций ввода-вывода, распределение небольшого файла может привести к ухудшению производительности по сравнению с записью этого файла только в один экземпляр.

Для проверки создадим две директории: одну с количеством полос, равным одному OSS, и другую с количеством полос, равным "-1", что означает, что файлы, записанные в эту директорию, должны быть распределены по как можно большему количеству OSS. Директории могут содержать конфигурации распределения полос, которые наследуются файлами, созданными в них, но при желании поддиректории и отдельные файлы внутри этой директории могут быть настроены на распределение полос по-разному. Чтобы создать эти две директории, выполните следующие команды, находясь в директории "/mnt/lustre":

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

Вы можете просмотреть настройки полосы пропускания для файла или каталога с помощью команды `lfs getstripe`:

sudo lfs getstripe stripe_all/

В результате вы увидите, что количество полос установлено равным -1:

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

Теперь мы готовы протестировать повышение производительности, достижимое за счет записи большого файла, распределенного по нескольким открытым исходным кодам.

7. Тестирование Lustre I/O

Мы проведём два простых теста Lustre IO, чтобы продемонстрировать возможные преимущества в производительности и масштабируемости файловой системы Lustre. Сначала мы проведём простой тест с использованием утилиты "dd" для записи файла размером 5 ГБ в наш каталог "stripe_one". Выполните следующую команду:

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

Процесс записи 5 ГБ данных в файловую систему занимает в среднем около 27 секунд при записи на один постоянный диск (PD) на одном сервере объектного хранения (OSS).

Для тестирования чередования данных на нескольких OSS и, следовательно, на нескольких PD, нам достаточно изменить выходной каталог, в который мы записываем данные. Выполните следующую команду:

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

Обратите внимание, что мы изменили "of=stripe_one/test" на "of=stripe_all/test". Это позволит нашей системе записи в один поток распределять операции записи по всем нашим серверам объектного хранилища и завершать запись в среднем за 5,5 секунд, что примерно в 4 раза быстрее при использовании четырех серверов объектного хранилища.

Производительность продолжает расти по мере добавления серверов объектного хранилища, и вы можете добавлять серверы с файловой системой в режиме онлайн и начинать распределять данные по ним для увеличения емкости и производительности в режиме онлайн. Возможности использования Lustre на платформе Google Cloud Platform безграничны, и мы с нетерпением ждем, что вы сможете создать и какие проблемы сможете решить.

8. Заключение

Поздравляем, вы создали кластер Lustre на платформе Google Cloud Platform! Вы можете использовать эти скрипты в качестве отправной точки для создания собственного кластера Lustre и его интеграции с вашим облачным вычислительным кластером.

Наведите порядок в развертывании.

Выход из системы узла Lustre:

exit

После завершения развертывания вы можете легко удалить его, выполнив следующую команду в Google Cloud Shell, предварительно выйдя из кластера Lustre:

gcloud deployment-manager deployments delete lustre

Когда появится соответствующий запрос, введите Y для продолжения. Эта операция может занять некоторое время, пожалуйста, наберитесь терпения.

Удалить проект

Для наведения порядка мы просто удаляем наш проект.

  • В меню навигации выберите IAM и администрирование.
  • Затем нажмите на «Настройки» в подменю.
  • Нажмите на значок корзины с надписью «Удалить проект».
  • Следуйте инструкциям.

Что мы рассмотрели

  • Как использовать службу GCP Deployment Manager.
  • Как настроить и развернуть файловую систему Lustre в GCP.
  • Как настроить чередование данных и протестировать простые операции ввода-вывода в файловой системе Lustre.

Найти поддержку

Вы создаёте что-то интересное, используя скрипты менеджера развертывания Lustre? Есть вопросы? Пообщайтесь с нами в группе обсуждений Google Cloud Lustre . Чтобы запросить новые функции, оставить отзыв или сообщить об ошибках, используйте эту форму , или смело изменяйте код и отправляйте запрос на слияние! Хотите поговорить с экспертом Google Cloud? Свяжитесь с командой Google Cloud сегодня через веб-сайт Google Cloud по высокопроизводительным вычислениям .

Узнать больше

Обратная связь

Пожалуйста, оставьте отзыв об этом практическом занятии , используя эту ссылку . На заполнение отзыва потребуется менее 5 минут. Спасибо!