1. 總覽
歡迎使用 Google 程式碼研究室,在 Google Cloud Platform 上執行 Lustre 平行檔案系統叢集!
資料是高效能運算作業的核心,而在執行 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),然後開啟「管理資源頁面」:
按一下「建立專案」。
輸入專案名稱。記下專案 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」圖示:
然後按一下「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 版本要部署,點選「最新」來部署來自 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* - 要建立的物件儲存伺服器 (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
如要在 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 執行個體」。
在「VM Instances」頁面中,查看部署管理員建立的五個虛擬機器執行個體。包括 lustre-mds1、lustre-oss1、lustre-oss2、lustre-oss3 和 lustre-oss4。
5. 存取 Lustre 叢集
監控安裝情形
在「VM 執行個體」頁面中,按一下 lustre-mds1,開啟「執行個體詳細資料」頁面。
按一下「序列埠 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 分鐘。感謝您!