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

1. 總覽

歡迎參加 Google 程式碼研究室,瞭解如何在 Google Cloud Platform 上執行 Lustre 平行檔案系統叢集!

d51beef5f729cbe9.png

資料是高效能運算的核心,以極高速度和低延遲存取大量資料,一直是執行 HPC 工作負載時的主要挑戰。雲端環境對高效能儲存空間的需求並未改變,事實上,快速輕鬆地運用大量儲存空間的能力已成為首要之務。

長期以來,HPC 中心都是使用 Lustre 平行檔案系統等技術,在地端滿足這項需求。Lustre 是目前最受歡迎的開放原始碼高效能儲存解決方案之一,自 2005 年 6 月以來,全球前十大超級電腦中,至少有一半使用 Lustre,前 100 大超級電腦中,也有超過 60 台使用 Lustre。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,請前往這個頁面

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

這部虛擬機器搭載各種您需要的開發工具,並提供永久的 5GB 主目錄,而且可在 Google Cloud 運作,大幅提升網路效能並簡化驗證程序。本實驗室幾乎所有工作都可在網頁瀏覽器或 Google Chromebook 上完成。

連至 Cloud Shell 後,您應該會看到驗證已完成,專案也已設為獲派的「PROJECT_ID」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 工作階段中,執行下列指令來複製 (下載) Git 存放區,其中包含 Lustre for Google Cloud Platform 部署管理員檔案:

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 檔案,請開啟 Deployment 設定 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* - 採用 CIDR 格式的 IP 範圍
  • external_ips* - True/False,Lustre 節點有外部 IP 位址。如果為 false,則 Cloud NAT 會設為 NAT 閘道
  • vpc_net - 定義這個欄位和 vpc_subnet 欄位,將 Lustre 叢集部署至現有 VPC
  • vpc_subnet - 用於部署 Lustre 叢集的現有 VPC 子網路
  • 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 - MDS 開機磁碟大小 (GB)
  • 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  []

驗證部署作業

5f2a0557d3f2476f.png

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

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

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

aec8498e04a3c334.png

在「VM Instances」(VM 執行個體) 頁面中,查看 Deployment Manager 建立的五個虛擬機器執行個體。包括 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 中繼資料伺服器 (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-mds1 伺服器上的「lustre」類型檔案系統,而檔案系統名稱為「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 管理伺服器 (MGS) 視為項目 1、Lustre 中繼資料伺服器 (MDS) 視為項目 3、Lustre 中繼資料目標 (MDT) 視為項目 5,以及四個 Lustre 物件儲存伺服器 (OSS) 視為項目 8 到 12。如要瞭解其他服務,請參閱 Lustre 手冊

Lustre 的檔案系統設定工具是「lfs」。我們可以透過 lfs 管理 Lustre 物件儲存伺服器 (OSS) 和各自的物件儲存目標 (OST) 之間的檔案條帶化,以及執行常見的檔案系統作業,例如 find、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

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

如要測試多個 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 秒內完成寫入作業,速度是使用四個 OSS 的約 4 倍。

隨著您新增物件儲存空間伺服器,這項效能會持續提升。您可以在檔案系統連線時新增 OSS,並開始將資料條紋化至 OSS,以提升連線容量和效能。在 Google Cloud Platform 上使用 Lustre 的可能性無窮無盡,我們很期待您能建構出什麼,以及解決哪些問題。

8. 結語

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

清除部署作業

登出 Lustre 節點:

exit

完成後,只要從 Google Cloud Shell 執行下列指令,即可輕鬆清理部署作業 (請先登出 Lustre 叢集):

gcloud deployment-manager deployments delete lustre

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

刪除專案

如要清理,只要刪除專案即可。

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

涵蓋內容

  • 如何使用 GCP Deployment Manager 服務。
  • 如何在 GCP 上設定及部署 Lustre 檔案系統。
  • 如何設定條帶化,並測試 Lustre 檔案系統的簡單 I/O。

尋求支援

您是否使用 Lustre 部署作業管理員指令碼建構了很酷的內容?有任何問題嗎?在 Google Cloud Lustre 討論群組與我們即時通訊。如要要求功能、提供意見或回報錯誤,請使用這份表單,或隨意修改程式碼並提交提取要求!想與 Google Cloud 專家聯絡嗎?如要瞭解詳情,請立即透過 Google Cloud 的高效能運算網站與 Google Cloud 團隊聯絡。

瞭解詳情

意見回饋

按這裡提交本程式碼研究室的意見回饋。填寫意見回饋表單只需不到 5 分鐘。感謝您!