گامبهگام peering و recovery
در کتاب: فصل ۳۵
آزمایشگاه
گامبهگام peering و recovery
سه داستان از یک PG با سه نسخه را گامبهگام دنبال کنید و ماشین حالت PeeringState، مجموعههای up و acting و لاگهای PG را ببینید.
pg 1.7 · peering · epoch 45
up[0,1,2]
acting[0,1,2]
۶/۸ · merge_log ورودی واگرا را عقب میبرد
merge_log میبیند که 40'4 در تاریخچهٔ معتبر نیست: rewind_divergent_log آن را کنار میگذارد و _merge_divergent_entries سرنوشت شیء را تعیین میکند. D پیشتر وجود نداشت، پس حذف میشود؛ E و B روی osd.0 در فهرست missing میروند.
مطابق با: PGLog::merge_log, rewind_divergent_log, _merge_divergent_entries
- Reset
- Started
- Primary
- Peering
- GetInfo
- GetLog
- GetMissing
- WaitUpThru
- WaitActingChange
- Active
- Activating
- WaitLocalRecoveryReserved
- WaitRemoteRecoveryReserved
- Recovering
- WaitLocalBackfillReserved
- WaitRemoteBackfillReserved
- Backfilling
- Recovered
- Clean
- ReplicaActive
- Stray
- ToDelete
osd.0 primary
last_update 41'5
- 5'1 A
- 5'2 B
- 5'3 C
- 41'4 E برای بازیابی
- 41'5 B برای بازیابی
missing: {E, B}
حذفشده در ادغام لاگ: D
osd.1 replica
last_update 41'5
- 5'1 A
- 5'2 B
- 5'3 C
- 41'4 E
- 41'5 B
osd.2 replica
last_update 41'5
- 5'1 A
- 5'2 B
- 5'3 C
- 41'4 E
- 41'5 B
آنچه تا اینجا رخ داد
- e40 primary نوشتنی را لاگ میکند
- e41 osd.0 رفته است؛ osd.1 رهبری میکند
- e41 نوشتنهای تازه در interval تازه
- e45 osd.0 بهعنوان primary برمیگردد
- e45 لاگ osd.1 برنده است
- e45 merge_log ورودی واگرا را عقب میبرد
مطابق با:
src/osd/PeeringState.h :: struct Started, Primary, Peering, GetInfo, GetLog, GetMissing, Active, …ماشین حالت و تودرتویی آنsrc/osd/PeeringState.cc :: start_peering_interval, should_restart_peering, build_priorpeering کی از نو شروع میشود و از کدام OSDهای گذشته باید پرسیدsrc/osd/PeeringState.cc :: find_best_info, choose_acting, calc_replicated_actingلاگ معتبر و مجموعهٔ actingsrc/osd/PeeringState.cc :: proc_master_log, proc_replica_log, activateادغام لاگها و active کردن replicaهاsrc/osd/PGLog.cc :: merge_log, rewind_divergent_log, _merge_divergent_entries, proc_replica_logادغام و عقب بردن ورودیهای واگراsrc/osd/PrimaryLogPG.cc :: start_recovery_ops, recover_primary, recover_replicas, recover_backfillبازیابی بر پایهٔ لاگ و backfill