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。
对象映射图:
通过HASH取模后计算,前3个对象分布在PG1上,后两个对象分布在PG2上;PG1通过CRUSH算法,计算出PG1分布在OSD1、OSD3上;PG2通过CRUSH算法分布在OSD2和OSD4上。
本文出自 “無詺IT小站” 博客,谢绝转载!
原文地址:http://opencloud.blog.51cto.com/1041438/1951111