[ceph学习-6]crush算法(1)

crush算法类似一致性算法,一致性算法使用了一个散列到服务器平台的散列表,crush可以存在层级结构的服务器上(shelves,racks,rows),并允许用户制定。例如将复制到不同的货架上而不是仅在primary上。

crush(Controoled Replication Under Scalable Hashing)是一种伪随机数据分布算法,它能够在层级结构的存储集群中有效的分布对象的副本。它的参数为object id或object group。id,并返回一组存储设备(用于保存object副本)。Crush需要cluster map(描述存储集群的层级结构)、和副本分布策略(rule).
CRUSH的优点:任何组件都可以独立计算出每个object所在的位置(去中心化).只需要少量的元数据(cluster map),只要当删除添加设备时,这些元数据才需要改变

crush算法是通过对每个设备的权重在存储设备间分发数据,大致是均匀分布的。数据分发是有一个层次化的cluster map 控制的,Cluster Map描述了可用的存储资源,由建立集群映射的一些逻辑元素组成。例如,某个Cluster Map可能描述了一个大型的装置,包含了一排机柜,每个机柜有许多磁盘架,每个磁盘架上有许多存储设备。数据分配策略是有placement Rules定义的。 Placement Rules 指定了从及群众中选中的副本目标的数量,以及放置这些副本的限制条件。例如,某个Placement Rule也许会指定三个镜像副本要被放置在不同的物理机柜上,以免这些副本共享同一条供电线路。

CRUSH算出x到一组OSD集合:
给出一个整型输入x,CRUSH会输出一个有序的、包含n个不相同的存储目标的R向量。

(osd0,osd1,...osdn) = CRUSH(x)

CRUSH使用一个多参数的整形hash函数,参数列表包含x,使得从x到osd集合是完全独立且确定性的,仅仅依赖Cluster Map、Placement RUles和输入参数x。数据分发是伪随机的,输出结果与输入结果或者设备中现象有的对象之间没有明显的相关性。
CRUSH提供了一个去集中化(集群化)的副本发布方案,包含某对象的共享副本的这些设备也是相对其他对象也是独立的。

发表评论

您的电子邮箱地址不会被公开。