MooseFS 4:儲存類別 (Storage Classes)

2025-01-22

儲存類別 (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
    • 相同的子表達式可以透過在前面加上數字來縮短,而不是重複多次

      • 例如: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?

分類:雲端      303
Tag moosefs ,
留言

留言