MongoDB Çoğaltma İKİNCİ "ROLLBACK" Durumunda Kaldı


11

Mongodb'umuzun yakın zamanda otomatik olarak güncellenmesi PRIMARYsırasında, PRIMARYistifa edildiğinde kalıcı olarak bir ROLLBACKduruma geçti.

Durumda birkaç saat sonra , mongodb veritabanı dizinindeki dizinde ROLLBACKhala geri alma .bsondosyası yoktu rollback. Bu ve ayrıca günlük dosyamızdaki bu satır:, işlemin başarısız [rsSync] replSet syncThread: 13410 replSet too much data to roll backolduğunu gösteriyor ROLLBACK.

Neyin yanlış gittiğini analiz etmek için biraz yardım istiyorum.

  • Günlüklerimizde iki farklı geri alma gerçekleşti. Durum bu muydu yoksa 3 saat sürdü mü?
  • İlk geri alma (19:00 saatinde) başarılı olduysa, neden rollbackdizinde bir şey görünmüyordu ?
  • Tüm bu uyarıların sebebi hakkında bir tahmin var mı? Bu, geri alma hatasıyla ilgili olabilir mi?
  • Birincisi nedeniyle 18 saniye veri kaybettik ROLLBACKmi?
  • "Durumda sıkışmış ROLLBACK" sorununa genel bir çözüm var mı ? Biz tüm DB hortum ve birincil senkronize zorunda sona erdi.

İlgili günlük satırları:

# Primary coming back after restart...
Tue May 15 19:01:01 [initandlisten] MongoDB starting : pid=3684 port=27017 dbpath=/var/lib/mongodb 64-bit host=magnesium
Tue May 15 19:01:01 [initandlisten] db version v2.0.5, pdfile version 4.5
# ... init stuff
Tue May 15 19:01:01 [initandlisten] journal dir=/var/lib/mongodb/journal
Tue May 15 19:01:01 [initandlisten] recover : no journal files present, no recovery needed
# ... More init stuff
Tue May 15 19:01:03 [rsStart] trying to contact rs1arb1.c9w.co:27017
Tue May 15 19:01:03 [rsStart] trying to contact rs1m2.c9w.co:27017
Tue May 15 19:01:03 [rsStart] replSet STARTUP2
Tue May 15 19:01:03 [rsHealthPoll] replSet member rs1arb1.c9w.co:27017 is up
Tue May 15 19:01:03 [rsHealthPoll] replSet member rs1arb1.c9w.co:27017 is now in state ARBITER
Tue May 15 19:01:03 [rsSync] replSet SECONDARY
Tue May 15 19:01:05 [rsHealthPoll] replSet member rs1m2.c9w.co:27017 is up
Tue May 15 19:01:05 [rsHealthPoll] replSet member rs1m2.c9w.co:27017 is now in state PRIMARY
Tue May 15 19:01:09 [rsSync] replSet syncing to: rs1m2.c9w.co:27017
Tue May 15 19:01:09 [rsSync] replSet our last op time written: May 15 19:00:51:6
Tue May 15 19:01:09 [rsSync] replSet rollback 0
Tue May 15 19:01:09 [rsSync] replSet ROLLBACK
Tue May 15 19:01:09 [rsSync] replSet rollback 1
Tue May 15 19:01:09 [rsSync] replSet rollback 2 FindCommonPoint
Tue May 15 19:01:09 [rsSync] replSet info rollback our last optime:   May 15 19:00:51:6
Tue May 15 19:01:09 [rsSync] replSet info rollback their last optime: May 15 19:01:09:19
Tue May 15 19:01:09 [rsSync] replSet info rollback diff in end of log times: -18 seconds
Tue May 15 19:01:10 [rsSync] replSet WARNING ignoring op on rollback no _id TODO : nimbus.system.indexes { ts: Timestamp 1337108400000|17, h: 1628369028235805797, op: "i", ns: "nimbus.system.indexes", o: { unique: true, name: "pascalquery_ns_key_start_ts_keyvals", key: { __ns__: 1, _key: 1, start_ts: 1, _keyval.a: 1, _keyval.b: 1, _keyval.c: 1, _keyval.d: 1, _keyval.e: 1, _keyval.f: 1, _keyval.g: 1, _keyval.h: 1 }, ns: "nimbus.wifi_daily_series", background: true } }
# ...
# Then for several minutes there are similar warnings
# ...
Tue May 15 19:03:52 [rsSync] replSet WARNING ignoring op on rollback no _id TODO : nimbus.system.indexes { ts: Timestamp 1337097600000|204, h: -3526710968279064473, op: "i", ns: "nimbus.system.indexes", o: { unique: true, name: "pascalquery_ns_key_start_ts_keyvals", key: { __ns__: 1, _key: 1, start_ts: 1, _keyval.a: 1, _keyval.b: 1, _keyval.c: 1, _keyval.d: 1, _keyval.e: 1, _keyval.f: 1, _keyval.g: 1, _keyval.h: 1 }, ns: "nimbus.wifi_daily_series", background: true } }
Tue May 15 19:03:54 [rsSync] replSet rollback found matching events at May 15 15:59:13:181
Tue May 15 19:03:54 [rsSync] replSet rollback findcommonpoint scanned : 6472020
Tue May 15 19:03:54 [rsSync] replSet replSet rollback 3 fixup

Sonra bir sebepten dolayı başka bir geri dönüş gerçekleşir ...

Tue May 15 22:14:24 [rsSync] replSet rollback re-get objects: 13410 replSet too much data to roll back
Tue May 15 22:14:26 [rsSync] replSet syncThread: 13410 replSet too much data to roll back
Tue May 15 22:14:37 [rsSync] replSet syncing to: rs1m2.c9w.co:27017
Tue May 15 22:14:37 [rsSync] replSet syncThread: 13106 nextSafe(): { $err: "capped cursor overrun during query: local.oplog.rs", code: 13338 }
Tue May 15 22:14:48 [rsSync] replSet syncing to: rs1m2.c9w.co:27017
Tue May 15 22:15:30 [rsSync] replSet our last op time written: May 15 19:00:51:6
Tue May 15 22:15:30 [rsSync] replSet rollback 0
Tue May 15 22:15:30 [rsSync] replSet rollback 1
Tue May 15 22:15:30 [rsSync] replSet rollback 2 FindCommonPoint
Tue May 15 22:15:30 [rsSync] replSet info rollback our last optime:   May 15 19:00:51:6
Tue May 15 22:15:30 [rsSync] replSet info rollback their last optime: May 15 22:15:30:9
Tue May 15 22:15:30 [rsSync] replSet info rollback diff in end of log times: -11679 seconds
# More warnings matching the above warnings
Tue May 15 22:17:30 [rsSync] replSet rollback found matching events at May 15 15:59:13:181
Tue May 15 22:17:30 [rsSync] replSet rollback findcommonpoint scanned : 7628640
Tue May 15 22:17:30 [rsSync] replSet replSet rollback 3 fixup

Bulduğum geri almalarla ilgili tek yararlı bilgi "geri alma durumunda takılı kalmayı" ele almayan bu notlardır. http://www.mongodb.org/display/DOCS/Replica+Sets+-+Rollbacks http://www.snailinaturtleneck.com/blog/2011/01/19/how-to-use-replica-set-rollbacks/


Yazma kaygısını kontrol ettiniz mi? docs.mongodb.com/manual/core/replica-set-write-concern/…
ozma

Yanıtlar:


7

Bir MongoDB örneği Geri Alma durumuna geçtiğinde ve geri alma verileri 300 MB'den fazla veri olduğunda, manuel olarak müdahale etmeniz gerekir. Bu verileri kaydetmek / kaldırmak / taşımak için harekete geçene kadar geri alma durumunda kalacaktır, (şimdi ikincil), birincil ile aynı hizaya getirmek için yeniden senkronize edilmelidir. Bunun tam bir yeniden senkronizasyon olması gerekmez, ancak bu en basit yoldur.

Birden fazla geri alma, sorunun nedeninden ziyade bir semptomdur. Geri alma yalnızca senkronize olmayan bir ikincil (gecikme veya çoğaltma ile ilgili bir sorun nedeniyle) birincil hale geldiğinde ve yazma işlemi gerçekleştiğinde gerçekleşir. Bu nedenle, ilk etapta gerçekleşmesine neden olan sorunlar, nelere dikkat edilmesi gerektiğidir - geri alma, bir yönetici olarak uğraşmanız gereken bir şeydir - MongoDB'nin verileri otomatik olarak uzlaştırmak için çok fazla potansiyel tuzak vardır.

Bunu test amacıyla tekrar simüle etmek istiyorsanız, burada nasıl yapılacağını açıkladım:

http://comerford.cc/2012/05/28/simulating-rollback-on-mongodb/

Sonunda, bu veriler diske dökülmektense bir koleksiyonda (yerel DB'de) saklanacak ve bu daha etkin bir şekilde başa çıkma fırsatları sunacaktır:

https://jira.mongodb.org/browse/SERVER-4375

Şu anda, bir geri alma gerçekleştiğinde, bulduğunuz gibi, manuel müdahale gereklidir.

Son olarak, el kitabı şimdi Kristina'nın bloguna benzer bilgiler içeriyor:

https://docs.mongodb.com/manual/core/replica-set-rollbacks


2

Biz kullanarak sona erdi "çözüm" tamamen ROLLBACKmodda sıkışmış makinede veritabanımızı hosing ve yeni boşluk SECONDARYyeniden master senkronize izin verdi . Bu yetersiz bir çözüm gibi görünüyor, çünkü anlayabildiğim kadarıyla oplog, makinelerde teorik olarak yeniden senkronize olabilmesi için üzerinde yeterince boş alanımız vardı.

Umarım birisi bunun için daha iyi bir cevap bulur.


Yaptıklarınızı bize güncellediğiniz için teşekkür ederiz. Bununla ilgili daha fazla bilgi bulursanız, geri dönün ve yanıtınızı güncelleyin (veya başka bir yanıt verin).
Nick Chammas
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.