[英]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.