Ceph入门到精通-CrushMap算法概述

下面是伪代码object到osd的伪代码

locator =object_name

obj_hash =hash(locator)

pg =obj_hash %num_pg

OSDs_for_pg =crush(pg) # returns a list of OSDs

primary =osds_for_pg[0]

replicas =osds_for_pg[1:]

defcrush(pg):

all_osds=['osd.0','osd.1','osd.2',...]

result=[]

# size is the number of copies; primary+replicas

whilelen(result)<size:

r=hash(pg)

chosen=all_osds[r%len(all_osds)]

ifchoseninresult:

# OSD can be picked only once

continue

result.append(chosen)

returnresult

CRUSH READ

对于Ceph 集群的一次读写操作,客户端首先联系Ceph 的momtor 并获取一个集群

map 副本。集群map 帮助客户端获取Ceph 集群的状态和配置信息。使用对象和池名IID将数据转换为对象。然后将对象和PG ( placement groups ,归置组)数一起经过散列来生成其在Ceph 池巾最终存放的那一个PG 。然后前面计算好的PG 经过CRUSH 查找来确定存储或获取数据所需的主OSO 的位置计算完准确的OSD 10 之后,客户端直接联系这个OSO 来存储数据。所有这些计算操作都由客户端来执行,因此它不会影响集群的性能。

一旦数据被写入主OSO ,主OSO 所在节点将执行CRUSH 查找操作并计算辅助归置组和lOSD 的位置来实现数据复制,进而实现高可用性。参考下面的例子来了解CRUSH 查找和对象王IJ OSO 的映射。

首先,基于池10 将对象名称和集群PG 数应用散列函数可以得到一个PG 10 。接下来,

针对这个PG lD执行CRUSH 查找得到主OSO 和辅助OSO ,最后写数据。

CRUSH 层级结构

CRUSH 是完全了解所有基础设施并支持用户自定义配置的,它维护你所有基础设施组件的一个嵌套层次结构。CRUSH 设备列表通常包括磁盘、节点、机架( rack) 、行( row) 、开关、电源电路、房间、数据中心等。这些组件称为故障域或CRUSH bucketo CRUSH map包含一系列可用bucket ,这些bucket 表明了设备的具体物理位置。它还包拆一系列的规则告诉CRUSH 如何为不同的Ceph 池复制数据。从下图可以看到CRUSH 是如何看待你的基础设施的。

CRUSH WEIGHTS

CRUSH算法为每个设备分配一个权重值,其目标是逼近I/O请求的均匀概率分布。作为最佳实践,我们建议使用相同类型和大小的设备创建池,并分配相同的相对权重。由于这并不总是实用的,您可以合并不同大小的设备,并使用相对权重,以便Ceph将更多的数据分配给较大的驱动器,而将更少的数据分配给较小的驱动器。

CRUSH RECOVERY

在故障域内任何组件发生故障之后,在Ceph 将该OSD 标记为down 和out 并初始化恢

复操作前,默认情况下Ceph 会等待300 秒。这个值可以在Ceph 集群的配置文件中通过参数mon osd down out interval 进行修改。在恢复操作期间,Ceph 开始重新组织发生故障的节点上受影响的数据。CRUSH 会复制数据到多个磁盘,这些复制的数据在恢复的时候使用。在恢复期间CRUSH 试图移动尽量少的数据来构建一个新的集群布局,这样即使一些组件出现故障也能确保Ceph 的容错性。

当一个新主机或磁盘添加到Ceph 集群中时,CRUSH 开始执行再平衡操作,在这个过程中,CRUSH 从现有的主机/磁盘上移动数据到新的主机/磁盘。再平衡保证所有磁盘

能闯匀使用,以此提升集群性能和保持集群健康。例如,如果一个Ceph 集群包含2000 个OSO ,这时一个新的系统添加20 个新的OSD ,这样就只有1% 的数据会在再平衡期间移动,并且所有现有的OSD 是并行地移动数据,使其迅速完成这个操作。然而,对于利用率高的Ceph 集群,建议先将新添加的OSD的权重设为0 ,再逐渐增加权重到依据磁盘容量确定的更高的权重值。通过这种方式,新的OSD 将减少Ceph 集群再平衡时的负载并避免性能下降。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来AI编程

共鸣===鼓励 打赏您随意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值