在最初使用ceph的时候就有一个疑问,ceph存储时将对象映射到PG(Placement Groups)中,然后以PG为单位,遵循CRUSH的规则分布到OSD中,那么PGP又是什么?因此决定自己探索一下。

文章目录

  • ceph对象的映射关系架构图
  • 环境介绍
  • 操作验证
    • 1.创建test_pool
    • 2.查看创建之后的PG分布情况
    • 3.写测试数据到test_pool
    • 4.再次查询PG分布情况
    • 5.增大pg_num测试
    • 6.增大pgp_num测试
  • 结论

ceph对象的映射关系架构图

环境介绍

[root@ceph01 my-cluster]# ceph osd tree
ID WEIGHT  TYPE NAME       UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.57088 root default
-2 0.19029     host ceph02                                   0 0.19029         osd.0        up  1.00000          1.00000
-3 0.19029     host ceph03                                   1 0.19029         osd.1        up  1.00000          1.00000
-4 0.19029     host ceph01                                   2 0.19029         osd.2        up  1.00000          1.00000

操作验证

1.创建test_pool

[root@ceph01 my-cluster]# ceph osd pool create test_pool 6 6
pool 'test_pool' created

2.查看创建之后的PG分布情况

使用命令

[root@ceph01 my-cluster]# ceph pg ls-by-pool test_pool | awk '{print $1,$2,$15}'
pg_stat objects up_primary
10.0 0 [2,0]
10.1 0 [0,2]
10.2 0 [1,2]
10.3 0 [0,2]
10.4 0 [1,2]
10.5 0 [1,2]

可以看出test_pool的pg都是以10开头的。然后也可以用其他命令查询PG的分布情况,如下:

[root@ceph01 my-cluster]#  ceph pg dump pgs|grep ^10|awk '{print $1,$2,$15}'
dumped pgs in format plain
10.2 0 [1,2]
10.3 0 [0,2]
10.0 0 [2,0]
10.1 0 [0,2]
10.4 0 [1,2]
10.5 0 [1,2]

3.写测试数据到test_pool

[root@ceph01 my-cluster]# rados -p test_pool bench 20 write --no-cleanup

4.再次查询PG分布情况

[root@ceph01 my-cluster]# ceph pg ls-by-pool test_pool | awk '{print $1,$2,$15}'
pg_stat objects up_primary
10.0 87 [2,0]
10.1 71 [0,2]
10.2 157 [1,2]
10.3 182 [0,2]
10.4 76 [1,2]
10.5 77 [1,2]

可以看见,第二列的对象数目增加了,但是PG的分布并无变化。

5.增大pg_num测试

[root@ceph01 my-cluster]# ceph osd pool set test_pool pg_num 12
set pool 10 pg_num to 12
[root@ceph01 my-cluster]# ceph pg ls-by-pool test_pool | awk '{print $1,$2,$15}'
pg_stat objects up_primary
10.0 43 [2,0]
10.1 35 [0,2]
10.2 52 [1,2]
10.3 60 [0,2]
10.4 76 [1,2]
10.5 77 [1,2]
10.6 53 [1,2]
10.7 61 [0,2]
10.8 44 [2,0]
10.9 36 [0,2]
10.a 52 [1,2]
10.b 61 [0,2]

整理之后,数据我门根据对象数,和副本的分布,我们可以明显的发现分裂的痕迹

10.0 -> 10.0 + 10.8
10.1 -> 10.1 + 10.9
10.2 -> 10.2 + 10.6 + 10.a
10.3 -> 10.3 + 10.7 + 10.b
10.4 -> 10.4
10.5 -> 10.5

也就是说,增大pg_num,原来大的pg会平均分裂成几个小的PG,而原来的PG之间是不会互相迁移数据的。

6.增大pgp_num测试

[root@ceph01 my-cluster]# ceph osd pool set test_pool pgp_num 12
set pool 10 pgp_num to 12
[root@ceph01 my-cluster]# ceph pg ls-by-pool test_pool | awk '{print $1,$2,$15}'
pg_stat objects up_primary
10.0 43 [2,0]
10.1 35 [0,2]
10.2 52 [1,2]
10.3 60 [0,2]
10.4 76 [1,2]
10.5 77 [1,2]
10.6 53 [0,2]
10.7 61 [2,1]
10.8 44 [1,0]
10.9 36 [2,0]
10.a 52 [0,2]
10.b 61 [0,1]

我们乍一看好像没什么变化,但是仔细一看就会发现不同,我们来对比一下

修改前           修改后
10.0 43 [2,0]   10.0 43 [2,0]
10.1 35 [0,2]   10.1 35 [0,2]
10.2 52 [1,2]   10.2 52 [1,2]
10.3 60 [0,2]   10.3 60 [0,2]
10.4 76 [1,2]   10.4 76 [1,2]
10.5 77 [1,2]   10.5 77 [1,2]
10.6 53 [1,2]*   10.6 53 [0,2]*
10.7 61 [0,2]*   10.7 61 [2,1]*
10.8 44 [2,0]*   10.8 44 [1,0]*
10.9 36 [0,2]*   10.9 36 [2,0]*
10.a 52 [1,2]*   10.a 52 [0,2]*
10.b 61 [0,2]*   10.b 61 [0,1]*

我们可以看见,10.6至10.b的分布都已经发生了变化。

结论

从测试结果中,我们可以得出以下结论:

  • pg_num的增加会使原来PG中的对象均匀地分布到新建的PG中,原来的副本分布方式不变
  • pgp_num的增加会使PG的分布方式发生变化,但是PG内的对象并不会变动
  • pgp决定pg分布时的组合方式的变化

另外,附加一段网上的解释供大家参考

PG = Placement Group
PGP = Placement Group for Placement purpose
pg_num = number of placement groups mapped to an OSD
When pgnum 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 pgpnum 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

本文参考了zphj1987的博客:http://www.zphj1987.com/2016/10/19/Ceph中PG和PGP的区别/


ceph中的PG和PGP相关推荐

  1. Ceph中一些PG相关的状态说明和基本概念说明、故障模拟

    Ceph中一些PG相关的状态说明和基本概念说明 最近公司有个Ceph集群出了点问题,于是也参与了修复的过程,过程中最让人头疼的就是一堆不明所以的状态了,所以看了看文档,也找了一些参考, 整理了一下Ce ...

  2. Ceph 中的 PG 状态详解

    1. PG介绍 这次主要来分享Ceph中的PG各种状态详解,PG是最复杂和难于理解的概念之一,PG的复杂如下: 在架构层次上,PG位于RADOS层的中间. a. 往上负责接收和处理来自客户端的请求. ...

  3. ceph PG和PGP调整经验

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

  4. 分布式存储Ceph中的逻辑结构Pool和PG

    Ceph中的逻辑对象有Object.Pool.PG,本文简单介绍相关的概念以及之间的关系,PG状态变化过程等. 1.Ceph集群中的逻辑结构 1.1 Object Object是Ceph的最小存储单元 ...

  5. ceph中pool的管理

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

  6. ceph分布式存储-常见 PG 故障处理

    3. 常见 PG 故障处理 3.1 PG 无法达到 CLEAN 状态 创建一个新集群后,PG 的状态一直处于 active , active + remapped 或 active + degrade ...

  7. 【ceph】ceph集群PG(归置组)存在的意义是什么?

    Ceph 的 RADOS中,引入了 PG 的概念用以更好地管理数据.PG 的引入降低对数量巨大的对象的管理难度. 1.对象数量时刻处于变化中.而PG的数量经过人工规划因而严格可控. 2.PG数量远小于 ...

  8. V-7 Openstack 在ceph中转换镜像格式

    上下文: 在工作中客户要求做一个openstack的镜像,这个操作系统的配置要求非常的高,最小需要8核96GB内存1TB硬盘.普通的系统可以通过分区扩展脚本做一个20GB的镜像然后在云平台上扩展,但是 ...

  9. ceph中使用ceph-objectstore-tool将pg从incomplete标记为complete

    起始原因是集群中部分osd元数据丢失,导致集群部分pg状态一直为incomplete,从而无法恢复为activate+clean 所以同事介绍之前调研得ceph-objectstore-tool工具来 ...

最新文章

  1. crontab shell 每5秒执行_centos 定时任务按秒执行crontab
  2. android里的oneshot模式,android – 使用ONE_SHOT标志等待意图
  3. Linux系统日常管理1
  4. ORG LegacyCell for Mac - MS-20/Polysix音频合成器
  5. 威纶通触摸屏直接与台达变频器进行MODBUS RTU通信的具体方法(图文)
  6. 人工智能无线通信应用的一些论文
  7. win10电脑进入睡眠时间过快,电源选项的设置无效
  8. 全基因组水平分泌蛋白鉴定
  9. mdf导入虚拟主机mysql_MYSQL导入mdf文件
  10. 北京信息科技大学CSDN高校俱乐部举办的首次活动------考研经验交流会
  11. nginx指定目录安装
  12. 8 亿邮件地址泄露,源于邮件验证服务;腾讯推出微信公众号直播工具
  13. Python生成器的throw和close方法
  14. 用户 'sa' 登录失败。原因: 该帐户被禁用。的解决方案
  15. 【RxJava】使用
  16. python模块手册_金字塔python开发手册
  17. 班智达转换为喜马拉雅
  18. 学习linux 11
  19. 【数据结构与算法 10,2021大厂Java开发面试总结+解答
  20. 多体素模式分析(MVPA)和表征相似性分析(RSA)

热门文章

  1. 富可视M310刷机包 MIUIV5 红米开发版 闪光 美化 稳定
  2. oracle 9i 体系结构图
  3. 为什么健身类手机APP会火起来?
  4. 熬丙:让你自制力提升300%的学习方法
  5. Xmake进阶----系统操作详解
  6. 如何选购合适的研发管理软件
  7. 背景与菜单的全局设置(跨Client)
  8. 2019中国洗碗机行业高峰论坛:带给消费者高品质生活
  9. 常用数字电路的逻辑符号
  10. 微信小程序退款流程详解