該文章為本系列的第六篇文章,我們將在之后繼續推出本系列的其他文章,敬請關注!
場景一:生產環境一般都是三副本存儲,但一些場景為了節省資源,將副本調整為2副本。兩副本要求將數據分布在不同的機器上,防止集群故障時數據丟失。
我們為此添加Rack級的Bucket,分別包含兩個存儲節點(以Host的Bucket),然后以Rack為隔離域,保證兩個副本分別落在不同的Rack上。
示意圖如下:
1、修改操作
修改前數據備份,以防萬一。crushmap備份
# ceph osd getcrushmap -o backup.txt
恢復:
# ceph osd setcrushmap -i backup.txt
2、理論與實踐相結合
1)、創建機柜
ceph osd crush add-bucket rack1 rack
ceph osd crush add-bucket rack2 rack
2)、將rack移動到root下
# ceph osd crush move rack1 root=default
# ceph osd crush move rack2 root=default
3)、將主機移動到機柜中
# ceph osd crush move node1 rack=rack1
# ceph osd crush move node2 rack=rack2
4)、創建rule
# ceph osd crush rule create-simpletestrule default rack firstn
5)、修改已經創建pool的rule
luminus 以后版本設置pool規則的語法是
# ceph osd pool set demo crush_ruletestrule
luminus以前版本設置pool規則的語法是
查看rule的ID
# ceph osd crush rule dump | grep testrule
# ceph osd pool set demo crush_ruleset 1
此處1是指在rule里rule_ id設置的值
6)、創建pool
# ceph osd pool create demo 64 64replicated testrule
7)、在ceph.conf中加入防止集群重啟crush map被重置
osd crush update on start = false