Pool

  Pool是一个抽象的存储池,它规定了数据冗余的类型以及对应的副本分布策略。目前实现了两种Pool类型:

Replicated类型和Erasure Code类型。一个Pool由多个PG构成

对象映射过程

  对象映射过程指的是查找对象在集群中分布的位置信息,其过程分为两步:

A、对象到PG的映射。这个过程是静态HASH映射(加入PG Split后实际变成了动态HASH映射方式),通过Object_id计算出HASH值,

用该Pool的PG的总数量PG_Num对HASH值取模,就可以获得该对象所在的PG的ID号,其算法公式:

PG_id=Hash(Object_id)% PG_Num    
B、PG到OSD列表映射。指PG上对象的副本如何分布在OSD上。使用Ceph自己的CRUSH算法来实现。由PG映射到数据存储的实际单元OSD中,将PG_id作为算法的输入,获得包含N个OSD的集合,集合中第一个OSD被作为主OSD,其他的OSD则依次作为从OSD。N为该PG所在Pool下的副本数,在生产环境中N一般为3。

对象映射图:

ceph学习笔记之五 Pool与映射过程_第1张图片

  通过HASH取模后计算,前3个对象分布在PG1上,后两个对象分布在PG2上;PG1通过CRUSH算法,计算出PG1分布在OSD1、OSD3上;PG2通过CRUSH算法分布在OSD2和OSD4上。