Pgpgp的含义:

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

  PG的增加会引起PG内的数据进行分裂,分裂到相同的OSD上新生成的PG当中

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

存储池pg的计算:

Pg数量=osd数量*200/副本数

例子 1:创建存储池时,有 10 个硬盘,副本数为 2

PgNumBase = (10 * 200) / 2 = 1000,找到的 N 9,即 29 < 1000 < 210 ,因为 1000 > ( 29 * 1.25 ),所以最后得到 PgNum = 1024

例子 2:创建存储池时,有 9 个硬盘,副本数为 3

PgNumBase = (9 * 200) / 3 = 600,找到的 N 9,即 29 < 600 < 210 ,因为 600 <= ( 29 * 1.25 ),所以最后得到的 PgNum = 512

Pg的角色

      正常情况下同一个pg所有的实例保存的内容完全相同,原则上不需要对它们的身份加以区分,但是出于数据一致性考虑,仍然需要从中选出一个起主导作用的实例,称为Primary,由其作为集中点对所有任务进行统筹管理。Primary之外的实例统称为Replica(副本),所有的写操作都是写道primary完后再由主传递到其他的副本。这样能够保证数据的一致性

Pg的常见状态

状态

描述

Activating

Peering即将完成,PG正在等待所有PG实例同步并固化Peering的结果(InfoLog)

Active

PG可以正常处理来自客户端的读写请求

Backfilling

正在后台填充态。 backfillrecovery的一种特殊场景,指peering完成后,如果基于当前权威日志无法对Up Set当中的某些PG实例实施增量同步(例如承载这些PG实例的OSD离线太久,或者是新的OSD加入集群导致的PG实例整体迁移) 则通过完全拷贝当前Primary所有对象的方式进行全量同步

Backfill-toofull

某个需要被BackfillPG实例,其所在的OSD可用空间不足,Backfill流程当前被挂起

Backfill-wait

等待Backfill 资源预留

Clean

PG当前不存在待修复的对象, Acting SetUp Set内容一致,并且大小等于存储池的副本数

Creating

PG正在被创建

Deep

PG正在或者即将进行对象一致性扫描清洗(Deep-Scrub

Degraded

降级状态。Peering完成后,PG检测到任意一个PG实例存在不一致(需要被同步/修复)的对象,或者当前ActingSet 小于存储池副本数

Down

Peering过程中,PG检测到某个不能被跳过的Interval(例如该Interval期间,PG完成了Peering,并且成功切换至Active状态,从而有可能正常处理了来自客户端的读写请求),当前剩余在线的OSD不足以完成数据修复

Incomplete

Peering过程中, 由于 a. 无非选出权威日志 b. 通过choose_acting选出的Acting Set后续不足以完成数据修复,导致Peering无非正常完成

Inconsistent

不一致态。集群清理和深度清理后检测到PG中的对象在副本存在不一致,例如对象的文件大小不一致或Recovery结束后一个对象的副本丢失

Peered

Peering已经完成,但是PG当前ActingSet规模小于存储池规定的最小副本数(min_size)

Peering

正在同步态。PG正在执行同步处理

Recovering

正在恢复态。集群正在执行迁移或同步对象和他们的副本

Recovering-wait

等待Recovery资源预留

Remapped

重新映射态。PG活动集任何的一个改变,数据发生从老活动集到新活动集的迁移。在迁移期间还是用老的活动集中的主OSD处理客户端请求,一旦迁移完成新活动集中的主OSD开始处理

Repair

PG在执行Scrub过程中,如果发现存在不一致的对象,并且能够修复,则自动进行修复状态

Scrubbing

PG正在或者即将进行对象一致性扫描

Unactive

非活跃态。PG不能处理读写请求

Unclean

非干净态。PG不能从上一个失败中恢复

Stale

未刷新态。PG状态没有被任何OSD更新,这说明所有存储这个PGOSD可能挂掉, 或者Mon没有检测到Primary统计信息(网络抖动)

Undersized

PG当前Acting Set小于存储池副本数

 

Ceph pg map 1.6c //查看pgosd的映射关系

Ceph pg 1.6c query //查看pg的详细信息

Ceph pg scrub {pg-id} //清洗单个pg意思就是将这个pg中的数据和主pg同步达到数据一致性。

Ceph pg dump //查看pgmap

Ceph pg ls-by-osd 0 //指定osd.0查看pg的状态

Ceph pg ls-by-pool mytest //指定mytest池查看pg的状态

Ceph pg ls-by-primary osd.0 //指定osd.0查看主pg的状态

如果pg的状态一直卡在recovery_waitbackfill_wait这俩个状态中

1、查看卡住PG的具体信息

# ceph pg $pgid query (重点关注recovery_state信息)

2、查看pg分布及各个分布osd上的资源预留情况

查看pg分布的osd

# ceph pg map $pgid

3、查看osd的资源预留情况(主要针对流控,涉及对端和本地)

# ceph daemon osd.$id dump_reservations

Local_reservations为本地资源预留信息,remote_reservations为远端信息

可以通过手动触发资源预留比如ceph osd down $id