【ceph】 PG 状态 ①

 PG 状态

statedescription
Activating Peering已经完成,PG正在等待所有PG实例同步并固化Peering的结果(Info、Log等)
Active PG可以正常处理来自客户端的读写请求
Backfilling PG正在执行Backfill。Backfill总是在Recovery完成之后进行的
Backfill-toofull 某个需要被Backfill的PG实例,其所在的OSD可用空间不足,Backfilll流程当前被挂起
Backfill-wait 等待Backfill资源预留
Clean PG当前不存在待修复的对象,Acting Set和Up Set内容一致,并且大小等于存储池副本数
Creating PG正在被创建
Deep PG正在或者即将进行对象一致性扫描。Deep总是和Scrubbbing成对出现,表明将对PG中的对象执行深度扫描(同时扫描对象元数据和用户数据)
Degraded Peering完成后,PG检测到任意一个PG实例存在不一致(需要被同步/修复)的对象;或者当前Acting Set小于存储池副本数
Down Peering过程中,PG检测到某个不能被跳过的Interval中(例如该Interval期间,PG完成了Peering,并且成功切换至Active状态,从而有可能正常处理了来自客户端的读写请求),当前剩余在线的OSD不足以完成数据修复
Incomplete Peering过程中,由于1.无法逃出权威日志 2.通过choose_acting选出的Acting Set后续不足以完成数据修复(例如针对纠删码,存活的副本数小于k值)(与Down的区别在于这里选不出来的原因是由于某些剧本的日志不完整)等导致Peering无法正常完成
Inconsistent PG通过Scrub检测到某个或者某些对象在PG实例间出现了不一致(主要是静默数据导致错误)
Peered Peering已经完成,但是PG当前Acting Set规模小于存储池规定的最小副本数min_size
Peering PG正在进行Peering
Recovering Recovering资源预留成功,PG正在后台根据Peering的结果针对不一致的对象进行同步/修复
Recovery-wait 等待Recovery资源预留
Remapped Peering完成,PG当前Acting Set与Up Set不一致
Repair PG在下一次执行Scrub的过程中,如果发现存在不一致的对象,并且能够修复,则自动进行修复
Scrubbing PG正在或者即将进行对象一致性扫描。Scrubbing仅扫描对象的元数据
Stale Monitor检测到当前Primary所在的OSD宕掉;或者Primary超时未向Monitor上报PG相关的统计信息(例如出现临时性的网络拥塞)
Undersized PG当前Acting Set小于存储池副本数

 

 与状态机相关的主要事件如表所示:

事件 含义
Activate Peering即将完成, 通知相关副本保存Peering结果,准备激活PG含义(使其变为Active状态)
ActMp 激活Map
advMap 同步Map
AllBackfillsReserved 所有参与Backfill的副本完成资源预留,准备执行Backfill
AllRemotesReserved 所有参与Recovery的副本完成资源预留,准备开始执行Recovery
AllRepicasActivated 所有副本Activeate操作完成
AllReplicasRecovered Recovey完成,并且无须执行Backfill
Backfilled Backfill完成
BackfillTooFull Backfill副本所在的OSD空间不足(Backfillfull)
DoRecovery 准备开始执行Revcovery,通知Primary发起资源预留
GoClean 通知PG跳转Clean状态
GotInfo Peering过程中,Primary成功收到所请求的Info
Initiallized 创建PG
Load 加载PG
LocalBackfillResverved Backfill过程中,Primary本地资源预留成功
LocalRecoveryReserved Recovery过程中,Primary本地预留资源成功
MInfoRec PG收到Info
MLogRec PG收到Log
MNotifyRec PG收到Notify 
NeedUpThru 通知OSD进行up_thru
NullEvt 空事件
RmotesBackfillReserved 收到副本Backfill资源预留产业成功响应
RemoteRecoveryReserved 收到副本Recovery资源预留成功响应
RemoteRreseveaitonRejected Backfill过程中某个副本资源预留失败,例如因为所在的OSD空间空间不足(Backfill)
ReuqestBackfill 准备执行Backfill
RequestRecovery 准备执行Recovery
   

 

 

 

 

 

再结合前面PG状态转换图的详细版本,我们可以大体画出PG状态机的一个层次结构:

 

 

参考资料

1. ceph源码分析ceph_osd.cc

2. Core Concept 【github】

3. Blog of Aspirer

posted @ 2021-12-01 14:02  苏格拉底的落泪  阅读(323)  评论(0编辑  收藏  举报