分布式存储ceph之crush规则配置

分布式存储ceph之crush规则配置

一 命令生成osd树形结构

# 创建数据中心:datacenter0
ceph osd crush add-bucket datacenter0 datacenter

# 创建机房:room0 
ceph osd crush add-bucket room0 room

# 创建机架:rack0、rack1、rack2
ceph osd crush add-bucket rack0 rack
ceph osd crush add-bucket rack1 rack
ceph osd crush add-bucket rack2 rack

# 把机房room0移动到数据中心datacenter0下
ceph osd crush move room0 datacenter=datacenter0

# 把机架rack0、rack1、rack2移动到机房room0下
ceph osd crush move rack0 room=room0
ceph osd crush move rack1 room=room0
ceph osd crush move rack2 room=room0

# 把主机osd01移动到:datacenter0/room0/rack0下
ceph osd crush move osd01 datacenter=datacenter0 room=room0 rack=rack0

# 把主机osd02移动到:datacenter0/room0/rack1下
ceph osd crush move osd02 datacenter=datacenter0 room=room0 rack=rack1

# 把主机osd03移动到:datacenter0/room0/rack2下
ceph osd crush move osd03 datacenter=datacenter0 room=room0 rack=rack2

查看

[root@admin ~]# ceph osd tree
ID  CLASS WEIGHT  TYPE NAME              STATUS REWEIGHT PRI-AFF 
 -9       0.17537 datacenter datacenter0                         
-10       0.17537     room room0                                 
-11       0.05846         rack rack0                             
 -3       0.05846             host osd01                         
  0   hdd 0.01949                 osd.0      up  1.00000 1.00000 
  1   hdd 0.01949                 osd.1      up  1.00000 1.00000 
  2   hdd 0.01949                 osd.2      up  1.00000 1.00000 
-12       0.05846         rack rack1                             
 -5       0.05846             host osd02                         
  3   hdd 0.01949                 osd.3      up  1.00000 1.00000 
  4   hdd 0.01949                 osd.4      up  1.00000 1.00000 
  5   hdd 0.01949                 osd.5      up  1.00000 1.00000 
-13       0.05846         rack rack2                             
 -7       0.05846             host osd03                         
  6   hdd 0.01949                 osd.6      up  1.00000 1.00000 
  7   hdd 0.01949                 osd.7      up  1.00000 1.00000 
  8   hdd 0.01949                 osd.8      up  1.00000 1.00000 
 -1             0 root default  

二 crushmap信息介绍

我们可以通过命令导出集群当前的crushmap信息

# 把二进制格式的crush map导出到test.bin文件中
ceph osd getcrushmap -o test.bin

# 用 crushtool 工具把 test.bin 里的二进制数据转换成文本形式保存到 test.txt 文档里。
crushtool -d test.bin -o test.txt

crushmap配置中最核心的当属rule了,crush rule决定了三点重要事项:

  • 1、从OSDMap中的哪个节点开始查找
  • 2、使用那个节点作为故障隔离域
  • 3、定位副本的搜索模式(广度优先 or 深度优先)。
# rules
rule egon_ruleset                       #规则集的命名,创建pool时可以指定rule集
{
id 1                                            #rules集的编号,顺序编即可
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                                      #结束

}

总结

pg 选择osd的过程,首先要知道在rules中 指明从osdmap中哪个节点开始查找,入口点默认为default也就是root节点,
然后隔离域为host节点(也就是同一个host下面不能选择两个子节点)。由default到3个host的选择过程,
这里由default根据节点的bucket类型选择下一个子节点,由子节点再根据本身的类型继续选择,直到选择到host,然后在host下选择一个osd。

三 修改 crushmap 信息

联系管理员微信tutu19192010,注册账号

上一篇
下一篇
Copyright © 2022 Egon的技术星球 egonlin.com 版权所有 帮助IT小伙伴学到真正的技术