dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbooks Library/mongodb/#50
Runbook #50
mongodb
ReplicationSEV2 · DEGRADATION15-30 dakika / 15-30 minsclusterAdmin / dbAdminAnyDatabase / root

MongoDB Short Oplog Window: Prevent Secondary Resync

Compares oplog coverage with the slowest secondary, inspects write bursts and disk limits, and explains safe oplog resizing to avoid resync.

Related Metrics:M51
Related Scripts:S93S84
#oplog#replica-set#resync#retention

Operational Safety & Risk Notice

This runbook contains operational intervention steps; several are write-impacting (KILL, terminate, DROP, RESIZE). Verify in a staging environment first, and apply sequentially in production with verification.

🟢 Salt Okunur (Read-Only)·🟡 Geri Alınabilir (Reversible)·🔴 Yüksek Etkili / Geri Alınamaz (High Impact)

1. Symptom & Signals

M51 belirlenen minimuma iner; replika gecikmesi oplog penceresinin büyük bölümüne ulaşır. Secondary loglarında oplog'dan yakalama başarısızlığı veya `RECOVERING` görülebilir.

2. Business & Technical Impact

Geri kalan oplog girdileri silinirse secondary mevcut geçmişle yetişemez, initial sync veya güncel snapshot'tan kurtarma gerekir. Quorum/donanım hata toleransı düşer.

3. Diagnosis & Root-Cause Analysis

🟢 Read-Only1. Her üyenin oplog durumunu ve gerçek gecikmesini ölçün (S93, S84):
javascript
rs.printReplicationInfo();
rs.printSecondaryReplicationInfo();
rs.status().members.map(m => ({ name: m.name, state: m.stateStr, optimeDate: m.optimeDate }));
🟢 Read-Only2. Boyut ve kullanım için üye üzerinde:
javascript
const o = db.getSiblingDB('local').oplog.rs.stats();
({ capped: o.capped, maxSizeMB: +(o.maxSize / 1048576).toFixed(0), usedMB: +(o.size / 1048576).toFixed(0) });
🟢 Read-Only3. Yazma patlaması, büyük batch, disk boş alanı ve secondary uygulama hızını kontrol edin. Sadece boyut değil, hız da belirleyicidir; `mongo-replication-lag` runbook'una geçin.

4. Remediation & Action Plan

🟡 Reversible1. Toplu yazma işini yavaşlatın; secondary disk/ağ darboğazını giderin. Bu, pencereyi büyütmekten önce kök nedeni hedefler.
🟡 Reversible2. Yeterli disk alanı varsa, **her üyenin kendisinde**, değişiklik öncesi boyutu kaydederek oplog'u büyütün:
javascript
// Örnek: 32 GiB, boyut MB cinsinden; hedefi kapasite hesabıyla belirleyin.
db.getSiblingDB('admin').runCommand({ replSetResizeOplog: 1, size: Double(32768) });

`replSetResizeOplog` MongoDB 4.0+ için geçerlidir; `minRetentionHours` seçeneği 4.4+ sürümlerde vardır. Bu seçenek disk kullanımı garantisi değildir, büyüme planını ayrıca yapın. Yönetilen bulut servislerinde komut desteklenmeyebilir.

🔴 HIGH RISK / IRREVERSIBLE3. `local.oplog.rs` koleksiyonunu manuel silmeyin veya yeniden oluşturmayın; replikanın tutarlılığını bozar. Pencere kapanmışsa initial sync'i quorum ve snapshot planıyla tasarlayın.

5. Verification & Health Checks

Yeni maksimum oplog boyutu her üyede görünüyor; M51 hedefin üzerinde, replika gecikmesi pencerenin güvenli bir bölümünde ve azalıyor; disk rezervi yeterli.

6. Rollback & Contingency Plan

Önceki MB değerini kaydedip aynı komutla geri dönülebilir, fakat küçültme geçmiş girdileri atıp geri kalan secondary'yi senkron dışı bırakabilir. Pencere toparlanmadan küçültmeyin.

More MONGODB Runbooks