在 GCP 上部署 Lustre 平行檔案系統

1. 總覽

歡迎使用 Google 程式碼研究室,在 Google Cloud Platform 上執行 Lustre 平行檔案系統叢集!

d51beef5f729cbe9.png

資料是高效能運算作業的核心,而在執行 HPC 工作負載時,能以極快的高速和低延遲情況存取大量資料,向來是一大挑戰。雲端服務對高效能儲存空間的需求並未改變,事實上,能否快速且輕鬆地使用大量儲存空間已成為重中之重。

HPC 中心長久以來一直使用 Lustre 平行檔案系統等技術,滿足地端部署環境的需求。Lustre 是目前最熱門的開放原始碼高效能儲存空間解決方案之一。自 2005 年 6 月起,此系統持續使用,全球前 10 名,且比例前 100 名的前 100 名以上中,便已有超過 60 名以上的電腦。Lustre 能向上擴充至數百 PB 的容量,盡可能為 HPC 工作提供最高效能,在單一命名空間中,系統也能以 TB/秒為單位提供處理量。

為了滿足儲存空間需求,Google Cloud 採取了兩種做法。首先,GCP 與 DDN 合作,將支援的企業級 DDN EXAScaler Lustre 軟體納入 GCP Marketplace。第二,Google Cloud 開發及開發一組指令碼,透過 Google Cloud Deployment Manager 在 Google Compute Engine 中輕鬆設定及部署 Lustre 儲存空間叢集。

Google Cloud Platform 上的 Lustre 同樣能發揮基礎架構的最大效能。在 GCP 上的效能表現極佳,在 2019 年與合作夥伴 DDN 共同在 IO-500 儲存系統基準測試中排名第 8,是 IO-500 中排名最高的雲端檔案系統。今天,我們將逐步引導您部署 Lustre 的開放原始碼 Deployment Manager 指令碼。如果您有意採用企業級的強化 Lustre 服務,並希望獲得 Lustre 叢集的 Lustre 專家支援,以及管理和監控 GUI 或 Lustre 調整等功能,建議您查看 DDN EXAScaler Marketplace 提供的服務

課程內容

  • 如何使用 GCP Deployment Manager 服務
  • 如何在 GCP 上設定及部署 Lustre 檔案系統。
  • 如何設定去量化,以及對 Lustre 檔案系統進行簡單的 I/O 測試。

必要條件

  • Google Cloud Platform 帳戶與帳單專案
  • 基本 Linux 體驗

2. 設定

自助式環境設定

建立專案

如果您還沒有 Google 帳戶 (Gmail 或 G Suite),請務必建立帳戶。登入 Google Cloud Platform 主控台 (console.cloud.google.com),然後開啟「管理資源頁面」:

359c06e07e6d699f.png

按一下「建立專案」

25c23d651abb837b.png

輸入專案名稱。記下專案 ID (上方螢幕截圖中以紅色標示)。所有 Google Cloud 專案中的專案 ID 名稱均不得重複。如果專案名稱不具唯一性,Google Cloud 會根據專案名稱隨機產生專案 ID。

接著,您需要在 Developers Console 中啟用帳單功能,才能使用 Google Cloud 資源。

執行這個程式碼研究室所需的成本不應超過數美元,但如果您決定使用更多資源,或讓這些資源繼續運作 (請參閱本文件結尾的「結論」一節),就能提高作業效率。如要使用 Google Cloud Platform Pricing Calculator,請按這裡

新使用者符合 $300 美元免費試用資格的 Google Cloud Platform。

Google Cloud Shell

雖然 Google Cloud 可以在筆電上遠端操作,但在本程式碼研究室中,我們會使用 Google Cloud Shell,這是 Cloud 中運作的指令列環境。

啟動 Google Cloud Shell

在 GCP 控制台的右上方,按一下「Cloud Shell」圖示:

dbad104cef962719.png

然後按一下「Start Cloud Shell」

4e50db320508ac88.png

佈建並連線至環境的作業很快就能完成:

20b0aa80492144d.png

這個虛擬機器會載入您需要的所有開發工具。提供永久的 5 GB 主目錄,而且在 Google Cloud 中運作,大幅提升網路效能並簡化驗證程序。在絕大多數的情況下,只要透過網路瀏覽器或 Google Chromebook 就能完成這個研究室中的作業。

連線至 Cloud Shell 後,您應會發現自己通過驗證,且專案已設為 PROJECT_ID

$ gcloud auth list

指令輸出:

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

指令輸出:

[core]
project = <PROJECT_ID>

如果專案 ID 設定不正確,您可以使用下列指令設定:

$ gcloud config set project <PROJECT_ID>

指令輸出:

Updated property [core/project].

3. 準備及檢查 Lustre 部署設定

下載 Lustre Deployment Manager 指令碼

在 Cloud Shell 工作階段中,執行下列指令,複製 (下載) 包含 Lustre for Google Cloud Platform 部署管理器檔案的 Git 存放區

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

執行下列指令,切換至 Lustre 部署設定目錄:

cd deploymentmanager-samples/community/lustre/

設定 Lustre 部署 YAML

Deployment Manager 會使用 YAML 檔案提供部署設定。這個 YAML 檔案會詳細說明部署作業的設定,例如要部署的 Lustre 版本,以及要部署的機器類型。根據預設,該檔案會設定為在新專案中部署,不會增加任何配額,但您可以在本程式碼研究室中,視需要變更機器類型或容量。本程式碼研究室是以這些預設值編寫而成,因此如果您進行任何變更,則必須在整個程式碼研究室中進行變更,以免發生錯誤。在實際環境中,建議您為 MDS 節點至少配置 32 個 vCPU 執行個體,並視儲存空間容量和類型,為 OSS 節點至少配置 8 或 16 個 vCPU 執行個體。

如要在 Cloud Shell 工作階段中查看或編輯 YAML 檔案,請開啟部署設定 YAML 檔案 Lustre-cluster.yaml。您可以使用偏好的指令列編輯器 (vi、nano、emacs 等),或使用 Cloud 控制台程式碼編輯器查看檔案內容:

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 叢集的名稱,前面加上所有已部署的資源
  • zone* - 要部署叢集的可用區
  • cidr*:採用 CIDR 格式的 IP 範圍
  • external_ips* - 值為「是」或「否」,Lustre 節點是否有外部 IP 位址。如果為 false,表示 Cloud NAT 會設為 NAT 閘道
  • vpc_net:定義這個欄位和 vpc_subnet 欄位,將 Lustre 叢集部署至現有的 VPC
  • vpc_subnet - 要部署 Lustre 叢集的現有虛擬私有雲子網路
  • shared_vpc_host_proj - 定義這個欄位以及 vpc_net 和 vpc_subnet 欄位,將叢集部署到共用虛擬私有雲

檔案系統設定

MDS/MGS 設定

  • mds_ip_address - 為 MDS/MGS 節點指定的內部 IP 位址
  • 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 開機磁碟的大小 (以 GB 為單位)
  • mdt_disk_type* - 中繼資料目標 (MDT) 磁碟 (pd-standard、pd-ssd、local-ssd) 使用的磁碟類型
  • mdt_disk_size_gb*:MDT 磁碟的大小 (以 GB 為單位)

OSS 設定

  • oss_node_count* - 要建立的物件儲存伺服器 (OSS) 節點數量
  • oss_ip_range_start - OSS 節點的 IP 範圍起始值。如未指定,請使用自動指派 IP
  • oss_machine_type:OSS 節點使用的機器類型
  • oss_boot_disk_type - OSS 開機磁碟使用的磁碟類型 (pd-standard、pd-ssd)
  • oss_boot_disk_size_gb - 以 GB 為單位的 MDS 開機磁碟大小
  • ost_disk_type* - 物件儲存空間目標 (OST) 磁碟 (pd-standard、pd-ssd、local-ssd) 使用的磁碟類型
  • ost_disk_size_gb*:OST 磁碟的大小 (以 GB 為單位)

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

驗證 Deployment

5f2a0557d3f2476f.png

如要在 Google Cloud Platform Console 中查看部署作業,請按照下列步驟操作:

  • 在 Cloud Platform 控制台中,開啟控制台左上角的「產品與服務」選單 (三條橫線)。
  • 按一下「Deployment Manager」
  • 按一下「Lustre」即可查看部署作業的詳細資料。
  • 按一下「總覽 - Lustre」。「部署屬性」窗格會顯示整體部署設定。
  • 按一下「Config」資源的「View」。「設定」窗格會顯示先前修改的部署設定 YAML 檔案內容。請先確認內容正確無誤再繼續操作。如需變更部署設定,請按照「清理部署作業」中的步驟刪除部署作業,然後按照「設定 Lustre 部署作業 YAML」中的步驟重新啟動部署作業。
  • (選用) 在「Lustre-cluster」部分下,點選 Lustre.jinja 範本建立的每個資源,查看詳細資料。

確認部署設定後,我們來確認叢集的執行個體是否已啟動。在 Cloud Platform Console 的「產品與服務」選單中,依序點選「Compute Engine」>「VM 執行個體」

aec8498e04a3c334.png

在「VM Instances」頁面中,查看部署管理員建立的五個虛擬機器執行個體。包括 lustre-mds1lustre-oss1lustre-oss2、lustre-oss3lustre-oss4

5. 存取 Lustre 叢集

監控安裝情形

在「VM 執行個體」頁面中,按一下 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 工作階段中,前往 Google Cloud 控制台的 lustre-mds1 執行個體,然後按一下旁邊的「SSH」按鈕。或者,您也可以在 Cloud Shell 中執行下列指令,並將 <ZONE> 替換為 lustre-mds1 節點的可用區:

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

這個指令會登入 lustre-mds1 虛擬機器。這是 Lustre Metadata Server (MDS) 執行個體,也屬於 Lustre Management Server (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」。掛接指令會將 Lustre 檔案系統掛接在本機「/mnt/lustre」目錄中。最後,第三個指令會將目錄變更為掛接 Lustre 的 /mnt/lustre 目錄。

您現在已在 /mnt/lustre 掛接 Lustre 檔案系統。讓我們來看看可以如何運用這個檔案系統。

6. Lustre CLI 工具導覽

如果您不熟悉 Lustre 及其工具,我們會在此逐步說明一些重要指令。

Lustre 的低階叢集管理工具為「lctl」。我們可以利用 lctl 設定及管理 Lustre 叢集,以及查看 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

我們可以看到 Lustre Management Server (MGS) 的項目 1、Lustre 中繼資料伺服器 (MDS) 為項目 3,Lustre 中繼資料目標 (MDT) 為項目 5,以及四個 Lustre 物件儲存伺服器 (OSS) 為項目 8 到 12。如要瞭解其他服務的內容,請參閱 Lustre Manual 使用手冊

Lustre 的檔案系統設定工具是「lfs」。我們可以使用 Fels 管理 Lustre Object Storage Servers (OSS) 及其個別物件儲存空間目標 (OST) 中的檔案移除作業,以及執行尋找、df 和配額管理等常見的檔案系統作業。

簡化作業讓我們可設定檔案在 Lustre 叢集中的分配方式,盡可能提供最佳效能。雖然盡可能將大型檔案從多個 OSS 上去除,不過如果能平行處理 IO,就能提供最佳效能,但與只寫入單一執行個體相比,去除小型檔案可能會導致效能較差。

為了測試這一點,我們可以設定兩個目錄,一個有條紋的 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

接下來,我們將測試透過在多個 OSS 上分割寫入大型檔案,可改善效能。

7. 測試 Lustre I/O

我們會針對 Lustre IO 執行兩項簡單的測試,示範 Lustre 檔案系統可能具備的效能優勢和資源調度功能。首先,使用「dd」公用程式執行簡單的測試,將 5 GB 的檔案寫入「stripe_one」目錄。執行下列指令:

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

將資料寫入檔案系統的程序平均約 27 秒,也就是將 5 GB 的資料寫入單一物件儲存伺服器 (OSS) 上的單一永久磁碟。

如要測試跨多個 OSS 和多個 PD 的去除作業,我們只需變更寫入的輸出目錄即可。執行下列指令:

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

請注意,我們已將「of=stripe_one/test」變更為「of=stripe_all/test」。這樣一來,單一串流寫入作業就能將寫入作業分散到所有 Object Storage 伺服器,並在平均 5.5 秒內完成寫入作業,速度比使用四部 OSS 快上約 4 倍。

隨著您新增物件儲存伺服器,這個效能持續增加。您可以透過線上檔案系統新增 OSS,然後開始將資料複製到這些伺服器,提高線上的容量和效能。在 Google Cloud Platform 上使用 Lustre 可以帶來無限可能,我們很期待看到您可以建構的產品,以及您可以解決的問題。

8. 結語

恭喜,您已在 Google Cloud Platform 中建立 Lustre 叢集!您可以使用這些指令碼做為起點,建構自己的 Lustre 叢集,並將其與雲端運算叢集整合。

清除 Deployment

登出 Lustre 節點:

exit

完成後,您可以輕鬆清理部署作業,方法是從 Google Cloud Shell 登出 Lustre 叢集後,執行下列指令:

gcloud deployment-manager deployments delete lustre

出現提示訊息時,輸入 Y 即可繼續操作。這項作業可能需要一段時間才能完成,請耐心等候。

刪除專案

為了清理,我們只需刪除專案即可。

  • 在導覽選單中,選取「IAM &Admin」(IAM 與管理)
  • 然後點選子選單中的「設定」
  • 按一下「Delete Project」(刪除專案) 文字旁的垃圾桶圖示
  • 按照提示操作

涵蓋內容

  • 如何使用 GCP Deployment Manager 服務。
  • 如何在 GCP 上設定及部署 Lustre 檔案系統。
  • 如何設定去量化,以及對 Lustre 檔案系統進行簡單的 I/O 測試。

尋求支援

您是否要使用 Lustre 部署管理員指令碼打造酷炫的元件?有任何問題嗎?歡迎前往 Google Cloud Lustre 討論群組與我們對話。如想提出新功能要求、提供意見或回報錯誤,請填寫這份表單,或者修改程式碼並提出提取要求!想與 Google Cloud 專家聯絡嗎?歡迎透過 Google Cloud 的高效能運算網站,立即與 Google Cloud 團隊聯絡。

瞭解詳情

意見回饋

點選這個連結,針對本程式碼研究室提供意見回饋。填寫意見調查表只需 5 分鐘。感謝您!