http://www.zphj1987.com/2016/10/19/Ceph%E4%B8%ADPG%E5%92%8CPGP%E7%9A%84%E5%8C%BA%E5%88%AB/

一、前言

首先来一段英文关于PG和PGP区别的解释:

PG = Placement Group
PGP = Placement Group for Placement purpose

pg_num = number of placement groups mapped to an OSD

When pg_num is increased for any pool, every PG of this pool splits into half, but they all remain mapped to their parent OSD.

Until this time, Ceph does not start rebalancing. Now, when you increase the pgp_num value for the same pool, PGs start to migrate from the parent to some other OSD, and cluster rebalancing starts. This is how PGP plays an important role.
By Karan Singh

以上是来自邮件列表的 Karan Singh 的PG和PGP的相关解释,他也是 Learning Ceph 和 Ceph Cookbook 的作者,以上的解释没有问题,我们来看下具体在集群里面具体作用

二、实践

环境准备,因为是测试环境,我只准备了两台机器,每台机器4个OSD,所以做了一些参数的设置,让数据尽量散列

osd_crush_chooseleaf_type = 0

以上为修改的参数,这个是让我的环境故障域为OSD分组的

创建测试需要的存储池
我们初始情况只创建一个名为testpool包含6个PG的存储池

[root@lab8106 ceph]# ceph osd pool create testpool 6 6
pool 'testpool' created

我们看一下默认创建完了后的PG分布情况

[root@lab8106 ceph]# ceph pg dump pgs|grep ^1|awk '{print $1,$2,$15}'
dumped pgs in format plain
1.1 0 [3,6,0]
1.0 0 [7,0,6]
1.3 0 [4,1,2]
1.2 0 [7,4,1]
1.5 0 [4,6,3]
1.4 0 [3,0,4]

我们写入一些对象,因为我们关心的不仅是pg的变动,同样关心PG内对象有没有移动,所以需要准备一些测试数据,这个调用原生rados接口写最方便

rados -p testpool bench 20 write --no-cleanup

我们再来查询一次

[root@lab8106 ceph]# ceph pg dump pgs|grep ^1|awk '{print $1,$2,$15}'
dumped pgs in format plain
1.1 75 [3,6,0]
1.0 83 [7,0,6]
1.3 144 [4,1,2]
1.2 146 [7,4,1]
1.5 86 [4,6,3]
1.4 80 [3,0,4]

可以看到写入了一些数据,其中的第二列为这个PG当中的对象的数目,第三列为PG所在的OSD

增加PG测试

我们来扩大PG再看看

[root@lab8106 ceph]# ceph osd pool set testpool pg_num 12
set pool 1 pg_num to 12

再次查询

[root@lab8106 ceph]# ceph pg dump pgs|grep ^1|awk '{print $1,$2,$15}'
dumped pgs in format plain
1.1 37 [3,6,0]
1.9 38 [3,6,0]
1.0 41 [7,0,6]
1.8 42 [7,0,6]
1.3 48 [4,1,2]
1.b 48 [4,1,2]
1.7 48 [4,1,2]
1.2 48 [7,4,1]
1.6 49 [7,4,1]
1.a 49 [7,4,1]
1.5 86 [4,6,3]
1.4 80 [3,0,4]

可以看到上面新加上的PG的分布还是基于老的分布组合,并没有出现新的OSD组合,因为我们当前的设置是pgp为6,那么三个OSD的组合的个数就是6个,因为当前为12个pg,分布只能从6种组合里面挑选,所以会有重复的组合

根据上面的分布情况,可以确定的是,增加PG操作会引起PG内部对象分裂,分裂的份数是根据新增PG组合重复情况来的,比如上面的情况

  • 1.1的对象分成了两份[3,6,0]
  • 1.3的对象分成了三份[4,1,2]
  • 1.4的对象没有拆分[3,0,4]

结论:增加PG会引起PG内的对象分裂,也就是在OSD上创建了新的PG目录,然后进行部分对象的move的操作

增加PGP测试

我们将原来的PGP从6调整到12

[root@lab8106 ceph]# ceph osd pool set testpool pgp_num 12
[root@lab8106 ceph]# ceph pg dump pgs|grep ^1|awk '{print $1,$2,$15}'
dumped pgs in format plain
1.a 49 [1,2,6]
1.b 48 [1,6,2]
1.1 37 [3,6,0]
1.0 41 [7,0,6]
1.3 48 [4,1,2]
1.2 48 [7,4,1]
1.5 86 [4,6,3]
1.4 80 [3,0,4]
1.7 48 [1,6,0]
1.6 49 [3,6,7]
1.9 38 [1,4,2]
1.8 42 [1,2,3]

可以看到PG里面的对象并没有发生变化,而PG所在的对应关系发生了变化
我们看下与调整PGP前的对比

*1.1 37 [3,6,0]          1.1 37 [3,6,0]*
1.9 38 [3,6,0] 1.9 38 [1,4,2]
*1.0 41 [7,0,6] 1.0 41 [7,0,6]*
1.8 42 [7,0,6] 1.8 42 [1,2,3]
*1.3 48 [4,1,2] 1.3 48 [4,1,2]*
1.b 48 [4,1,2] 1.b 48 [1,6,2]
1.7 48 [4,1,2] 1.7 48 [1,6,0]
*1.2 48 [7,4,1] 1.2 48 [7,4,1]*
1.6 49 [7,4,1] 1.6 49 [3,6,7]
1.a 49 [7,4,1] 1.a 49 [1,2,6]
*1.5 86 [4,6,3] 1.5 86 [4,6,3]*
*1.4 80 [3,0,4] 1.4 80 [3,0,4]*

可以看到其中最原始的6个PG的分布并没有变化(标注了*号),变化的是后增加的PG,也就是将重复的PG分布进行新分布,这里并不是随机完全打散,而是根据需要去进行重分布

结论:调整PGP不会引起PG内的对象的分裂,但是会引起PG的分布的变动

三、总结

  • PG是指定存储池存储对象的目录有多少个,PGP是存储池PG的OSD分布组合个数
  • PG的增加会引起PG内的数据进行分裂,分裂到相同的OSD上新生成的PG当中
  • PGP的增加会引起部分PG的分布进行变化,但是不会引起PG内对象的变动

Ceph中PG和PGP的区别的更多相关文章

  1. ceph中pool的管理

    1.创建pool 创建ceph pool的命令如下,它的参数包括pool名字.PG和PGP的数量. 若少于5个OSD, 设置pg_num为128. 5~10个OSD,设置pg_num为512. 10~ ...

  2. Ceph之PG数调整

    1. PG介绍 PG, Placement Groups.CRUSH先将数据分解成一组对象,然后根据对象名称.复制级别和系统中的PG数等信息执行散列操作,再将结果生成PG ID.可以将PG看做一个逻辑 ...

  3. Crush 算法以及PG和PGP调整经验

    PG和PGP调整经验调整前准备为了降低对业务的影响,需要调整以下参数ceph tell osd.* injectargs ‘–osd-max-backfills 1’ceph tell osd.* i ...

  4. Ceph中的容量计算与管理

    转自:https://www.ustack.com/blog/ceph%ef%bc%8drongliang/ 在部署完Ceph集群之后,一般地我们可以通过Ceph df这个命令来查看集群的容量状态,但 ...

  5. 调整ceph的pg数(pg_num, pgp_num)

    https://www.jianshu.com/p/ae96ee24ef6c 调整ceph的pg数 PG全称是placement groups,它是ceph的逻辑存储单元.在数据存储到cesh时,先打 ...

  6. 分布式存储Ceph之PG状态详解

    https://www.jianshu.com/p/36c2d5682d87 1. PG介绍 继上次分享的<Ceph介绍及原理架构分享>,这次主要来分享Ceph中的PG各种状态详解,PG是 ...

  7. Ceph中的Copyset概念和使用方法

    前言 copyset运用好能带来什么好处 降低故障情况下的数据丢失概率(增加可用性) 降低资源占用,从而降低负载 copyset的概念 首先我们要理解copyset的概念,用通俗的话说就是,包含一个数 ...

  8. 【转】为什么我们都理解错了HTTP中GET与POST的区别

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二. 最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数. 你可能自己 ...

  9. Visual Studio 中 Build 和 Rebuild 的区别

    因为之前写的程序比较小,编译起来比较快,所以一直都没有太在意 Build 和 Rebuild 之间的区别,后来发现两个还是有很大不同. Build 只针对在上次编译之后更改过的文件进行编译,在项目比较 ...

随机推荐

  1. Toposort(拓扑排序)dfs递归模板

    最近刷了几题拓扑排序的题,记录一下拓扑排序 在有向图中,并且按照一定的规则(题目所给的规则)排序.如果图中出现了有向环的话就无法排序了. int gap[maxn][maxn];//记录下有向边 in ...

  2. CSS-使整个页面上的全部元素可编辑

    # [在线预览](https://jsfiddle.net/1010543618/6zu1gush/) ## 方法一 - 使用 html 的 contenteditable 属性: [HTML 5 全 ...

  3. Oracle -操作数据库

    删除数据: delete:用delete删除记录,Oracle系统会产生回滚记录,所以这种操作可以使用ROLLBACK来撤销 truncate:删除数据时,不会产生回滚记录.所以执行速度相对较快些 可 ...

  4. DT时代,如何成为十字复合型数据分析师

    DT时代,如何成为十字复合型数据分析师 当前社会正从IT到DT智能时代,传统行业嫁接互联网,产生的是加法效应:大数据创新驱动,产生的是乘法效应,价值呈指数递增.DT时代拼的是人才和创新价值的能力,拼的 ...

  5. Maximum of lines in a DataBand

    Hello! I have a problem.I have a DataBand, but I need it to grow only up to 14 lines. If it is beyon ...

  6. 详解Linux运维工具:运维流程管理、运维发布变更、运维监控告警

     概述 应用上线后,运维工作才刚开始,具体工作可能包括:升级版本上线工作.服务监控.应用状态统计.日常服务状态巡检.突发故障处理.服务日常变更调整.集群管理.服务性能评估优化.数据库管理优化.随着应用 ...

  7. 美团2018年CodeM大赛-资格赛

    https://www.nowcoder.com/acm/contest/138#question A.下单 水题…… B.可乐 题意:求期望 代码: #include<iostream> ...

  8. java虚拟机规范(se8)——class文件格式(四)

    4.7 属性 属性用于class文件格式中的ClassFile,field_info,method_info和Code_attribute结构. 所有的属性都是下面的格式: attribute_inf ...

  9. rpm相关

    rpm命令是RPM软件包的管理工具.rpm原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎.逐渐受到其他发行版的采用.RPM ...

  10. 安装gmpy2

    本来只想做个RSA的题,结果环境就搭了好久 首先想用 pip install gmpy2 发现缺东西,要安装gmp,mpfr,mpc 安装: mkdir -p $HOME/src mkdir -p $ ...