Ceph
在兩節點集群上將 CRUSHMAP 設置為 3 路
我有一個 SSD 儲存系統,其中包含兩個節點和 6 個 SSD 驅動器。不理想,所以有一點我會介紹另一個節點。現在我想要3路複製。
在預設規則下,這不會發生,因為我們只有兩個節點。所以我想我會嘗試修改crushmap並為SSD儲存節點設置規則集以將數據放置在兩個節點上,第三組可以在同一節點上的另一個OSD上。
作為一個新手並且不完全理解
choose firstn
andchooseleaf 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 個副本。