dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Runbook #55
mongodb
AvailabilitySEV1 · KRİTİK KESİNTİ15-30 dakika / 15-30 minsclusterAdmin / dbAdminAnyDatabase / root

MongoDB Replica Set Seçimleri ve PRIMARY Kaybı: Kararlılık Teşhisi

Sık primary seçimlerinde üyelerin sağlık, oy ve oplog durumunu değerlendirir; ağ/disk kaynaklı ayrışmaları ve split-brain riskini güvenle yönetir.

İlişkili Metrik:M58
İlişkili Script:S84S93
#replica-set#election#PRIMARY#quorum

Operasyonel Güvenlik ve Risk Uyarısı

Bu runbook müdahale adımları içerir; birçok adım yazma etkilidir (KILL, terminate, DROP, RESIZE). Önce test ortamında deneyin, üretimde adımları sırayla ve doğrulayarak uygulayın.

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

1. Belirti / Symptom

Kısa aralıklarla PRIMARY değişir, uygulama `NotWritablePrimary`, server selection timeout veya kısa yazma kesintileri yaşar. M58 üye durumları/eski primary kaybını işaret eder.

2. Etki / Impact

Yazma erişimi kısa süreli veya quorum yoksa kalıcı olarak kesilir. `w:1` ile yazılmış ama çoğunluğa ulaşmamış kayıtların rollback riski vardır.

3. Teşhis / Diagnosis

🟢 Salt Okunur1. Sağlam bir üye üzerinde (S84) durumu anlık kaydedin:
javascript
const st = rs.status();
st.members.map(m => ({ name: m.name, state: m.stateStr, health: m.health,
  optimeDate: m.optimeDate, lastHeartbeatMessage: m.lastHeartbeatMessage }));
rs.conf().members.map(m => ({ host: m.host, votes: m.votes, priority: m.priority,
  hidden: m.hidden, arbiterOnly: m.arbiterOnly }));
🟢 Salt Okunur2. Mongod loglarında `election`, `stepDown`, heartbeat timeout, bağlantı reddi ve disk/fsync gecikmelerini zaman çizelgesine koyun. 5.0+ loglama biçimi farklı olabilir; alan adına değil olay zamanına ve üye adına bakın.
🟢 Salt Okunur3. Quorum: oy hakkı olan üyelerin **çoğunluğu** birbirini görüyor mu? 3 oyda en az 2; arbiter veri replika değildir. Ağ bölünmesi, DNS, TLS ve saat farklarını altyapı ekibiyle kontrol edin.
🟢 Salt Okunur4. Disk/bellek baskısı ve aşırı replika lag varsa `mongo-replication-lag` ve `mongo-oplog-window-short` runbook'larına geçin (S93).

4. Müdahale / Response

🟡 Geri Alınabilir1. Öncelik ağ, DNS, disk ve kaynak doygunluğunu düzeltmek; üyelerin kararlı biçimde birbirine eriştiğini doğrulayın. Primary değiştirmek semptomu saklayabilir.
🟡 Geri Alınabilir2. Tek üye sorunluysa, quorum korunarak kontrollü bir üye bakımı yapın. Uygulamanın replica set URI'sinde **tüm veri taşıyan üyelerin** adresleri ve uygun retry davranışı olmalı.
🔴 YÜKSEK RİSK / GERİ ALINAMAZ3. Çoğunluk yokken `rs.reconfig(..., { force: true })` yapmayın. Force reconfig geri alınmamış çoğunluk yazılarını veya replika tutarlılığını etkileyebilir; yalnızca belgelenmiş felaket kurtarma prosedürüyle ve veri kaybı onayıyla uygulanır.
🔴 YÜKSEK RİSK / GERİ ALINAMAZ4. Sağlıklı bir PRIMARY varken gelişi güzel `rs.stepDown()` veya aynı anda çok üyeyi yeniden başlatmak hizmeti keser. `w:majority` değerini veri kaybını gizlemek için düşürmeyin.

5. Doğrulama / Verification

Bir PRIMARY, beklenen SECONDARY'ler var; quorum sabit, heartbeat hataları ve sık seçimler durdu, replika gecikmeleri düşük; uygulama yazmaları kendi write concern düzeyinde başarıyla tamamlanıyor.

6. Geri Alma / Rollback

Bakım sırasında değişen uygulama URI/altyapı ayarlarını eski doğrulanmış duruma döndürün. Gerçekleşmiş seçim geri alınmaz; rollback olup olmadığını üye logları ve veri tutarlılığıyla inceleyin.

Diğer MONGODB Runbook'ları