对不同性能的磁盘如ssd和hdd,可使用crush rule进行分组,分组后有pool类型下的osd仍然不均的可只修改对应pool类型下的crush map type,参考下面解决方案二。
2、解决方案二
调整crushmap的type,从host 调整为osd,crushmap的type为host的时,同一数据的不同副本会默认在不同的host主机之间找数据块进行存储,以防止同一个数据块的不同重复分布在同一故障主机的不同osd中,这样会造成ceph的数据在线服务中断。
但一般情况下主机down的情况比单个osd down的几率要小一些,如不在意数据在线服务的中断,只关心数据存储,可以将crush的type设置为osd,这样数据存储时只考虑将数据重复副本分布在不同的磁盘中即可,尤其是在osd节点数低于3个和osd数及容量、性能不均的情况下使用是很有效的。
osd crush map type修改:
###调整前请先注意暂停数据迁移和恢复动作,尽量在数据平衡和恢复停止后开始操作
#停止数据恢复和心跳
for i in noout nodown nobackfill norecover norebalance noscrub nodeep-scrub;do ceph osd set $i;done
###获取当前ceph的crushmap
ceph osd getcrushmap -o crushmap_compiled_file
###将获取的crushmap转换为普通文本
crushtool -d crushmap_compiled_file -o crushmap_decompiled_file
###编辑普通文本的crushmap file
vim crushmap_decompiled_file
#找到rules下的不同rule,以下是crush map中rules部分:
#######