簡體   English   中英

了解ceph中crush規則的機制

[英]Understanding the mechanism of crush rule in ceph

我想知道這兩條規則之間的區別:

# rules
rule rack_rule{
 ruleset 0
 type replicated
 min_size 1
 max_size 10
 step take default
 step chooseleaf firstn 0 type rack
 step emit
}

rule 2rack_2host{
 ruleset 0
 type replicated
 min_size 1
 max_size 10
 step take default
 step choose firstn 2 type rack
 step chooseleaf firstn 2 type host
 step emit
}

據我了解,第一條規則 rack_rule 將 rack 作為故障域,因此在每個 PG 中,我們都會有來自不同機架的 osd。 例如,如果我有 2 個機架並且復制大小 = 2,我將有一個 PG [osd.1,osd.2],這 2 個 osd 應該來自不同的機架。

在第二條規則中,我認為它應該 select 2 個不同的機架,對於每個機架,它將 select 2 個不同的主機。 所以,如果我有 2 個機架並且復制大小 = 2,我將有一個 PG [osd.1,osd.2],這 2 個 osd 應該來自不同的機架。

這在理論上是我所理解的,但我在實踐中看不到這些預期的結果。 使用這兩個規則,我在同一個機架中為 PG 在復制大小為 2 的池中設置了 osd

你的結論並不完全正確。 第一條規則

step take default
step chooseleaf firstn 0 type rack

你確實理解正確。 Ceph 將選擇盡可能多的機架(在粉碎樹中的“默認”根下),因為您為池定義的size參數。 第二條規則有點不同:

step take default
step choose firstn 2 type rack
step chooseleaf firstn 2 type host

Ceph 將 select 在根“默認”下正好 2 個機架,然后在每個機架中選擇 2 個主機。 但是這個規則是為size = 4而不是 2 設計的。順便說一下,不要使用size = 2 ,如果你使用這個規則的 size 2 你最終會完全按照你已經寫的那樣。 同一機架中的兩台主機將同時擁有兩個 PG。 因此,如果一個機架發生故障,您的 PG 將變為非活動狀態,並且客戶端將遇到 I/O 錯誤,直到此問題解決。

有一個名為crushtool工具可以在實際實施之前測試您的更改,非常有用,試試吧!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM