ceph若干关键问题
1. ceph群集里pg存在的意义?
由于PG和OSD的数量都比较有限,记录每个OSD承载了哪些PG可行,而且变化不频繁,开销小。 在OSD X故障后,很容易获得OSD X承载的PG列表,并计算出各个PG的另外两个副本在哪个OSD。而每个PG下面的对象,都按照PG做了聚集(称为collection,每个PG对应一个目录或者共用k/v存储的prefix),很容易获得对象列表。有了这些信息,才具备了故障处理的可行性。PG是一种间址,PG的数量有限,记录PG跟OSD间的映射关系可行,而记录object到OSD之间的映射因为数量巨大而实际不可行或效率太低。从用途来说,搞个映射本身不是目的,让故障或者负载均衡变得可操作是目的;
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
ceph实现了两种了字符串hash,
一种是Linux dcache采用的hash算法,比较简洁;
另一种是RJenkins hash 算法,根据object name计算hash 采用的Rjenkins hash 算法。
计算x的过程:
1.对象name进行hash算出一个uint的值ps;
2.ps与pgp_number进行mod后得到余数b;
3.b于pool id进行hash,得到一个值,即X,作为do_crush_rule()的入参;
2. weight和reweight
ceph osd crush reweight” 设置了OSD的权重
weight :这个重量为任意值(通常是磁盘的TB大小,1TB设置为1),并且控制系统尝试分配到OSD的数据量。
reweight :reweight将覆盖了weight量。这个值在0到1的范围,并强制CRUSH重新分配数据。它不改变buckets 的权重,并且是CRUSH不正常的情况下的纠正措施。(例如,如果你的OSD中的一个是在90%以上,其余为50%,可以减少权重,进行补偿。)

更多精彩