Bu MongoDB için geçerli bir yedekleme stratejisi mi?


11

Yaklaşık 10GB'lık bir MongoDB veritabanına sahip tek bir özel sunucum var. Günlük yedeklemeler yapmam gerekiyor, ancak veritabanında kesinti olmaz. Tek bir diskte (farklı bağlantı noktalarında 2 mongod örneği çalışıyor) bir çoğaltma kümesi kullanmak ve ikincil olanı çevrimdışına almak ve veri dosyalarını S3 (günlük kaydı açık) gibi bir site dışı depolama alanına yedeklemek mümkün mü? Yoksa master / slave kullanmak bir kopya setinden daha mı iyi olur?

Bu uygulanabilir mi ve eğer öyleyse, hangi potansiyel problemlerim olabilir? Değilse, bunu çalışmak için nasıl kavramsallaştırırım?

Yanıtlar:


6

ReplicaSet bu senaryoda çalışır. Ancak, aynı sunucuda iki MongoDB örneğinin bulunmasının iyi bir fikir olup olmadığını söyleyemem - bu sunucu donanımına / yazılımına ve yüküne bağlıdır.

Emin olmak için backupMongoDB düğüm haline gelmez usta, onun set priorityparametre için 0, örneğin

rs.add({_id: 1, host: "localhost:<port>", priority: 0})

NOT : kesinti süreniz yoksa, ReplicaSet içinde en az 2 birincil MongoDB düğümü olmalıdır, makaleye bakın


2

Dikkate alınması gereken bir strateji, çoğaltma kümenizdeki yedekleme düğümünde "gizli" seçeneğini kullanmaktır. MongoDB blogundan:

Gizli sunucular isMaster () sonuçlarında görünmez. Bu ayrıca, bir sürücü okumaları otomatik olarak slave'lere dağıtırsa kullanılmayacakları anlamına da gelir. Gizli bir sunucunun önceliği 0 olmalıdır (gizli bir birinciliniz olamaz). Gizli üye eklemek için şunu çalıştırın:

rs.add ({"_ id": num, "ana bilgisayar": ana bilgisayar adı, "öncelik": 0, "gizli": doğru})


1

Çoğaltma kümeleri genel olarak tercih edilir, ancak bu durumda sadece otomatik kurtarma ve otomatik yeniden senkronizasyon işlevleri nedeniyle de tercih edilir. Tanımladığınız yedekleme yöntemi kulağa oldukça makul geliyor ve daha önce başka veritabanlarında da kullanılmış.

Gördüğüm tek potansiyel sorun, belirli koşullar altında ikincil sayfanızın birincil ürününüze yükseltilebileceği ve a) yedeklemenizi yeni ikincil öğeden almanız veya b) yedek komut dosyanızı bu örneği anlatacak kadar akıllı hale getirmeniz MongoDB aşağı inecek.

İyi haber şu ki,

  1. Hangi örneğin birincil ve hangisinin ikincil ( db.isMaster()) olduğunu bulmak için yedekleme kaynağınızı sorgulayın
  2. Yedekleme örneğini rs.freeze()ve rs.stepDown()komutlarını kullanarak geri çekilmeye veya ikincil öğeye yeniden bağlanmaya ikna et

İskender'in önerdiği gibi önceliği 0'a ayarlamak bir seçenek değil mi, böylece ikincil asla birincil olmaz.
James Simpson

Bazı testler yapmak zorunda kalacaksınız, ancak herhangi bir nedenden dolayı birincil sürecin çökmesi durumunda ikincinin beklemede olup olmayacağından emin değilim. Ben her zaman ikincil benim devralmak istedim;)
Charles Hooper

1
>> ikincil ürününüz birincil ürününüze yükseltilebilir - Belirtildiği gibi, ikincil öğeyi öncelik 0 olarak ayarlamak, ana öğeye geçmesini engelleyecektir.
Jonesome

Eş düğüm listenizdeki eşlerden birine bağlanabilirsiniz (herhangi bir birincil, ikincil, hakem veya gizli düğüm olabilir), ikincillerin kim olduğunu ( rs.status()ve üzerinden geçmesini result["members"]) isteyebilir ve yedekleme yapmak için ikincil.
yfeldblum
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.