查看CRUSH map
- 從monitor節點上獲取CRUSH map
[root@ceph ceph]# ceph osd getcrushmap -o crushmap_compiled_file
- 反編譯CRUSH map
[root@ceph ceph]# crushtool -d crushmap_compiled_file -o crushmap_decompiled_file
- 修改完成后,我們需要編譯他
[root@ceph ceph]# crushtool -d crushmap_decompiled_file -o newcrushmap
- 將新CRUSH map導入集群中
[root@ceph ceph]# ceph osd setcrushmap -i newcrushmap
[root@ceph ceph]# cat crushmap_decompiled_file
# begin crush map tunable choose_local_tries 0 tunable choose_local_fallback_tries 0 tunable choose_total_tries 50 tunable chooseleaf_descend_once 1 tunable chooseleaf_vary_r 1 tunable straw_calc_version 1 # devices device 0 osd.0 device 1 osd.1 device 2 osd.2 # types type 0 osd type 1 host type 2 chassis type 3 rack type 4 row type 5 pdu type 6 pod type 7 room type 8 datacenter type 9 region type 10 root # buckets host ceph-node1 { id -2 # do not change unnecessarily # weight 0.000 alg straw hash 0 # rjenkins1 } host ceph { id -3 # do not change unnecessarily # weight 0.044 alg straw hash 0 # rjenkins1 item osd.2 weight 0.015 item osd.1 weight 0.015 item osd.0 weight 0.015 } root default { id -1 # do not change unnecessarily # weight 0.044 alg straw hash 0 # rjenkins1 item ceph-node1 weight 0.000 item ceph weight 0.044 } # rules rule replicated_ruleset { ruleset 0 #rule編號 type replicated
#定義pool類型為replicated(還有esurecode模式)
min_size 1
#pool中最小指定的副本數量不能小1
max_size 10
#pool中最大指定的副本數量不能大於10
step take default
#定義pg查找副本的入口點
step chooseleaf firstn 0 type host
#選葉子節點、深度優先、隔離host
step emit
#結束
} # end crush map
注:
下面解釋來自:https://my.oschina.net/u/2460844/blog/531722
影響crush算法結果的有兩種因素,一個就是OSD Map的結構,另外一個就是crush rule。 OSDMap其實就是一個樹形的結構,葉子節點是device(也就是osd),其他的節點稱為bucket節點,這些bucket都是虛構的節點,可以根據物理結構進行抽象,當然樹形結構只有一個最終的根節點稱之為root節點,中間虛擬的bucket節點可以是數據中心抽象、機房抽象、機架抽象、主機抽象等。

上圖中紅色框內的節點都是bucket節點,這些節點都是根據實際情況進行抽象得來的。
其實也就是實際中整個物理拓撲結構。這個拓撲里的每個節點都有一個權重值,這個權重值等於所有子節點的權重之和,葉子節點的重量由osd的容量決定,一般設定1T的權重為1。
這個權重值在crush算法中也有很重要的地位。
其實也就是實際中整個物理拓撲結構。這個拓撲里的每個節點都有一個權重值,這個權重值等於所有子節點的權重之和,葉子節點的重量由osd的容量決定,一般設定1T的權重為1。
這個權重值在crush算法中也有很重要的地位。
bucket類型解釋:
對於bucket節點不只是虛設的節點,bucket同樣有type。bucket的type有四種類型結構,uniform、list、tree、straw。這四種bucket有着不同的特性,bucket的type設定同樣也影響着crush算法。不同的 類型定位數據在哪個子節點的過程不同。
crush rule主要作用:
- 從OSD Map中的哪個節點開始查找
- 使用那個節點作為故障隔離域
- 定位副本的搜索模式(廣度優先 or 深度優先)