必须看懂PG状态!
必须看懂PG状态!
必须看懂PG状态!
重要的事情说三遍
ceph 本身的恢复机制是很强的,无论损坏到什么程度,最终都可以恢复。
恢复过程要注意pg的每一个状态,明白了PG的状态,就知道了集群现在做什么,那个地方有问题。
附件:PG状态
状态 | 描述 |
Activating | Peering已经完成,PG正在等待所有PG实例同步并固化Peering的结果(Info、Log等) |
Active | 活跃态。PG可以正常处理来自客户端的读写请求 |
Backfilling | 正在后台填充态。 backfill是recovery的一种特殊场景,指peering完成后,如果基于当前权威日志无法对Up Set当中的某些PG实例实施增量同步(例如承载这些PG实例的OSD离线太久,或者是新的OSD加入集群导致的PG实例整体迁移) 则通过完全拷贝当前Primary所有对象的方式进行全量同步 无法根据记录的PGLog进行恢复数据时,就需要执行Backfill过程全量恢复数据。 如果超过osd_max_pg_log_entries=10000条, 这个时候需要全量恢复数据。 |
Backfill-toofull | 某个需要被Backfill的PG实例,其所在的OSD可用空间不足,Backfill流程当前被挂起 |
Backfill-wait | 等待Backfill 资源预留 |
Clean | 干净态。PG当前不存在待修复的对象, Acting Set和Up Set内容一致,并且大小等于存储池的副本数 |
Creating | PG正在被创建 |
Deep | PG正在或者即将进行对象一致性扫描清洗 |
Degraded | 降级状态。Peering完成后,PG检测到任意一个PG实例存在不一致(需要被同步/修复)的对象,或者当前ActingSet 小于存储池副本数 降级状态:每个PG有三个副本,分别保存在不同的OSD中,在非故障情况下,这个PG是active+clean 状态,那么,如果PG 的 副本osd.4 挂掉了,这个 PG 是降级状态。 降级就是在发生了一些故障比如OSD挂掉之后,Ceph 将这个 OSD 上的所有 PG 标记为 Degraded。 降级的集群可以正常读写数据,降级的 PG 只是相当于小毛病而已,并不是严重的问题。 Undersized的意思就是当前存活的PG 副本数为 2,小于副本数3,将其做此标记,表明存货副本数不足,也不是严重的问题。 |
Down | Peering过程中,PG检测到某个不能被跳过的Interval中(例如该Interval期间,PG完成了Peering,并且成功切换至Active状态,从而有可能正常处理了来自客户端的读写请求),当前剩余在线的OSD不足以完成数据修复 |
Incomplete | Peering过程中, 由于 a. 无非选出权威日志 b. 通过choose_acting选出的Acting Set后续不足以完成数据修复,导致Peering无非正常完成 |
Inconsistent | 不一致态。集群清理和深度清理后检测到PG中的对象在副本存在不一致,例如对象的文件大小不一致或Recovery结束后一个对象的副本丢失 当PG内部三个副本有数据不一致的情况,想要修复不一致的数据文件,只需要执行ceph pg repair修复指令,ceph就会从其他的副本中将丢失的文件拷贝过来就行修复数据。 |
Peered | Peering已经完成,但是PG当前ActingSet规模小于存储池规定的最小副本数(min_size) Peered状态我们这里可以将它理解成它在等待其他副本上线。 当min_size = 2 时,也就是必须保证有两个副本存活的时候就可以去除Peered这个状态。 处于 Peered 状态的 PG 是不能响应外部的请求的并且IO被挂起。 |
Peering | 正在同步态。PG正在执行同步处理 |
Recovering | 正在恢复态。集群正在执行迁移或同步对象和他们的副本 Recovery是通过记录的PGLog进行恢复数据的。 记录的PGLog 在osd_max_pg_log_entries=10000条以内,这个时候通过PGLog就能增量恢复数据。 |
Recovering-wait | 等待Recovery资源预留 |
Remapped | 重新映射态。PG活动集任何的一个改变,数据发生从老活动集到新活动集的迁移。在迁移期间还是用老的活动集中的主OSD处理客户端请求,一旦迁移完成新活动集中的主OSD开始处理 在 OSD 挂掉或者在扩容的时候PG 上的OSD会按照Crush算法重新分配PG 所属的osd编号。并且会把 PG Remap到别的OSD上去。 Remapped状态时,PG当前Acting Set与Up Set不一致。 客户端IO可以正常读写。 |
Repair | PG在执行Scrub过程中,如果发现存在不一致的对象,并且能够修复,则自动进行修复状态 |
Scrubbing | PG正在或者即将进行对象一致性扫描 |
Unactive | 非活跃态。PG不能处理读写请求 |
Unclean | 非干净态。PG不能从上一个失败中恢复 |
Stale | 未刷新态。PG状态没有被任何OSD更新,这说明所有存储这个PG的OSD可能挂掉, 或者Mon没有检测到Primary统计信息(网络抖动) 当出现一个PG内三个副本都挂掉的情况,就会出现stale状态。 此时该PG不能提供客户端读写,IO挂起夯住,请求block Primary超时未向mon上报pg相关的信息(例如网络阻塞),也会出现stale状态。 |
Undersized | PG当前Acting Set小于存储池副本数 |