मोंगो डीबी रेप्लिका ने रेकॉर्डिंग स्टेट में अटक गया


14

हमने एक प्रतिकृति सेट बनाया है और अब समस्या प्रतिकृति सेट के 2 सदस्यों की है [3 सदस्य सेट] 48 घंटे से ठीक होने वाले मोड में हैं। शुरू में उबरने वाले नोड्स का आकार बढ़ रहा था और अब यह भी बंद हो गया है। तो नोड्स को पुनर्प्राप्त करने में वे 90 जीबी डेटा के साथ 60+ जीबी स्थानीय डेटा के बाद फंस गए हैं।

इस विधा से बाहर कैसे आएं?

जवाबों:


13

आसान, थोड़ा असुरक्षित तरीका है

  1. पहले माध्यमिक को रोकें
  2. इसकी सामग्री हटाएं dbpath
  3. द्वितीयक को पुनरारंभ करें
  4. प्राथमिक के साथ इसे पकड़ने के लिए प्रतीक्षा करें
  5. दूसरी माध्यमिक के साथ प्रक्रिया को दोहराएं

यह थोड़ा असुरक्षित है क्योंकि यह अज्ञात है कि सेकेंडरी ने रिकवरिंग राज्य में प्रवेश क्यों किया।

अधिक सुरक्षित, लेकिन यह भी अधिक दखलंदाजी तरीका है

जैसा कि ऊपर है, लेकिन प्रक्रिया के दौरान अपने आवेदन को रोक दें। यह इस संभावना को रोकता है कि आपका एप्लिकेशन दूसरी डेटा की तुलना में अधिक डेटा सम्मिलित कर रहा है जो दोहराने में सक्षम है। हालाँकि, समस्या उत्पादन के दौरान हो सकती है।

सबसे सुरक्षित, लेकिन यह भी सबसे घुसपैठ तरीका है

  1. पूरे प्रतिकृति सेट को बंद करें
  2. की सामग्री को निकालें dbpathपर दोनों द्वितीयक
  3. dbpathदोनों सेकंड की सामग्री की प्रतिलिपि बनाएँ 'dbpath
  4. पुराना प्राइमरी शुरू करें।
  5. पुरानी दूसरी में से एक को शुरू करें।
  6. एक नया प्राथमिक चुने जाने तक प्रतीक्षा करें।
  7. शेष माध्यमिक प्रारंभ करें।

कुछ नोट:

MMS का उपयोग करें । यह मुफ़्त है, इसे सेट करना आसान है और यह आपको अपने प्रतिकृति सेट के बारे में अच्छी जानकारी देता है। मान को "प्रतिकृति अंतराल" के लिए 0 के आसपास रखने का प्रयास करें, और सभी आवश्यक साधनों को लें जो आपके प्रतिकृति अंतराल "प्रतिकृति oplog विंडो" से अधिक कभी नहीं है।

हमेशा सुनिश्चित करें कि आपके पास 1Gb नेटवर्क और RAM का एक (क्षमा करें) shitload है। अधिक बेहतर। अंगूठे का अतिरिक्त नियम: बल्कि आधा रैम और एसएसडी डबल रैम और कोई एसएसडी नहीं (उचित सीमा के भीतर शेष रैम के साथ)।

डिस्क्लेमर: इसके साथ फ़िडलिंग करने से पहले हमेशा प्रोडक्शन डेटा का बैकअप बना लें।


1
अब तक हमारे पास प्रतिकृति सेट में द्वितीयक नोड नहीं है। एक PRIMARY मोड में है और अन्य दो RECOVERING मोड में हैं।
अविनाश साहू

1
तार्किक दूसरी, फिर। प्रक्रिया वही है।
मार्कस डब्ल्यू महलबर्ग

मैंने कई बार मैंगो इंस्टेंस और रिसंक को शुरू करने की कोशिश की है, हर बार जब यह एक निश्चित आकार (~ 96 जीबी) तक डेटा को दूसरे नोड में कॉपी करना शुरू करता है और फिर अटक जाता है। क्या oplog size में इसके साथ कुछ करना पड़ता है?
अविनाश साहू

1
वास्तव में नहीं, इस तथ्य को छोड़कर कि जब आप आरंभिक रिज़ॉल्यूशन के दौरान ओप्लॉग की तुलना में अधिक डेटा सम्मिलित कर सकते हैं, तो रेसक्यूस बंद हो सकता है। इस मामले में विकल्प 2 या 3 लें।
मार्कस डब्ल्यू महलबर्ग

1
क्या आप इसे थोड़ा और समझा सकते हैं? "बल्कि RAM और SSDs की तुलना में दोगुना RAM और कोई SSDs (रैम उचित सीमा में शेष है)।"
स्टीफन गुयेन

1

प्रतिकृति प्रक्रिया विफल हो जाती है भले ही आप द्वितीयक पर एक नए dbpath से खरोंच शुरू करते हैं। तो बात यह है कि oplog में कुछ बदलाव करने हैं । ओप्लोग का आकार एक इष्टतम मूल्य पर सेट किया जाना चाहिए, ताकि यह उस में लिखे गए सभी एप्लिकेशन को संभालने में सक्षम हो।

बढ़ती हुई अफीम का आकार:

प्राथमिक सर्वर को बंद करें

use admin

db.shutdownServer()

स्टैंडअलोन के रूप में प्राथमिक शुरू करें और 37017 अलग-अलग पोर्ट पर चलाएं

37017 पोर्ट में मोंगो में लॉगिन करें

mongo --port 37017

स्थानीय डेटाबेस में पुरानी सामग्री निकालें

सुरक्षा के लिए छोड़ने से पहले पुराने ओप्‍लॉग का बैकऑप करें

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

स्थानीय डेटाबेस में पुरानी सामग्री छोड़ें

use local

db.oplog.rs.drop()

db.me.drop()

db.replset.election.drop()

db.replset.minvalid.drop()

db.startup_log.drop()

संकलन संग्रह को छोड़ा नहीं जा सकता, इसलिए इसे आवश्यक आईडी से हटा दें:

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

50 GB का कहना है कि आवश्यक आकार का एक नया oplog बनाएँ

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

इसके अलावा आप mongod.conf फ़ाइल में MB में ओप्‍लोग का आकार निर्दिष्ट कर सकते हैं, 50 GB के लिए 429496 MB कह सकते हैं

replication:
   oplogSizeMB: 429496

उम्मीद है की यह मदद करेगा !!!

संपादित करें:

जैसा कि निकोलस टोले कॉटरेल ने टिप्पणियों में उल्लेख किया है। MongoDB संस्करण 3.6 में हम बिना पुनरारंभ किए रनटाइम आकार में अफीम का आकार बदल सकते हैं।

वर्तमान oplog आकार की जाँच करें

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

अफीम के आकार को 10 जीबी में बदलने के लिए

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

1
उपरोक्त तारीख 3.6 से बाहर है। अब आप सामग्री को छोड़ने के बिना या यहां तक ​​कि नोड्स को फिर से शुरू करने के बिना अफीम का आकार बदल सकते हैं: docs.mongodb.com/manual/tutorial/change-oplog-size
निकोलस टोले

1
@NicholasTolleyCottrell हाँ, मैंने उत्तर संपादित किया है।
जेरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.