Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

章 2. GFS2 配置和操作上的考量

Global File System 2(GFS2)檔案系統能允許叢集中多部電腦(節點)共同分享相同的儲存裝置。為了讓節點協作並維持節點上的資料一致性,節點針對檔案系統資源採用了叢集全域的鎖定結構描述。此鎖定結構描述使用了例如 TCP/IP 的通訊協定,以交換鎖定資訊。
您可藉由依照詳述於本章節中的建議來改善效能,這包括了建立、使用和維護 GFS2 檔案系統上的相關建議。

重要

請確認您的 Red Hat High Availability 外掛程式建置滿足您的需求並且受到支援。請詢問經授權的 Red Hat 客服人員,以在進行建置前驗證您的配置。

2.1. 格式化考量

此部分提供了有關於如何格式化 GFS2 檔案系統,以優化效能上的相關建議。

2.1.1. 檔案系統大小:建議較小的檔案系統大小

GFS2 乃基於 64 位元架構,並且理論上能與 8 EB 檔案系統相容。然而,64 位元硬體目前所支援的最大 GFS2 檔案系統大小為 100 TB,而目前 32 位元硬體所支援的最大 GFS2 檔案系統大小為 16 TB。
請注意,儘管您可使用大型的 GFS2 檔案系統,不過這並不代表我們建議您使用。GFS2 的基本規則乃愈小愈好:擁有 10 個 1TB 的檔案系統優於單一個 10TB 的檔案系統。
以下為幾項您應將 GFS2 檔案系統維持較小尺寸的理由:
  • 備份各個檔案系統的所需時間較少。
  • 使用 fsck.gfs2 指令來檢查檔案系統時,所需的時間將會較少。
  • 使用 fsck.gfs2 指令來檢查檔案系統時,所需的記憶體將會較少。
此外,維護較少的資源群組亦代表較佳的效能。
當然,若您的 GFS2 檔案系統過小,您可能會遇上空間不足的問題,並且這即可能會衍生出其它問題。您應在決定大小之前,考慮用途。

2.1.2. 區塊大小:建議使用預設區塊大小(4K)

由 RHEL 6 發行版起,mkfs.gfs2 指令將會嘗試根據裝置拓撲來估計最佳的區塊大小為何。一般來講,4K 區塊為建議的區塊大小,因為 4K 乃 Linux 的預設(記憶體)分頁大小。GFS2 與其它檔案系統不同,它使用 4K 的 kernel 緩衝區來進行大部份的作業。若您的區塊大小為 4K,kernel 便可進行較少的工作以操縱緩衝區。
建議您使用預設的區塊大小,這將會帶來最佳的效能。您僅在需要為許多非常小的檔案提供高效率的儲存裝置時,才可能需要使用不同的區塊大小。

2.1.3. 日誌數量:掛載的節點各一個

在欲掛載 GFS2 檔案系統的叢集上,檔案系統需要叢集中的每個節點皆包含一個日誌。比方說,若您擁有一個包含 16 個節點的叢集,不過您僅需要掛載其中兩個節點的檔案系統的話,那麼您將只需要擁有兩個日誌。若您需要掛載第三個節點的檔案系統,您僅需要透過 gfs2_jadd 指令來新增日誌即可。當使用 GFS2 時,您可視需求隨時新增日誌。

2.1.4. 日誌大小:預設值(128MB)一般已足夠

當您執行 mkfs.gfs2 指令來建立 GFS2 檔案系統時,您可指定日誌的大小。若您不指定大小,它將會使用預設值的 128MB,並且對於大部份應用程式來說應已足夠。
有些系統管理員可能會覺得 128MB 過多,並將日誌大小縮減為最小的 8MB,或是較為保守的 32MB。儘管這可能不會遇上問題,但卻可能會嚴重影響效能。GFS2 和許多日誌檔案系統相同,每當它寫入 metadata 時,metadata 在存放之前皆會被提交至日誌中。這可確保若系統當機或斷電,當日誌自動在掛載時重新啟用時,您將能取回所有的 metadata。然而,要填滿 8MB 的日誌無需太多檔案系統動作,並且當日誌填滿時,效能便會因為 GFS2 必須等待寫入儲存裝置而受到影響。
一般建議您使用預設的 128MB 日誌大小。若您的檔案系統非常小(比方說 5GB),使用 128MB 的日誌可能不太實際。若您的檔案系統較大並且擁有空間的話,使用 256MB 的日誌大小可能能夠改善效能。

2.1.5. 資源群組的大小與數量

當您使用 mkfs.gfs2 指令建立 GFS2 檔案系統時,系統會將儲存空間分成一致的大小區塊,稱為資源群組。系統會預測最佳資源群組的大小(從 32MB 到 2GB)。您可以使用 mkfs.gfs2 指令的 -r 選項來覆寫預設值。
您的最佳資源群組大小取決於您將如何使用檔案系統。請考慮它的使用量將會多大,並且它是否會嚴重分散。
請實驗看看,那一種群組大小的效能最好。建議您在建置 GFS2 之前,先使用測試的叢集環境來作實驗。
若您的檔案系統擁有太多資源群組(並且每個資源群組皆過小),區塊分配可能會花上太多時間由上百(或上萬)個資源群組中尋找可用區塊。檔案系統愈滿,搜尋的資源群組就會愈多,並且它們每個皆需要叢集全域的鎖定。這將會造成效能變得緩慢。
然而,如果您的檔案系統的資源群組太少(每個群組的空間過大),那麼分配區塊時可能會競用同樣的資源群組鎖,進而影響效能。舉例來說,如果您有 10GB 的檔案系統,切成五塊後每塊是 2GB,那麼跟切成 320 塊 32MB 的空間比起來,叢集中的節點會更常競用這五組資源組。如果因為每次分配區塊時,找到可用區塊之前需要檢查多組資源組,那麼情況會更為惡化。GFS2 會試著用兩種方式減緩這問題。
  • 首先,當資源群組已完全滿時,它將會記得此情況並且嘗試避免未來檢查它(直到從中釋出區塊)。若您從未刪除檔案,競用情況會較輕。然而,若您的應用程式在一個大部份已滿的檔案系統上,持續刪除區塊並分配新的區塊,競用情況將會較嚴重,並大幅影響效能。
  • 其次,當新的區塊新增至現有檔案(例如使用附加方式)時,GFS2 會試著把新的區塊與放在一起,使其以檔案方式成為同樣的資源群組。這樣會增進效能:在傳統硬碟上,區塊聚集在一起,搜尋時間較短。
最壞情況是集中式目錄,其中所有節點會建立檔案,因為所有節點會不斷競用鎖定同樣的資源群組。