Ceph 知识摘录(Crush算法、PG/PGP)

Crush算法
1、Crush的目的
      优化分配数据,高效的重组数据,灵活的约束对象副本放置,硬件故障时候最大化保证数据安全

2、流程
        Ceph 架构中,Ceph客户端是直接读写存放在OSD上的RADOS Object,因此,Ceph需要走完(Pool, Object) → (Pool, PG) → OSD set → OSD/Disk 完整的链路,才能让Ceph client知道目标数据 object的具体位置在哪里。
        数据写入时,文件被切分成object,object先映射到PG,再由PG映射到OSD set。每个pool有多个PG,每个object通过计算hash值并取模得到它所对应的PG。PG再映射到一组OSD(OSD个数由pool的副本数决定)。
       PG到OSD的映射的过程算法叫做Crush算法,这个算法是一个伪随机的过程,他可以从所有的OSD中,随机性选择一个OSD集合,但是同一个PG每次随机选择的结果是不变的,也就是映射的OSD集合是固定的。
       OSDMap管理当前Ceph中所有的OSD,OSDMap规定了Crush算法的一个范围,在这个范围中选择OSD结合。那么影响Crush算法结果的有两种因素,一个就是OSDMap的结构,另外一个就是Crush rule。

3、Crush rule介绍
Crush rule主要有3个重点:
  a.从OSDMap中的哪个节点开始查找,
  b.使用那个节点作为故障隔离域,
  c.定位副本的搜索模式(广度优先 or 深度优先)。

# ruleset

rule replicated_ruleset                             #规则集的命名,创建pool时可以指定rule集
{
  ruleset 0                                            #rules集的编号,顺序编即可
  type replicated                                  #定义pool类型为replicated(还有esurecode模式)
  min_size 1                                        #pool中最小指定的副本数量不能小1
  max_size 10                                     #pool中最大指定的副本数量不能大于10
  step take default                               #定义pg查找副本的入口点
  step chooseleaf firstn 0 type host      #选叶子节点、深度优先、隔离host
  step emit                                           #结束
}

PG选择osd的过程:首先要知道在rules中指明从OSDMap中哪个节点开始查找,入口点默认为default也就是root节点,然后隔离域为host节点(也就是同一个host下面不能选择两个子节点)。由default到3个host的选择过程,这里由default根据节点的bucket类型选择下一个子节点,由子节点再根据本身的类型继续选择,知道选择到host,然后在host下选择一个osd。

PG与PGP
       Ceph通过Crush算法,将若干个object映射到PG上,形成一个object与PG的逻辑集合,并以此作为object与OSD的中间层,将PG根据所在POOL的副本数,复制到多个OSD上。PG的用途是将某些东西进行逻辑归组,从而达到统一管理,提升效率的作用。  

       PG是指定存储池存储对象的目录有多少个,PGP是存储池PG的OSD分布组合个数

总结三点介绍
1、 PGP起到对PG进行归置的作用。
2、 PGP的取值应该与PG相同,在PG的值增大的同时,也要增大PGP的值以保持二者的值相同。
3、 当一个POOL的PG增大后,Ceph并不会开始进行rebalancing,只有在PGP的值增大后,PG才会开始迁移至其他的OSD上,并且开始rebalancing。

结论

  PG增加后,Ceph不会从原来的各个PG随机抽取部分数据到新的PG中,而是分裂某个PG,从而产生新的PG。原有的6个PG只有2个分裂,其它4个保持对象不变,这种方式可以有效的减少大量数据迁移导致的性能问题。(pg到osd的映射关系没有发生变化)

当PGP变化时,Ceph才会开始真正的数据重平衡。(调整PGP不会引起PG内的对象的分裂,但是会引起PG的分布的变动,调整新增pg到osd的映射,保障数据在osd层面的均匀分布)

原文地址:https://www.cnblogs.com/weichao01/p/9532794.html

时间: 2024-08-28 22:58:59

Ceph 知识摘录(Crush算法、PG/PGP)的相关文章

Ceph 知识摘录(内部组件流程)

RADOS可靠.自动.分布式对象存储系统 RADOS作用1.Rados是Ceph集群基础,Ceph存储系统核心,Ceph中一切都是以对象形式存储,Rados就是负责存储这些对象,无需考虑数据啥类型2.确保数据的一致性和可靠性3.负责数据的复制.故障检测和恢复4.负责数据在集群节点之间的迁移和再均衡5.Ceph所有优秀特性都是rados提供的,如:分布式对象存储.高可用性.高可靠性.没有单点故障.自我修复.自我管理6.Rados就是ceph集群中的大脑,负责决策.调度等工作 OSD对象存储设备 O

Ceph 知识摘录(块存储操作-1)

Ceph块存储操作 1.创建Ceph块设备 #rbd create rbd1 --size 1024 -p compute 2.列出创建的块image #rbd ls -p compute 3.检查块image的细节 #rbd --image rbd1 info -p compute 4.映射块设备到client #rbd feature disable rbd1 -p compute exclusive-lock object-map fast-diff deep-flatten #rbd m

CEPH CRUSH 算法源码分析 原文CEPH CRUSH algorithm source code analysis

原文地址 CEPH CRUSH algorithm source code analysis http://www.shalandis.com/original/2016/05/19/CEPH-CRUSH-algorithm-source-code-analysis/ 文章比较深入的写了CRUSH算法的原理和过程.通过调试深入的介绍了CRUSH计算的过程.文章中添加了些内容. 写在前面 读本文前,你需要对ceph的基本操作,pool和CRUSH map非常熟悉.并且较深入的读过源码. 分析的方法

Ceph源码解析:CRUSH算法

1.简介 随着大规模分布式存储系统(PB级的数据和成百上千台存储设备)的出现.这些系统必须平衡的分布数据和负载(提高资源利用率),最大化系统的性能,并要处理系统的扩展和硬件失效.ceph设计了CRUSH(一个可扩展的伪随机数据分布算法),用在分布式对象存储系统上,可以有效映射数据对象到存储设备上(不需要中心设备).因为大型系统的结构式动态变化的,CRUSH能够处理存储设备的添加和移除,并最小化由于存储设备的的添加和移动而导致的数据迁移. 为了保证负载均衡,保证新旧数据混合在一起.但是简单HASH

Ceph之数据分布:CRUSH算法与一致性Hash

转自于:http://www.cnblogs.com/shanno/p/3958298.html?utm_source=tuicool 数据分布是分布式存储系统的一个重要部分,数据分布算法至少要考虑以下三个因素: 1) 故障域隔离.同份数据的不同副本分布在不同的故障域,降低数据损坏的风险: 2) 负载均衡.数据能够均匀地分布在磁盘容量不等的存储节点,避免部分节点空闲部分节点超载,从而影响系统性能: 3) 控制节点加入离开时引起的数据迁移量.当节点离开时,最优的数据迁移是只有离线节点上的数据被迁移

ceph之crush算法示例

[email protected]:~# ceph osd tree # id    weight  type name       up/down reweight -1      0.05997 root default -2      0.02998         host osd0 1       0.009995                        osd.1   up      1 2       0.009995                        osd.2

一致性hash与CRUSH算法总结

相同之处:都解决了数据缓存系统中数据如何存储与路由. 不同之处:区别在于虚拟节点和物理节点的映射办法不同 由于一般的哈希函数返回一个int(32bit)型的hashCode.因此,可以将该哈希函数能够返回的hashCode表示成一个范围为0---(2^32)-1 环 数据和节点使用相同的hash函数来保证 把数据和节点映射到相同的hash空间上.这样,按照顺时针方向,数据存放在它所在的顺时针方向上的那个机器上.这就是一致性哈希算法分配数据的方式! 物理节点:  使用ip或者唯一机器标识为key

Ceph源码解析:PG peering

集群中的设备异常(异常OSD的添加删除操作),会导致PG的各个副本间出现数据的不一致现象,这时就需要进行数据的恢复,让所有的副本都达到一致的状态. 一.OSD的故障和处理办法: 1. OSD的故障种类: 故障A:一个正常的OSD 因为所在的设备发生异常,导致OSD不能正常工作,这样OSD超过设定的时间 就会被 out出集群. 故障B: 一个正常的OSD因为所在的设备发生异常,导致OSD不能正常工作,但是在设定的时间内,它又可以正常的工作,这时会添加会集群中. 2. OSD的故障处理: 故障A:O

在ceph中:pool、PG、OSD的关系

原文:http://www.cnblogs.com/me115/p/6366374.html Pool是存储对象的逻辑分区,它规定了数据冗余的类型和对应的副本分布策略:支持两种类型:副本(replicated)和 纠删码( Erasure Code):目前我们公司内部使用的Pool都是副本类型(3副本): PG( placement group)是一个放置策略组,它是对象的集合,该集合里的所有对象都具有相同的放置策略:简单点说就是相同PG内的对象都会放到相同的硬盘上: PG是 ceph的核心概念