Ceph

在兩節點集群上將 CRUSHMAP 設置為 3 路

  • May 26, 2019

我有一個 SSD 儲存系統,其中包含兩個節點和 6 個 SSD 驅動器。不理想,所以有一點我會介紹另一個節點。現在我想要3路複製。

在預設規則下,這不會發生,因為我們只有兩個節點。所以我想我會嘗試修改crushmap並為SSD儲存節點設置規則集以將數據放置在兩個節點上,第三組可以在同一節點上的另一個OSD上。

作為一個新手並且不完全理解choose firstnandchooseleaf firstn語句是如何工作的,我不確定它是否會按照我的意圖進行。

這是我到目前為止所擁有的:

rule ssd-all {
 ruleset 1
 type replicated
 min_size 1
 max_size 5
 step take ssd
 step choose firstn 0 type host
 step chooseleaf firstn 2 type osd
 step emit
}

其中 ssd 是包含一些主機和包含多個 (6) OSD 的主機的根類型。

那行得通嗎?不知怎的,我認為這是不對的。我想更好地了解何時使用choose以及在何處使用chooseleaf. 並且對之後的數字有了更好的了解firstn。該文件缺乏明確的範例。閱讀CRUSH 白皮書有些道理,但虛擬碼對我來說不是那麼清楚。有人可以幫忙嗎?

事實證明沒關係。

rule ssd-all {
 ruleset 1
 type replicated

 # These lines mean ssd-all will be used when the replica 
 # count is between 1 & 5 inclusive
 min_size 1  
 max_size 5

 # Take the top level pool named 'ssd'
 step take ssd

 # Choose all host nodes.  In my case, there are only 2.
 step choose firstn 0 type host

 # Choose up to to 2 leaves of type osd.
 step chooseleaf firstn 2 type osd
 step emit
}

跑步後

  crushtool -t crushmap --test --show-statistics --show-mappings --rule 1 --min-x 1 --max-x 10 --num-rep 3

使用 –num-rep 的不同數量的副本,似乎正確滿足了條件。兩台主機上至少有 3 個副本,在 2 個不同 osd 上的單個主機上最多有 2 個副本。

引用自:https://serverfault.com/questions/701155