首页 > 其他分享 >ceph pg 和 pgp的关系 pg是横向可以重复 pgp 是组合个数

ceph pg 和 pgp的关系 pg是横向可以重复 pgp 是组合个数

时间:2023-05-11 16:46:06浏览次数:50  
标签:ceph PG pgp osd pool pg

ceph创建存储池需要pg数和pgp数的两个参数,在前面我们介绍了ceph的pg,那么pgp和pg有什么关系呢?

PG (Placement Group),pg是一个虚拟的概念,用于存放object,PGP(Placement Group for Placement purpose),相当于是pg存放的一种osd排列组合。举个例子:假设集群有3个osd,即osd1,osd2,osd3,副本数为2,如果pgp=1,那么pg存放的osd的组合就有一种,可能是[osd1,osd2],那么所有的pg主从副本都会存放到osd1和osd2上;如果pgp=2,那么其osd组合可能就两种,可能是[osd1,osd2]和[osd1,osd3],pg的主从副本会落在[osd1,osd2]或者[osd1,osd3]中,和我们数学中的排列组合很像,所以pg是存放对象的归属组是一种虚拟概念,pgp就是pg对应的osd排列组合。一般情况下,存储池的pg和pgp的数量设置相等。

【实践】

上面大概讲了pg和pgp的关系,下面我们通过实际例子来更具体一步说明:

我准备的测试环境是3个节点,每个节点3个osd,首先我们创建以个名为pool_1的存储池,包含6个pg:

[root@node1 ~]# ceph osd pool create pool_1 6 6
pool 'pool_1' created
[root@node1 ~]# ceph osd pool set pool_1 size 2   #设置存储池副本数为2
set pool 2 size to 2
使用ceph pg dump pgs查看pg的分布:因为存储池为双副本,我们可以看到每个pg会分布在两个osd上,整个集群有9个osd,按照排列组合会有很多种,此时pgp=6,就会选择这些组合中的6种组合来供pg存放,我们可以看到最右侧的6中组合均不重复。

[root@node1 ~]#  ceph pg dump pgs |grep active |awk '{print $1,$19}'
2.5 0 [1,2]
2.4 0 [6,0]
2.3 0 [5,2]
2.2 0 [5,6]
2.1 0 [7,8]
2.0 0 [0,6]
 
接下来我们使用ceph自带的bench工具写入数据,来观察pg内的对象有没有移动:

rados -p pool_1 bench 20 write --no-cleanu
再次查询结果如下:第2列为每个pg的对象数,第3列为pg所在的osd,我们可以看到存储创建好了pg设置固定了其osd的分布不会随着对象的增加而改变。

[root@node1 ~]#  ceph pg dump pgs |grep active |awk '{print $1,$19}'
2.5 178 [1,2]
2.4 162 [6,0]
2.3 368 [5,2]
2.2 308 [5,6]
2.1 176 [7,8]
2.0 166 [0,6]
(1) 增加PG数

接下来我们改变下pg数,将pg数扩大到12:

[root@node1 ~]# ceph osd pool set pool_1 pg_num 12
set pool 2 pg_num to 12
再次查看存储池pg分布结果如下:

[root@node1 ~]# ceph pg dump pgs |grep active |awk '{print $1,$2,$19}'
2.b 96 [5,2]
2.a 73 [5,6]
2.0 76 [0,6]
2.1 88 [7,8]
2.2 80 [5,6]
2.9 88 [7,8]
2.3 91 [5,2]
2.4 162 [6,0]
2.5 178 [1,2]
2.6 103 [5,6]
2.7 181 [5,2]
2.8 90 [0,6]
 
通过上面的测试结果我们可以看到,新增加的pg数还是基于pgp=6的排列组合,并没有出现新的排列组合,因为我们当前的存储池的pgp是6,那么双副本2个osd的组合就是6个,因为当前的pg是12,分布只能从6中组合里面选择,所以会有重复的组合。

结论:增加PG会引起PG内的对象进行分裂,也就是说在OSD上新建了PG目录,然后进行部分对象迁移的操作。即PG改变会引起数据迁移。

(2) 增加PGP

我们将PGP从6调整为12:

[root@node1 ~]# ceph osd pool set pool_1 pgp_num 12
set pool 2 pgp_num to 12
 
[root@node1 ~]# ceph pg dump pgs |grep active |awk '{print $1,$2,$19}'
2.b 96 [8,0]
2.a 73 [2,4]
2.0 76 [0,6]
2.1 88 [7,8]
2.2 80 [5,6]
2.9 88 [4,8]
2.3 91 [5,2]
2.4 162 [6,0]
2.5 178 [1,2]
2.6 155 [8,4]
2.7 181 [1,2]
2.8 90 [0,7]
可以看到pg内的对象数并没有发生改变,而pg所在的osd的对应关系发生了改变,可以看到最初pg=6 pgp=6的时候前6个pg的分布并没有发生变化,变化的都是后面增加的pg,也就是将重复的pg分布进行新分布,这里并不是随机打散,而是尽量做小改动的重新分布,这就是所谓的一致性哈希原理。

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

【总结】

1. PG是指定存储池存储对象的归属组有多少个,PGP是存储池PG的OSD分布组合个数

2. PG的增加会引起PG内的数据进行迁移,迁移到不同的OSD上新生成的PG中

3. PGP的增加会引起部分PG的分布变化,但是不会引起PG内对象的变动。

标签:ceph,PG,pgp,osd,pool,pg
From: https://www.cnblogs.com/gaoyuechen/p/17391527.html

相关文章

  • PostgreSQL如何查询IO消耗最高的SQL及优化,pg_stat_statements插件安装及使用
    PostgreSQL如何查询IO消耗最高的SQL及优化,pg_stat_statements一、安装pg_stat_statements插件二、加载pg_stat_statements模块三、配置pg_stat_statements采样参数四、创建pg_stat_statementsextension五、分析SQL查询哪些sql语句执行效率慢:重置统计信息普通用户需执......
  • 在Linux 系统中如何复制当前目录和子目录中的 .jpg 文件到当前位置
    在Linux系统中,你可以使用find命令来查找当前目录和子目录中的.mp4和.jpg文件,然后使用cp命令将它们复制到当前位置。下面是一个示例命令:find.-typef\(-name"*.mp4"-o-name"*.jpg"\)-execcp{}.\;这个命令使用了find命令来查找文件。find.表示在当前......
  • 照片格式如何转换jpg?照片格式转换软件分享!​
    照片格式如何转换jpg?照片格式转换为JPEG格式的主要原因是JPEG格式具有较高的压缩比和广泛的应用领域,而且在日常使用中,很多设备和应用程序只支持JPEG格式的照片,那么很多小伙伴想进行一个转换,却不知道该使用什么软件进行操作,下面感兴趣的小伙伴快跟随小编一起来看看吧!选择:AI美颜证件......
  • DSP+ARM+FPGA开发板 板载 双网口/2路RS485/2路RS232/ADC/DAC/CAN
    一、开发套件简介 XQ138AS-EVM是基于XQ138F核心板(OMAPL138+XilinxFPGA)开发的DSP+ARM+FPGA三核评估套件,用户可以采用该开发套件进行项目前期的验证和评估,也可以直接用来开发自己的产品。Ø 底板资源丰富,集成了SATA、SD卡、USBOTG、USBHOST、UART、双网络(1个千兆、1个百兆)、2......
  • struts2 jpg文件上传失败 Content-Type not allowed 解决方案
    org.apache.struts2.interceptor.FileUploadInterceptor-Content-Typenotallowed:upload"upload__75549ca5_1239ddc5ce6__8000_00000161.tmp"image/pjpeg原有配置:用ext+struts2上传时一直显示进度条不消失:Java代码<actionname="xxxAction"cla......
  • 使用Actor-Critic的DDPG强化学习算法控制双关节机械臂
    在本文中,我们将介绍在Reacher环境中训练智能代理控制双关节机械臂,这是一种使用UnityML-Agents工具包开发的基于Unity的模拟程序。我们的目标是高精度的到达目标位置,所以这里我们可以使用专为连续状态和动作空间设计的最先进的DeepDeterministicPolicyGradient(DDPG)......
  • pg_enterprise_views偶然发现的PG神仙插件
    一直从事数据库相关的工作,对于PG而言最大的问题其实是在运维管理方面,其缺乏有效且直观成体系的系统表,苦觅良久,今日在PG官网中发现了一款新收录的免费插件,其提供了数十张系统表,内容涵盖了从操作系统到数据库的负载指标、等待事件、会话、客户端、SQL、SQL执行计划、超时锁、长......
  • Burpgpt环境搭建
    进入https://github.com/aress31/burpgpt 下载Burpgpt源码,并按照要求配置  1、安装gradle和JDK11 gradlev7.4.2下载地址为:https://gradle.org/next-steps/?version=7.4.2&format=all解压并配置 创建文件夹:mkdir/opt/gradle/解压:unzip-dgradle-7.4.2-all.zip......
  • PGXC_CLASS系统表
    PGXC_CLASS系统表存储每张表的复制或分布信息。PGXC_CLASS系统表仅在GBase8c分布式场景下有具体含义。名称类型描述pcrelidoid表的OID。pclocatortype“char”定位器类型。H:hashG:RangeL:ListM:ModuloN:RoundRobinR:Replicationpchashalgorithmsmallint使用哈希算......
  • 用C#将多个jpg合成一个pdf
    nuget安装iTextSharp:staticvoidMergePDF(stringpicPath,stringpdfPath){string[]picFileNames=Directory.GetFiles(picPath,"*");List<string>fileNames=picFileNames.ToList();fileNames.Sort((l,......