1. 總覽
歡迎使用 Google 程式碼研究室,在 Google Cloud Platform 上執行 Lustre 平行檔案系統叢集!
資料是高效能運算的核心,而以極高的速度和低延遲存取大量資料,一直是執行 HPC 工作負載的重要挑戰。雲端服務對高效能儲存空間的需求並未改變,事實上,能否快速且輕鬆地使用大量儲存空間已成為重中之重。
HPC 中心長期以來一直使用 Lustre 平行檔案系統等技術,滿足內部需求。Lustre 是目前最受歡迎的開放原始碼高效能儲存空間解決方案之一,自 2005 年 6 月以來,至少有一半的全球十大超級電腦,以及全球 100 部最快的超級電腦中,有超過 60 部持續使用 Lustre。Lustre 可擴充至數百 PB 的容量,並為 HPC 工作提供最佳效能,系統可在單一命名空間中提供 TB/s 的處理量。
為了滿足儲存空間需求,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 部署開放原始碼部署管理工具指令碼。如果您想使用企業級的強化 Lustre 服務,並獲得 Lustre 叢集的 Lustre 專家支援,以及管理和監控 GUI 或 Lustre 調整等功能,建議您查看 DDN EXAScaler Marketplace 提供的服務。
課程內容
- 如何使用 GCP Deployment Manager 服務
- 如何在 GCP 上設定及部署 Lustre 檔案系統。
- 如何設定分割作業,並測試 Lustre 檔案系統的簡易輸入/輸出作業。
必要條件
- Google Cloud Platform 帳戶和含有帳單的專案
- 基本 Linux 體驗
2. 設定
自助式環境設定
建立專案
如果您還沒有 Google 帳戶 (Gmail 或 G Suite),請務必建立帳戶。登入 Google Cloud Platform 主控台 ( console.cloud.google.com),然後開啟「管理資源頁面」:
按一下「建立專案」。
輸入專案名稱。記下專案 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 圖示:
然後按一下「Start Cloud Shell」:
佈建並連線至環境的作業很快就能完成:
這個虛擬機器會載入您需要的所有開發工具。提供永久的 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 控制台程式碼編輯器查看檔案內容:
檔案內容如下所示:
# [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 欄位,將叢集部署至共用虛擬私有雲
檔案系統設定
- fs_name - Lustre 檔案系統名稱
- lustre_version - 要部署的 Lustre 版本,請使用「latest-release」部署 https://downloads.whamcloud.com/public/lustre/ 中的最新分支,或使用「lustre-X.X.X」部署任何其他版本
- e2fs_version - 要部署的 E2fsprogs 版本,請使用「latest」部署 https://downloads.whamcloud.com/public/e2fsprogs/ 中的最新分支,或使用「X.XX.X.wcX」部署其他版本
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*:要建立的 Object Storage Server (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* - 用於 Object Storage Target (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 []
驗證部署
如要在 Google Cloud Platform 主控台中查看部署作業,請按照下列步驟操作:
- 在 Cloud Platform 主控台中,開啟主控台左上角的「Products & Services」選單 (三條水平線)。
- 按一下「Deployment Manager」。
- 按一下「Lustre」Lustre即可查看部署作業的詳細資料。
- 按一下「總覽 - Lustre」。「部署屬性」窗格會顯示整體部署設定。
- 按一下「Config」屬性中的「View」。「設定」窗格會顯示先前修改的部署設定 YAML 檔案內容。請先確認內容正確無誤再繼續操作。如需變更部署設定,請按照「清理部署作業」中的步驟刪除部署作業,然後按照「設定 Lustre 部署作業 YAML」中的步驟重新啟動部署作業。
- (選用) 在「Lustre-cluster」部分下,點選 Lustre.jinja 範本建立的每個資源,查看詳細資料。
確認部署設定後,我們來確認叢集的執行個體是否已啟動。在 Cloud Platform 控制台的「產品與服務」選單中,依序點選「Compute Engine」>「VM 執行個體」。
在「VM Instances」頁面中,查看部署管理員建立的五個虛擬機器執行個體。包括 lustre-mds1、lustre-oss1、lustre-oss2、lustre-oss3 和 lustre-oss4。
5. 存取 Lustre 叢集
監控安裝作業
在「VM 執行個體」頁面上,按一下 lustre-mds1 開啟「Instance details」(執行個體詳細資料) 頁面。
按一下「Serial port 1 (console)」,開啟序列主控台輸出頁面。我們會使用這份序列輸出內容,監控 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」類型的檔案系統,該檔案系統位於 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 管理伺服器 (MGS) 為項目 1,Lustre 中繼資料伺服器 (MDS) 為項目 3,Lustre 中繼資料目標 (MDT) 為項目 5,而四個 Lustre 物件儲存空間伺服器 (OSS) 則為項目 8 到 12。如要瞭解其他服務,請參閱 Lustre 手冊。
Lustre 的檔案系統設定工具為「lfs」。我們可以使用 lfs 管理 Lustre 物件儲存體伺服器 (OSS) 和相應的物件儲存體目標 (OST) 的檔案分割作業,以及執行常見的檔案系統作業,例如 find、df 和配額管理。
透過分割功能,我們可以設定檔案在 Lustre 叢集中的分配方式,以便提供最佳效能。雖然將大型檔案分割成盡可能多的 OSS,通常可透過平行處理 I/O 達到最佳效能,但分割小型檔案可能會導致效能變差,比起將該檔案寫入單一執行個體更差。
為了測試這項功能,我們設定了兩個目錄,一個的條紋數為一個 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」。這樣一來,單一串流寫入作業就能將寫入作業分散到所有 Object Storage 伺服器,並在平均 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 與管理」
- 然後點選子選單中的「設定」
- 按一下「Delete Project」(刪除專案) 文字旁的垃圾桶圖示
- 按照提示操作
涵蓋內容
- 如何使用 GCP Deployment Manager 服務。
- 如何在 GCP 上設定及部署 Lustre 檔案系統。
- 如何設定分割作業,並測試 Lustre 檔案系統的簡易輸入/輸出作業。
尋求支援
您是否使用 Lustre 部署管理員指令碼建構有趣的內容?有任何問題嗎?歡迎前往 Google Cloud Lustre 討論群組與我們對話。如要要求功能、提供意見回饋或回報錯誤,請使用這份表單,或自行修改程式碼並提交合併要求!想與 Google Cloud 專家聯絡嗎?歡迎透過 Google Cloud 的高效能運算網站,立即與 Google Cloud 團隊聯絡。
瞭解詳情
意見回饋
請點選這個連結,針對本程式碼研究室提供意見回饋。填寫意見調查表只需 5 分鐘。感謝您!