CEPH数据放置

2019-11-04  本文已影响0人  东京的雨不会淋湿首尔

Pool

Ceph将数据存储在池中,池是用于存储对象的逻辑组。池管理放置组的数量,副本的数量以及池的规则集。要将数据存储在池中,必须具有经过身份验证的用户,该用户对该池具有权限。

简单说Pool 就是PG 的集合, 一个Pool内会有好几个PG (目前ceph default 是8), 一个Pool内有多少个PG会影响资料的分散程度, 所以PG太小不太好, PG太大也没有好处只会消耗更多计算资源[XX]

下面是两个pool, 分别各有3个PG, PG 的ID 前面会带有pool 的ID 当作prefix


image.png

为什么要Pool?

有Pool这个逻辑层会比较好一次管理和设定这么多个PG


image.png

Pool的好处和功能如下:

1.弹性:您可以设置池中对象的副本/副本数。

2.放置组:您可以设置池的放置组数。

  1. CRUSH规则:您可以为您的池创建自定义的CRUSH规则。

4.设置所有权:您可以将用户ID设置为池的所有者。

5.快照:您可以有效地为特定池拍摄快照。

参考:http://docs.ceph.com/docs/hammer/rados/operations/pools/

PG

Ceph将对象映射到放置组(PG)。放置组(PG)是逻辑对象池的碎片或片段,将对象作为一个组放置到OSD中。当Ceph将数据存储在OSD中时,放置组会减少每个对象元数据的数量。大量的放置组(例如,每个OSD为100个)可导致更好的平衡。

http://docs.ceph.com/docs/hammer/rados/operations/placement-groups/

image.png

什么选择PG?

PG 也是一个逻辑层概念, 可以把他想成是一群object 的集合, 加入PG这一层是为了能够更好的分散object 和计算object 位置并且达到系统的扩充性

Ceph 的设计上是去避免单点故障(single point of failure)去影响整个系统, 所以Client 是直接去对OSD 写入object 的, 如果没有PG 这一层的话, 当object 数量达到数以万计的时候要去计算object 的位置会非常困难且消耗资源, 因为这些object 都分别写到不同的OSD 当中

摘要

如何映射?

Ceph 是采用间接mapping 的方法来计算object 该写入的OSD 位置


image.png

当Ceph客户端绑定到Ceph监视器时,它会检索集群图的最新副本。使用群集映射,客户端可以了解群集中的所有监视器,OSD和元数据服务器。但是,它对对象位置一无所知。

步骤

  1. 要将一个object 写入到pool 时可以取得object ID 和pool ID
  2. 对object ID做hash 之后会对应到某一个PG, 此PG的ID就会为[Pool ID].[PG number]
  3. 拿到PG ID 就可以透过CRUSH 演算法和cluster map 去找到此PG所对应到的OSD

Object locations get computed !!! (所有的计算都是在client 端做)

客户端所需的唯一输入是对象ID和池。很简单:Ceph将数据存储在命名池中(例如“ liverpool”)。当客户要存储命名对象(例如“ john”,“ paul”,“ george”,“ ringo”等)时,它将使用对象名称,哈希码和其中的PG数量来计算PG池和池名称。Ceph客户端使用以下步骤来计算PG ID。

例如
客户端输入池ID和对象ID。(例如,pool =“ liverpool”,而object-id =“ john”) Ceph获取对象ID并对其进行哈希处理。 Ceph以PG的数量为模来计算哈希值。(例如58)以获取PG ID。 Ceph在给定池名称的情况下获取池ID(例如“ liverpool” = 4), Ceph将池ID附加到PG ID(例如4.58)之前。*计算对象位置比通过健谈会话执行对象位置查询要快得多。CRUSH算法允许客户端计算应将对象存储在何处,并使客户端可以联系主OSD来存储或检索对象。

image.png
上一篇 下一篇

猜你喜欢

热点阅读