Ceph----CRUSH算法

CRUSH算法

一、Cluster Map

在这里插入图片描述

在开始之前,需要先对Ceph的存储结构有一定的了解,最终所有的数据都是存放到叶子节点也就是osd上的,除开叶子节点外的所有节点都是bucket节点,bucket都是逻辑上的结构,比如数据中心,room,机架等等。

二、straw算法

除了存储结构外,还需要了解其中item的选择算法。我理解的意思就是在bucket的下一层上选择一个节点。其目标就是希望在增加或者删除设备时能够较少的迁移数据(比如只涉及添加和删除数据的设备而不影响其他设备)。差不多有四类。
在这里插入图片描述

其他都比较好理解,我们就只介绍straw算法

straw1.0
//选择item算法
max_x = -1
max_item = -1
for each item:
	x = hash(input, r)
	x = x * item_straw
	if x > max_x:
		max_x = x
		max_item = item
return max_item


//item_straw 计算算法
reverse = rearrange all weights in reverse orderstraw=-1
weight_diff_prev_total=0
for each item:
	item_straw = straw * 0x10000
	weight_diff_prev= (reverse[current_item] - reverse[prev_item])* items_remain
	weight_diff_prev_total += weight_diff_prev
	weight_diff_next = (reverse[next_item] - reverse[current_item]) * items_remain
	scale= weight_diff_prev_total/ (weight_diff_prev_total + weight_diff_next)
	straw *= pow(1 / scale,1 / items_remain)

可以看到在选择item时,只和input(osd id和PG id),r和item_straw有关,r是随机因子都一样(冲突时可以重置,但是在一轮选择中大家都一样),会变得就只有item_straw,但是从item_straw的计算方式来看,其不仅和自己有关也和其他item的权重有关,所以这就导致在添加一个设备时,其他item的item_straw也会变化,导致其他item之间的数据也有可能互相迁移。(只希望迁移都和新加入的item有关),所以这就引出了straw2.0算法。

straw2.0
max_x= -1
max_item=-1
for each item:
	x = hash(input,r)
	x= In(x /65536) / weight
	if x > max_x:
		maX_X = X
		max_item= item
return max item

现在选出的item只和input(osd id和PG id),r和weigh有关,这个weight只和本item相关不会影响到其他item。 对于每个item因为输入的osd id不同,所以hash值也不同,但是因为hash(input,r)是一个0~65535之间的数所以 In(x /65536)<0,所以weight越大他被选中的概率就越高。(weight一般是根据磁盘容量来选择的),根据该策略每次添加一个OSD也会分配一些PG给新的OSD。

3.CRUSH算法(虽然使用了hash但是因为输入一样输出也是一样,所以客户端可以使用PG id直接得到其OSD存放位置与其通信

在开始之前我们需要先知道Ceph的文件存储过程,Ceph会将一个文件A分为大小默认为4M的object(且有一个唯一编号文件名+序号),通过hash(object id) & mask(通常为osd的数量减一)得到PG id,最后通过CRUSH(PG id) --> (osd1,osd2,osd3) 将该PG存储到这三个osd中,其中一个为primary,剩下两个为副本。

在进行CRUSH(PG id) --> (osd1,osd2,osd3)时,它通过不断地迭代找到适合数量的osd,与item的权重以及起始的bucket还有指定的placement rules有关,straw2算法使用在 (在当前开始查找的bucket下选择一个item)这一步。

冲突:选择的item,已经在选择集合里面了

过载:选择的item已经放不下了

在这里插入图片描述

4.过载测试

过载原因:

  • 集群规模较小,集群整体容量有限,导致集PG总数有限,亦即CRUSH输入的样本容量不够。
  • CRUSH本身的缺陷–CRUSH的基本选择算法中,以straw2为例每次选择都是计算单个条目被选中的独立概率,但是 CRUSH 所要求的副本策略使得针对同一个输人、多个副本之间的选择变成了计算条件概率(我们需要保证副本位于不同容灾域中的OSD之上)所以从原理上 CRUSH就无法处理好多副本模式下的副本均匀分布问题。

为了使得数据的分布更加均匀,Ceph还需要对CRUSH算法计算结果进行人工调整,引入了reweight。reweight的值越大,通过测试的概率越高,可以通过设置OSD的reweight值来手动调整数据的分布。

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值