Ceph 存储系统使用的CRUSH 算法在一致性Hash算法的基础上充分考虑了多副本、故障隔离域等约束,尽量减少在故障场景下的数据迁移量。实现这一目标的关键措施就是PG逻辑概念的引入。
Ceph中所有的用户数据都被抽象成多个Object,如果Ceph存储系统以Object为追踪目标,那么要追踪的单元个体数量就太多了,不仅会消耗大量的计算资源,而且在一个有数以亿计对象的系统中直接追踪对象的位置及其元信息也是完全不现实的,所以Ceph 引进PG的逻辑概念,将一系列的Object聚合到PG里面,并将PG映射到一系列的OSD上去,系统中的PG数量远远小于Object数量,比较好的处理了性能和可扩展性的界限。
image.pngPG 数量的选择
PG 是用户数据切片与真实提供存储空间的存储介质之间的纽带。Ceph 存储系统需要设置较为合理的PG数量:
过少的PG数量,会导致集群peer过程太慢,数据迁移效率过低;
过多的PG数量则会增加集群存储节点的计算资源负担。
对于单存储池的简单场景,可通过:。
对于多存储池的场景,可以参考官方的计算说明:
PG 状态机
PG 状态的迁移通过状态机来驱动,PG 状态机的主要事件定义如下表:
状态 | 说明 |
---|---|
Activating | Peering已经完成,PG正在等待所有PG实例同步并固化Peering的结果(Info、Log等) |
Active | 活跃态。PG可以正常处理来自客户端的读写请求 |
Backfilling | 正在后台填充态。 backfill是recovery的一种特殊场景,指peering完成后,如果基于当前权威日志无法对Up Set当中的某些PG实例实施增量同步(例如承载这些PG实例的OSD离线太久,或者是新的OSD加入集群导致的PG实例整体迁移) 则通过完全拷贝当前Primary所有对象的方式进行全量同步 |
Backfill-toofull | 某个需要被Backfill的PG实例,其所在的OSD可用空间不足,Backfill流程当前被挂起 |
Backfill-wait | 等待Backfill 资源预留 |
Clean | 干净态。PG当前不存在待修复的对象, Acting Set和Up Set内容一致,并且大小等于存储池的副本数 |
Creating | PG正在被创建 |
Deep | PG正在或者即将进行对象一致性扫描清洗 |
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更新,这说明所有存储这个PG的OSD可能挂掉, 或者Mon没有检测到Primary统计信息(网络抖动) |
Undersized | PG当前Acting Set小于存储池副本数 |
需要注意的是,上面的状态并不是完全互斥的,某些时刻PG可能处于多个状态的叠加中。
-
Peering
Peering 指的是PG包含的冗余组中的所有对象达到一致性的过程,Peering 时间的长短并不可控,主要是在于请求的OSD能否及时响应。 -
Degraded
降级状态,如在副本模式下,每个PG有3个副本,分别保存在不同的OSD守护进程中。在非故障的情况下,这个PG是,一旦出现OSD 守护进程离线,PG 的副本数就会小于3,PG状态就转为降级状态。 -
Peered
Peering 已经完成,PG等待其他副本(OSD守护进程)上线状态,此状态下PG不可对外提供服务。
网友评论