MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

माध्यमिक की अंतहीन ठीक होने की स्थिति

समस्या (सबसे अधिक संभावना)

प्राइमरी पर अंतिम ऑपरेशन "2015-05-15T02:10:56Z" से है, जबकि सेकेंडरी होने वाला अंतिम ऑपरेशन "2015-05-14T11:23:51Z" से है, जो मोटे तौर पर अंतर है 15 घंटे। वह विंडो आपकी प्रतिकृति ऑप्लॉग विंडो (आपके ऑप्लॉग में पहली और अंतिम ऑपरेशन प्रविष्टि के समय के बीच का अंतर) से अधिक हो सकती है। सीधे शब्दों में कहें, सेकेंडरी को पकड़ने के लिए प्राइमरी पर बहुत सारे ऑपरेशन हैं।

थोड़ा और विस्तृत (हालांकि सरलीकृत):एक प्रारंभिक सिंक के दौरान, द्वितीयक सिंक किया जाने वाला डेटा किसी दिए गए समय का डेटा होता है। जब उस समय के डेटा को सिंक किया जाता है, तो सेकेंडरी ओप्लॉग से जुड़ जाता है और उन परिवर्तनों को लागू करता है जो उक्त समय के बीच और अब ओप्लॉग प्रविष्टियों के अनुसार किए गए थे। यह तब तक अच्छी तरह से काम करता है जब तक कि ओप्लॉग समय पर उल्लिखित बिंदु के बीच सभी संचालन करता है। लेकिन oplog का आकार सीमित होता है (यह तथाकथित capped संग्रह है ) इसलिए यदि प्रारंभिक सिंक के दौरान ओप्लॉग की तुलना में प्राथमिक पर अधिक संचालन हो रहा है, तो सबसे पुराना संचालन "फीका" हो जाता है। द्वितीयक यह मानता है कि प्राथमिक के समान डेटा को "निर्माण" करने के लिए सभी ऑपरेशन आवश्यक नहीं हैं और RECOVERY में रहकर सिंक को पूरा करने से इनकार करते हैं। मोड।

समाधान

समस्या एक ज्ञात है और बग नहीं है, लेकिन मोंगोडीबी के आंतरिक कामकाज और विकास टीम द्वारा बनाई गई कई असफल-सुरक्षित धारणाओं का परिणाम है। इसलिए, स्थिति से निपटने के कई तरीके हैं। दुर्भाग्य से, चूंकि आपके पास केवल दो डेटा असर नोड हैं, सभी में डाउनटाइम शामिल है।

विकल्प 1:oplog का आकार बढ़ाएं

यह मेरा पसंदीदा तरीका है, क्योंकि यह एक बार और सभी के लिए समस्या से निपटता है। हालांकि, यह अन्य समाधानों की तुलना में थोड़ा अधिक जटिल है। उच्च स्तरीय दृष्टिकोण से, आप ये कदम उठा रहे हैं।

  1. प्राथमिक बंद करें
  2. डेटा फ़ाइलों तक सीधी पहुंच का उपयोग करके ओप्लॉग का बैकअप बनाएं
  3. mongod को फिर से शुरू करें स्टैंडअलोन मोड में
  4. वर्तमान ओप्लॉग को अस्थायी संग्रह में कॉपी करें
  5. वर्तमान ओप्लॉग हटाएं
  6. ऑप्लॉग को मनचाहे आकार के साथ फिर से बनाएं
  7. ओप्लॉग प्रविष्टियों को अस्थायी संग्रह से चमकदार नए ऑप्लॉग में वापस कॉपी करें
  8. पुनरारंभ करें mongod प्रतिकृति सेट के भाग के रूप में

प्रारंभिक समन्वयन करने से पहले सेकेंडरी के ऑप्लॉग को बढ़ाना न भूलें, क्योंकि यह भविष्य में किसी समय प्राथमिक हो सकता है!

विवरण के लिए, कृपया पढ़ें "oplog का आकार बदलें" प्रतिकृति सेट रखरखाव के संबंध में ट्यूटोरियल में

विकल्प 2:सिंक के दौरान ऐप को शट डाउन करें

यदि विकल्प 1 व्यवहार्य नहीं है, तो केवल वास्तविक अन्य समाधान प्रतिकृति सेट पर लोड करने वाले एप्लिकेशन को बंद करना है, सिंक को पुनरारंभ करें और इसके पूरा होने की प्रतीक्षा करें। स्थानांतरित किए जाने वाले डेटा की मात्रा के आधार पर, कई घंटों के साथ गणना करें।

एक निजी नोट

ओप्लॉग विंडो की समस्या एक सर्वविदित है। जबकि मोंगोडीबी के साथ प्रतिकृति सेट और शार्प क्लस्टर स्थापित करना आसान है, उन्हें ठीक से बनाए रखने के लिए कुछ ज्ञान और थोड़े अनुभव की आवश्यकता होती है। मूल बातें जाने बिना एक जटिल सेटअप वाले डेटाबेस जितना महत्वपूर्ण कुछ न चलाएं - यदि कुछ खराब (tm) होता है, तो यह FUBAR की स्थिति पैदा कर सकता है।



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. कई मॉडलों में मेरे नेवला कनेक्शन को निर्यात और पुन:उपयोग करें

  2. पर्ल मोंगो वस्तु आईडी खोजें

  3. mongodb php . का उपयोग करके कनेक्ट करें

  4. स्प्रिंग डेटा मोंगोडब - 'कर्सर' विकल्प की आवश्यकता है

  5. स्व-होस्ट किए गए पार्स से mLab डेटाबेस से कनेक्ट करने में असमर्थ