Mongo DB Replica, RECOVERING durumunda takılı kaldı


14

Bir çoğaltma kümesi oluşturduk ve şimdi sorun 2 çoğaltma kümesinin 2 üyesi [3 üye kümesi] 48 saatten kurtarma modunda. Başlangıçta geri kazanım düğümlerinin boyutu artıyordu ve şimdi bu bile durdu. Bu nedenle, kurtarma düğümlerinde, 90 GB'lik verilerden sonra 60+ GB yerel verilerle sıkışırlar.

Bu moddan nasıl çıkılır?

Yanıtlar:


13

Kolay, biraz güvenli olmasa da

  1. İlk ikincil öğeyi durdur
  2. İçeriğini silin dbpath
  3. İkinciyi yeniden başlatın
  4. Birincil ile uyuşmasını bekleyin
  5. İşlemi ikinci sekonder ile tekrarlayın

Bu, ikincillerin neden Kurtarılma durumuna girdiği bilinmediğinden biraz emin değil.

Daha güvenli, ama aynı zamanda daha müdahaleci yol

Yukarıdaki gibi, ancak işlem sırasında başvurunuzu durdurun. Bu, uygulamanızın ikincil öğelerin çoğaltabileceğinden daha fazla veri eklemesi olasılığını önler. Ancak, sorun üretim sırasında ortaya çıkabilir.

En güvenli, ama aynı zamanda en müdahaleci yol

  1. Tüm çoğaltma kümesini kapat
  2. İçeriğini çıkarın dbpathüzerinde hem ikincilleri
  3. İçeriğini dbpathher iki ikincil öğeye de kopyalayın 'dbpath
  4. Eski birincil öğeyi başlatın.
  5. Eski ikincil yerlerden birini başlatın.
  6. Yeni bir birincil seçilinceye kadar bekleyin.
  7. Kalan ikincil öğeyi başlatın.

Bazı notlar:

MMS kullanın . Ücretsizdir, kurulumu kolaydır ve çoğaltma kümeniz hakkında iyi bilgi verir. "Çoğaltma gecikmesi" değerini 0 civarında tutmaya çalışın ve çoğaltma gecikmenizin "çoğaltma oplog penceresinden" hiçbir zaman daha büyük olmaması için gereken tüm yöntemleri kullanın.

Her zaman 1 GB'lık bir ağa ve (özür dilerim) RAM yüküne sahip olduğunuzdan emin olun. Ne kadar çok, o kadar iyi. Ek kural: RAM'in iki katı yerine RAM ve SSD'lerin yarısı ve SSD'ler yok (RAM makul sınırlar dahilinde).

Feragatname: Üretim verisi ile uğraşmadan önce daima üretim verilerini yedekleyin.


1
Şu andan itibaren çoğaltma kümesinde ikincil bir düğüm yok. Biri PRIMARY modunda, diğer ikisi RECOVERING modunda.
Avinash Sahu

1
O halde mantıklı ikinciller. Süreç aynı.
Markus W Mahlberg

Mongo örneğini ve yeniden senkronizasyonu başlatan birçok kez denedim, her seferinde sabit bir boyuta (~ 96gb) kadar diğer düğüme veri kopyalamaya başlar ve sonra sıkışır. Oplog boyutu bununla bir şey yapmak zorunda mı?
Avinash Sahu

1
Aslında, ilk yeniden senkronizasyon sırasında oplog'un tutabileceğinden daha fazla veri eklediğinizde yeniden senkronizasyonun durabileceği dışında. Bu durumda seçenek 2 veya 3'ü alın.
Markus W Mahlberg

1
Bu biraz daha açıklayabilir misiniz? "RAM ve SSD'lerin yarısı RAM'in iki katıdır ve SSD yoktur (RAM makul sınırlar içinde kalır)."
Stephen Nguyen

1

İkincil üzerinde yeni bir dbpath sıfırdan başlamak bile çoğaltma işlemi başarısız olur. Yani şey oplog bazı değişiklikler yapmaktır . Oplogun boyutu, içine tüm uygulama yazmalarını işleyebilmesi için en uygun değere ayarlanmalıdır.

Artan oplog boyutu:

Birincil sunucuyu kapatma

use admin

db.shutdownServer()

Birincil olarak bağımsız olarak başlayın ve farklı bağlantı noktasında çalıştırın 37017

Bağlantı noktası 37017'de mongo'ya giriş yapın

mongo --port 37017

Yerel veritabanındaki eski içeriği kaldırma

Güvenlik için düşürmeden önce eski oplog'u geri al

mongodump --db local --collection 'oplog.rs' --port 37017

Eski içerikleri yerel veritabanına bırakma

use local

db.oplog.rs.drop()

db.me.drop()

db.replset.election.drop()

db.replset.minvalid.drop()

db.startup_log.drop()

Replset koleksiyonu atılamaz, bu nedenle gerekli kimlikle kaldırın:

db.system.replset.remove({ "_id" : "your_replsetname"})

50 GB gibi gerekli büyüklükte yeni bir oplog oluşturun

db.runCommand( { create: "oplog.rs", capped: true, size: (50 * 1024 * 1024 * 1024) } )

Ayrıca mongod.conf dosyasında MB cinsinden oplog boyutunu belirtebilirsiniz, diyelim ki 50 GB için 429496 MB

replication:
   oplogSizeMB: 429496

Bu yardımcı olur umarım !!!

Düzenle:

Nicholas Tolley Cottrell tarafından belirtildiği gibi yorumlarda. MongoDB 3.6 sürümünde , yeniden başlatmadan çalışma zamanında oplog boyutunu değiştirebiliriz.

Mevcut oplog boyutunu kontrol edin

use local
db.oplog.rs.stats().maxSize

Oplog boyutunu 10 GB olarak değiştirmek için

db.adminCommand({replSetResizeOplog: 1, size: 10000})

1
Yukarıdakiler 3.6 itibariyle güncel değil. Artık oplog'u içeriği düşürmeden veya düğümleri yeniden başlatmadan yeniden boyutlandırabilirsiniz: docs.mongodb.com/manual/tutorial/change-oplog-size
Nicholas Tolley Cottrell

1
@NicholasTolleyCottrell evet, cevabı düzenledim.
JERRY
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.