MooseFS 4:儲存類別 (Storage Classes)
儲存類別 (Storage Classes)
以下是 3.0版手冊的資料
MooseFS 3.0 引入的 儲存類別 (Storage Classes) 功能,讓用戶可更精細地控制檔案副本的儲存位置,擴展了傳統的目標 (goal) 設定。儲存類別透過標籤 (labels) 表達式來定義,讓你可指定檔案副本應該儲存在哪些 Chunkserver 上 。 以下是關於儲存類別的詳細解釋:
-
什麼是儲存類別?
- 儲存類別讓你指定檔案副本應該儲存在指定的 Chunkserver 上
- 儲存類別是透過 標籤表達式 來定義的
- 為了保持與舊版目標設定的相容性,MooseFS 預定義了 1 到 9 的儲存類別,其行為與 MooseFS 2.0 或 1.6 中的目標goal相同
-
什麼是標籤?
- 標籤是分配給 Chunkserver 的字母 (A-Z),每個 Chunkserver 可有多個標籤 (最多 26 個)
- 標籤在 mfschunkserver.cfg 檔案中定義
-
標籤表達式
-
標籤表達式是由逗號分隔的子表達式組成的,每個子表達式指定一個檔案副本的儲存方案
-
子表達式可以是星號 (*) 或標籤方案
-
標籤方案可以是一個標籤,也可是包含加法、乘法和括號的表達式
- 加法 (Sum):表示檔案可以儲存在符合任何一個加法元素的 Chunkserver 上 (邏輯 OR)
- 例如:C+D 表示檔案可以儲存在標籤為 C 或 D 的 Chunkserver 上
- 乘法 (Multiplication):表示檔案只能儲存在符合所有乘法元素的 Chunkserver 上 (邏輯 AND)
- 例如:AB 表示檔案只能儲存在同時具有 A 和 B 標籤的 Chunkserver 上
- 星號 (*):表示任何 Chunkserver
- 加法 (Sum):表示檔案可以儲存在符合任何一個加法元素的 Chunkserver 上 (邏輯 OR)
-
相同的子表達式可以透過在前面加上數字來縮短,而不是重複多次
- 例如:A,A 等同於 2A,A,BC,BC,BC 等同於 A,3BC
-
-
如何使用儲存類別?
-
為 Chunkserver 加上標籤:編輯 /etc/mfs/mfschunkserver.cfg 檔案,設定 LABELS 參數
- 例如 LABELS = A 或 LABELS = X, Y, Z。修改後需重新載入 Chunkserver 設定(執行 mfschunkserver reload)
-
建立儲存類別:使用 mfsscadmin 工具建立新的儲存類別
- 例如:mfsscadmin create 2A sclass1 表示建立一個名為 sclass1 的儲存類別,該類別會將檔案儲存兩個副本,每個副本都放在標籤為 A 的 Chunkserver 上
-
列出儲存類別:使用 mfsscadmin list 來列出已建立的儲存類別
-
分配儲存類別給檔案/目錄:使用 mfssetsclass 工具來將儲存類別分配給檔案或目錄
- 例如:mfssetsclass sclass1 dataX 表示將 sclass1 儲存類別分配給 /mnt/mfs/dataX 目錄
-
其他相關工具:
- mfsgetsclass:查看物件的目前儲存類別
- mfscopysclass:從一個物件複製儲存類別到其他物件
- mfsxchgsclass:交換物件的儲存類別,但前提是目前物件的儲存類別必須與指定的來源類別相同
- mfslistsclass:列出目前定義的儲存類別
-
-
儲存類別的選項
- 建立標籤 (Creation Labels):使用 -C 參數指定在檔案建立時,優先將 chunk 寫入哪些 Chunkserver。如果沒有指定,則使用保留標籤 (keep labels) 的 Chunkserver
- 保留標籤 (Keep Labels):使用 -K 參數指定 Chunk 應始終保留在哪些 Chunkserver 上,除非有特殊情況 (例如建立或封存)。這是必要參數
- 封存標籤 (Archive Labels):使用 -A 參數指定為了封存目的,Chunk 應該保留在哪些 Chunkserver 上。使用 -d 參數指定檔案的最後修改時間 (mtime) 多久之後被視為封存
- 管理員專用 (Admin Only)**:使用 -a 參數指定儲存類別是否僅限管理員使用 (1) 或所有人可用 (0)
- 強制變更 (Force Change):使用 -f 參數強制變更預先定義的儲存類別,請謹慎使用
- 建立模式 (Creation Modes):使用 -m 參數指定在 Chunkserver 空間不足或過載時的行為
- 寬鬆模式 (Loose Mode):當目標 Chunkserver 過載或空間不足時,系統會使用其他伺服器,並在可能時將資料複製到正確的伺服器
- 預設模式 (Default Mode):當目標 Chunkserver 過載時,系統會等待,但當空間不足時,會使用其他伺服器,並在可能時將資料複製到正確的伺服器
- 嚴格模式 (Strict Mode):當目標 Chunkserver 空間不足時,系統會返回錯誤 (ENOSPC),但仍會等待過載的伺服器
-
常見使用情境
- 兩個機房 (A 和 B):將標籤 A 的 Chunkserver 放在機房 A,標籤 B 的 Chunkserver 放在機房 B,可以根據需要選擇資料儲存的機房
- SSD 和 HDD 硬碟:將 SSD 硬碟的 Chunkserver 標記為 S,HDD 硬碟的 Chunkserver 標記為 H,可以將常用資料儲存在 SSD 上,不常用資料儲存在 HDD 上
- 機房 + SSD/HDD 混合:結合以上兩種情境,可以將資料精細地分配到不同的機房和不同類型的硬碟上
- 建立、保留、封存模式:可以設定資料在建立時快速寫入某個位置,之後複製到其他位置,並在一段時間後自動封存到其他儲存裝置
-
Chunkserver 狀態
- 正常 (Normal):標準狀態
- 內部重新平衡 (Internal Rebalance):當新增空的硬碟到 Chunkserver 時,會進入此狀態,並重新平衡所有硬碟上的資料,使每個硬碟的使用率盡可能接近
- 過載 (Overloaded):當 Chunkserver 負載過高時,會進入此狀態
-
優先標籤 (Preferred Labels)
- 可在客戶端 (mfsmount) 指定讀寫操作時的優先標籤,使用 -o mfspreflabels=LABELEXPR 選項
- 可指定多個標籤,並使用數字指定優先級,數字越小表示優先級越高
儲存類別是 MooseFS 3.0 中一個強大的功能,它讓使用者可根據不同的需求和硬體配置,更精細地控制資料的儲存位置和方式,實現更高效、更可靠的資料管理。
透過使用標籤、標籤表達式、建立模式、和優先標籤,可靈活地配置資料在不同 Chunkserver 上的分佈,以滿足效能、可靠性、和成本等方面的需求。
範例
假設有三個 Chunkserver:
- CS1:標籤為 "ssd, fast"
- CS2:標籤為 "hdd, slow"
- CS3:標籤為 "ssd, backup"
如果設置:
-
存檔標籤:"-A backup -d 30"
- 30天沒修改的檔案會被存到有 "backup" 標籤的 CS3
-
使用嚴格模式,並設置必須使用 "ssd" 的服務器:
- 只能使用 CS1 和 CS3
- 如果兩者都滿了,系統會報錯而不是使用 CS2
-
設置優先標籤:"-o mfspreflabels=fast"
- 讀寫操作會優先使用有 "fast" 標籤的 CS1
- 如果 CS1 出問題,才會使用其他服務器
此設置可更好地控制數據的存放位置和讀寫行為,根據不同服務器的特性(如速度、容量)來優化存儲系統的使用。
詳細作法,參閱手冊: 4.2 How to use Storage Classes?