Ceph 对应 Crush 规则案例?

3台机器,其中1台全SSD、一台全SATA、一台全SAS。要求制定crush rule,实现3副本数据分布,写出对应crush规则?需求1:第一个副本落在SSD上,第二个落在SATA上,第三个落在SAS上,最终顺序为1SSD-2SATA-3SAS? 第一个副本落在SSD上,第二个和第三个在SATA和SAS中随机选择,最终的顺序为 1SSD-2...显示全部

3台机器,其中1台全SSD、一台全SATA、一台全SAS。要求制定crush rule,实现3副本数据分布,写出对应crush规则?

需求1:

第一个副本落在SSD上,第二个落在SATA上,第三个落在SAS上,最终顺序为1SSD-2SATA-3SAS?
第一个副本落在SSD上,第二个和第三个在SATA和SAS中随机选择,最终的顺序为 1SSD-2SATA-3SAS or 1SSD-2SAS-3SATA?

3个机柜,6台机器,每台2块SSD,4块SATA。

需求2:

数据副本按机柜进行拆分,确保每个机柜都有一个副本,实现3副本落到3个机柜,写出对应的crushmap分组规则?
所有的机器SSD和SATA按需求1的方式组成一个pool,请写出对应pool的crush rule规则?
收起
参与10

返回zhuqibs的回答

zhuqibszhuqibs软件开发工程师Adidas

CRUSH 图主要有 4 个主要段落

设备 由任意对象存储设备组成,即对应一个 ceph-osd 进程的存储器。 Ceph 配置文件里的每个 OSD 都应该有一个设备。
桶类型: 定义了 CRUSH 分级结构里要用的桶类型( types ),桶由逐级汇聚的存储位置(如行、机柜、机箱、主机等等)及其权重组成。
桶例程: 定义了桶类型后,还必须声明主机的桶类型、以及规划的其它故障域。
规则: 由选择桶的方法组成。

规则格式如下:

rule {

ruleset

type [replicated | raid4 ]

min_size

max_size

step take

step [choose | chooseleaf] [firstn|indep ]

set emit

}

ruleset

Description: 区分一条规则属于某个规则集的手段。给存储池设置规则集后激活。

Purpose: 规则掩码的一个组件。
Type: Integer
Required: Yes
Default: 0

type

Description: 为硬盘(复制的)或 RAID 写一条规则。
Purpose: 规则掩码的一个组件。
Type: String
Required: Yes
Default: replicated
Valid Values: Currently only replicated

min_size

Description: 如果一个归置组副本数小于此数, CRUSH 将不应用此规则。
Type: Integer
Purpose: 规则掩码的一个组件。
Required: Yes
Default: 1

max_size

Description: 如果一个归置组副本数大于此数, CRUSH 将不应用此规则。
Type: Integer
Purpose: 规则掩码的一个组件。
Required: Yes
Default: 10

step take

Description: 选取桶名并迭代到树底。
Purpose: 规则掩码的一个组件。
Required: Yes
Example: step take data

step choose firstn {num} type {bucket-type}

Description: 选取指定类型桶的数量,这个数字通常是存储池的副本数(即 pool size )。
如果 {num} == 0 选择 pool-num-replicas 个桶(所有可用的);
如果 {num} > 0 && < pool-num-replicas 就选择那么多的桶;
如果 {num} < 0 它意为 pool-num-replicas - {num} 。
Purpose: 规则掩码的一个组件。
Prerequisite: 跟在 step take 或 step choose 之后。
Example:

step choose firstn 1 type row

step chooseleaf firstn {num} type {bucket-type}

Description:
选择 {bucket-type} 类型的一堆桶,并从各桶的子树里选择一个叶子节点。集合内桶的数量通常是存储池的副本数(即 pool size )。
如果 {num} == 0 选择 pool-num-replicas 个桶(所有可用的);
如果 {num} > 0 && < pool-num-replicas 就选择那么多的桶;
如果 {num} < 0 它意为 pool-num-replicas - {num} 。
Purpose: 规则掩码的一个组件。 它的使用避免了通过两步来选择一设备。
Prerequisite: Follows step take or step choose.
Example:
step chooseleaf firstn 0 type row
step emit

Description: 输出当前值并清空堆栈。通常用于规则末尾,也适用于相同规则应用到不同树的情况。
Purpose: 规则掩码的一个组件。
Prerequisite: Follows step choose.
Example: step emit

Important: 把规则集编号设置到存储池,才能用一个通用规则集编号激活一或多条规则。

主亲和性:

某一Ceph 客户端读写数据时,总是连接 acting set 里的主 OSD (如 [2, 3, 4] 中, osd.2 是主的)。有时候某个 OSD 与其它的相比并不适合做主 OSD (比如其硬盘慢、或控制器慢),最大化硬件利用率时为防止性能瓶颈(特别是读操作),你可以调整 OSD 的主亲和性,这样 CRUSH 就尽量不把它用作 acting set 里的主 OSD 了。

ceph osd primary-affinity

主亲和性默认为 1 (就是说此 OSD 可作为主 OSD )。此值合法范围为 0-1 ,其中 0 意为此 OSD 不能用作主的, 1 意为 OSD 可用作主的;此权重小于 1 时, CRUSH 选择主 OSD 时选中它的可能性低。

互联网服务 · 2020-04-03
浏览1493
花花世界 邀答

回答者

zhuqibs
软件开发工程师Adidas
擅长领域: 云计算服务器存储

zhuqibs 最近回答过的问题

回答状态

  • 发布时间:2020-04-03
  • 关注会员:2 人
  • 回答浏览:1493
  • X社区推广