ceph PG和PGP区别

文章详细解释了Ceph中PlacementGroup(PG)和PlacementGroupforPlacementPurpose(PGP)的概念,以及它们在对象存储池中的作用。PG数量增加会引发对象分裂,而PGP调整则影响PG的OSD分布,但不涉及对象内部移动。

一、前言

首先来一段英文关于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的存储池

ceph osd pool create testpool 6 6
pool 'testpool' created

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

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

我们再来查询一次

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

2.1 增加PG测试

我们来扩大PG再看看

ceph osd pool set testpool pg_num 12
set pool 1 pg_num to 12

再次查询

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的操作

2.2 增加PGP测试

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

ceph osd pool set testpool pgp_num 12
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内对象的变动

<think>好的,用户现在问的是“ceph_pg_total - ceph_pg_active > 0”,需要解释这个指标的含义以及如何处理。首先,我需要回忆一下Ceph中的PG相关知识。PG是Placement Group,用于分布数据的重要概念。用户提到的这个指标是总PG数减去活跃PG数,如果差值大于0,说明有部分PG不处于活跃状态。 接下来,我得先解释这个指标的基本含义。用户可能是运维人员或者开发人员,遇到了集群健康问题,需要诊断为什么有些PG不活跃。需要明确PG的状态,比如active、peering、recoverying等等。当PG不活跃时,可能影响数据的读写,所以用户需要知道如何处理。 然后,要分析可能的原因。可能的原因包括OSD故障、网络问题、数据不一致需要恢复,或者是新创建的PG还没完全激活。需要逐个解释这些原因,并给出对应的排查步骤。例如,检查OSD状态,查看集群日志,确认网络连通性等等。 用户可能已经检查过ceph health,或者通过监控系统发现了这个指标异常,需要进一步的指导。所以需要给出具体的命令,比如ceph pg stat,ceph pg dump_stuck,以及如何查看特定PG的详细信息。 解决方案部分,需要针对不同原因给出不同的处理方法。如果是OSD下线,可能需要重启服务或更换硬件;如果是数据恢复,需要等待或调整恢复参数;如果是网络问题,需要检查配置连通性。 还需要考虑预防措施,比如监控配置、定期维护、硬件冗余等。用户可能不仅想解决当前问题,还想避免未来再次发生。 需要确保回答清晰,步骤明确,命令正确,并且用中文口语化表达,避免术语过于晦涩。同时,用户可能希望得到直接的解决方案,所以结构要分明,分点列出原因、排查步骤解决方法,便于用户快速执行。 最后,提醒用户如果问题依然存在,需要提供更多日志或输出来进一步诊断。这有助于用户在遇到复杂问题时,知道如何收集必要的信息寻求帮助。</think>你提到的 **`ceph_pg_total - ceph_pg_active > 0`** 是 Ceph 存储集群中的一个重要监控指标,表示当前集群中存在 **非活跃状态的 PG(Placement Group,放置组)**。以下是详细解释及应对方法: --- ### **1. 术语解释** - **PG(Placement Group)**: Ceph 将数据划分为多个 PG,每个 PG 是数据分布的最小逻辑单元,负责将数据映射到具体的 OSD(Object Storage Daemon)。 - **`ceph_pg_total`**:集群中所有 PG 的总数。 - **`ceph_pg_active`**:处于 **`active`** 状态的 PG 数量(即正常提供读写服务的 PG)。 - **指标含义**: `ceph_pg_total - ceph_pg_active > 0` 表示有部分 PG 处于非活跃状态(如 `peering`、`recovering`、`incomplete` 等),可能导致数据暂时不可访问或性能下降。 --- ### **2. 常见原因** #### **(1) OSD 故障或下线** - 某个 OSD 宕机或网络中断,导致 PG 的副本数不足。 - 触发 PG 进入 `peering` 状态(正在协商副本一致性)。 #### **(2) 数据恢复或回填** - 新增/移除 OSD 或调整 CRUSH Map 后,PG 正在执行数据迁移(`backfilling`、`recovering`)。 - 此时 PG 处于临时非活跃状态。 #### **(3) PG 状态异常** - PG 因数据不一致进入 `incomplete` 状态(无法选举出权威副本)。 - 集群配置错误(如 `pg_num` 设置不合理)。 #### **(4) 资源不足** - OSD 负载过高(CPU、磁盘 IO 或网络带宽耗尽),导致 PG 无法及时激活。 --- ### **3. 排查步骤** #### **(1) 查看集群健康状态** ```bash ceph health detail # 检查具体告警信息 ceph pg stat # 查看 PG 统计(active、peering、recovering 数量) ceph pg dump_stuck # 列出“卡住”的 PG(如 inactive 超过阈值) ``` #### **(2) 检查 PG 详细状态** ```bash # 查看所有 PG 的状态分布 ceph pg stat # 检查具体 PG 的状态(替换 <pg-id>) ceph pg <pg-id> query # 显示 PG 的详细状态、OSD 映射事件历史 ``` #### **(3) 关联 OSD 状态** ```bash ceph osd tree # 检查 OSD 是否在线(`up`)容量 ceph osd perf # 查看 OSD 的延迟负载 ``` #### **(4) 检查日志** ```bash # 查看 Ceph 集群日志(通常位于 /var/log/ceph/) tail -f /var/log/ceph/ceph.log | grep -i pg_stat ``` --- ### **4. 解决方案** #### **(1) 处理 OSD 故障** - 重启故障 OSD: ```bash systemctl restart ceph-osd@<osd-id> ``` - 若 OSD 无法恢复,替换硬件后重新加入集群。 #### **(2) 等待数据恢复完成** - 如果是临时迁移或恢复操作,监控进度: ```bash ceph -w # 实时观察 PG 恢复状态 ceph pg dump | grep recovering ``` - 调整恢复速度(若需加快): ```bash ceph tell osd.* injectargs '--osd-max-backfills=4' # 增加并发恢复数 ``` #### **(3) 修复异常 PG** - 若 PG 卡在 `incomplete` 或 `stale` 状态,尝试修复: ```bash ceph pg repair <pg-id> # 触发 PG 修复(谨慎操作!) ``` - 若修复无效,可能需要手动干预(如重置 PG),建议联系社区或专业支持。 #### **(4) 优化 PG 分布** - 调整 PG 数量(需谨慎,避免数据震荡): ```bash ceph osd pool set <pool-name> pg_num <new-pg-num> ``` - 确保 `pg_num` `pgp_num` 设置合理(参考 [Ceph PG 计算器](https://ceph.io/pgcalc/))。 --- ### **5. 预防措施** - **监控告警**:配置 PG 状态监控(如 `active+clean` 比例)。 - **容量规划**:避免 OSD 过载,预留足够的 PG 数量。 - **定期维护**:升级 Ceph 版本、检查硬件状态、优化 CRUSH Map。 --- 如果需要进一步分析,请提供以下信息: - `ceph pg stat` 的输出 - `ceph health detail` 的告警详情 - 相关 PG 的查询结果(`ceph pg <pg-id> query`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

米利都

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值