MongoDB Replica Set Replication Lag: Diagnosis and Fix
Finds why a secondary lags behind the primary (write load, disk, network, flow control), checks the oplog window and prevents a resync.
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.
1. Symptom & Signals
- Secondary'nin `optimeDate` değeri primary'nin gerisinde; M50 > 10-60 sn.
- Secondary'den okuyan uygulamalar eski veri görüyor.
- `w:majority` yazmaları yavaş veya zaman aşımına uğruyor.
2. Business & Technical Impact
Okuma tutarsızlığı, majority write gecikmesi, failover'da veri kaybı riski (rollback). Gecikme oplog penceresini aşarsa secondary **"too stale to catch up"** olur ve tam **initial sync** gerekir.
3. Diagnosis & Root-Cause Analysis
rs.status().members.map(m => ({ name: m.name, state: m.stateStr, lag_s: m.optimeDate ? (rs.status().date - m.optimeDate)/1000 : null, ping: m.pingMs }));
rs.printSecondaryReplicationInfo();rs.printReplicationInfo(); // "log length start to end" saat cinsinden- Disk I/O doygun mu? (`iostat -x 1`, yüksek `await`/`%util`).
- CPU veya ağ darboğazı var mı? Primary ile secondary arası bant genişliği/gecikme.
- Secondary'de **ağır okuma/raporlama sorguları** veya index build çalışıyor mu?
- Primary'de ani yazma patlaması mı (toplu import/update)?
db.serverStatus().flowControl; // isLagged, targetRateLimit4. Remediation & Action Plan
db.killOp(<opid>);db.adminCommand({ replSetResizeOplog: 1, size: 32768 }); // MB6. **Kalıcı çözüm:** Oplog penceresini yoğun toplu işlemi kapsayacak şekilde boyutlandırın (en az 24-72 saat), secondary donanımını primary ile eşitleyin, raporlama için ayrı (hidden/analytics) bir üye kullanın.
5. Verification & Health Checks
- Tüm secondary'ler `SECONDARY` durumunda ve lag birkaç saniyenin altında (M50 normal).
- Oplog penceresi hedefin (>24 saat) üzerinde (M51).
- `w:majority` yazma gecikmesi normale döndü.
6. Rollback & Contingency Plan
- `killOp` geri alınamaz; işlem uygulama tarafında yeniden denenmelidir.
- `replSetResizeOplog` ile oplog küçültülebilir ancak pencereyi daraltır; yalnızca gerekirse yapın.
- Initial sync geri alınamaz; başlamadan önce yedek/snapshot doğrulayın.