किसी भी अन्य डेटाबेस की तरह MongoDB लेखन कार्य निष्पादित करते समय विफल हो सकता है। उस स्थिति में हमें एक ऐसी रणनीति की आवश्यकता होती है जो ऑपरेशन को कहीं और रखे ताकि डेटाबेस फिर से शुरू हो सके जब इसे फिर से संचालन में लाया जा सके।
MongoDB में हम जर्नलिंग का उपयोग करते हैं जिससे विफलता की स्थिति में डेटा उपलब्ध रखने के लिए ऑन-डिस्क जर्नल फ़ाइलों में लॉगिंग आगे लिखा जाता है। WiredTiger स्टोरेज इंजन डिस्क पर डेटा का एक सुसंगत दृश्य प्रदान करने के लिए चौकियों का उपयोग कर सकता है और MongoDB को अंतिम चेकपॉइंट से पुनर्प्राप्त करने की अनुमति देता है, लेकिन केवल तभी जब यह अप्रत्याशित रूप से बाहर नहीं निकला हो। अन्यथा, पिछले चेकपॉइंट के दौरान हुई जानकारी के लिए, ऐसे डेटा को पुनर्प्राप्त करने के लिए जर्नलिंग सक्षम होना चाहिए।
पुनर्प्राप्ति प्रक्रिया की प्रक्रिया यह है कि:डेटाबेस अंतिम चेकपॉइंट के पहचानकर्ता को खोजने के लिए डेटा फ़ाइलों को देखेगा, इस पहचानकर्ता का उपयोग जर्नल फाइलों में रिकॉर्ड के लिए खोज करने के लिए करेगा जो इससे मेल खाता है और फिर अंतिम चेकपॉइंट के बाद से जर्नल फाइलों में संचालन लागू करें।
वायर्ड टाइगर स्टोरेज इंजन में जर्नलिंग कैसे काम करती है
राइट ऑपरेशन शुरू करने वाले प्रत्येक क्लाइंट के लिए, WiredTiger एक जर्नल रिकॉर्ड बनाता है जो आंतरिक राइट ऑपरेशंस से बना होता है जो प्रारंभिक राइट द्वारा ट्रिगर किया गया था। एक संग्रह में एक दस्तावेज़ पर विचार करें जिसे अद्यतन किया जाना है और हम इसकी अनुक्रमणिका को भी संशोधित करने की अपेक्षा करते हैं। WiredTiger एक एकल जर्नल रिकॉर्ड बनाएगा जो अद्यतन संचालन और संबंधित अनुक्रमणिका संशोधनों को शामिल करेगा।
यह रिकॉर्ड एक इन-मेमोरी बफर में संग्रहीत किया जाएगा जिसकी अधिकतम क्षमता 128kB है। भंडारण इंजन तब इस बफ़र किए गए जर्नल रिकॉर्ड को डिस्क में सिंक करता है जब निम्न में से कोई एक पूरा हो जाता है:
- एक राइट ऑपरेशन में j:ट्रू की राइट चिंता शामिल है/इसका मतलब है।
- WiredTiger एक नई जर्नल फ़ाइल बनाता है जो प्रत्येक 100MB डेटा के बाद होती है।
- भंडारण के आधार पर प्रत्येक 100 मिलीसेकंड के बाद।journal.commitIntervalMs।
- प्रतिकृति सेट सदस्यों के मामले में:
- ऑप्लॉग प्रविष्टियों के लिए प्रतीक्षा कर रहे संचालन का उदाहरण यानि यथोचित रूप से संगत सत्रों के भाग के रूप में किए गए कार्यों को पढ़ना और ओप्लॉग के विरुद्ध स्कैनिंग क्वेरी को अग्रेषित करना।
- द्वितीयक सदस्यों के मामले में oplog प्रविष्टियों के प्रत्येक बैच आवेदन के बाद।
मोंगॉड के कठिन शटडाउन के मामले में, यदि लेखन कार्य प्रक्रिया में थे, तो जर्नल रिकॉर्ड WiredTiger बफ़र्स में रहने पर भी अपडेट खो सकते हैं।
जर्नल डेटा संपीड़न
MongoDB में डिफ़ॉल्ट सेटिंग WiredTiger को जर्नल डेटा के लिए तेज़ संपीड़न का उपयोग करने के लिए निर्देशित करती है। यह इस आधार पर बदला जा सकता है कि आप स्टोरेज.वायर्ड टाइगर.इंजनकॉन्फिग.जर्नलकंप्रेसर सेटिंग का उपयोग करके किस कम्प्रेशन एल्गोरिथम का उपयोग कर सकते हैं। ये लॉग रिकॉर्ड केवल तभी संकुचित होते हैं जब उनका आकार 128 बाइट्स से अधिक हो, जो कि WiredTiger का न्यूनतम लॉग रिकॉर्ड आकार है।
जर्नल फ़ाइल के आकार को सीमित करना
जर्नल फ़ाइल का अधिकतम आकार 100 एमबी है और इसलिए यदि फ़ाइल इस सीमा से अधिक है, तो एक नई फ़ाइल बनाई जाएगी।
जर्नल फ़ाइल को पुनर्प्राप्ति में उपयोग किए जाने के बाद या इसके बजाय पिछली चेकपॉइंट से पुनर्प्राप्त करने के लिए उपयोग की जा सकने वाली फ़ाइलों से पुरानी फ़ाइलें हैं, WiredTiger उन्हें स्वचालित रूप से हटा देता है।
पूर्व आवंटन
जर्नल फ़ाइलों को WiredTiger स्टोरेज इंजन के साथ पूर्व-आवंटित किया जा सकता है यदि mongod प्रक्रिया यह निर्धारित करती है कि जर्नल फ़ाइलों को नए बनाने की तुलना में पूर्व-आवंटित करना अधिक कुशल है।
इन-मेमोरी स्टोरेज इंजन में जर्नलिंग कैसे काम करती है
इन-मेमोरी स्टोरेज इंजन को MongoDB Enterprise संस्करण 3.2.6 से शुरू होकर सामान्य उपलब्धता (GA) के हिस्से के रूप में बताया गया था। इस स्टोरेज इंजन के साथ, डेटा को मेमोरी में रखा जाता है इसलिए कोई अलग जर्नलिंग तकनीक नहीं है। यदि कोई लेखन कार्य (j:true) लिखने की चिंता है, तो उन्हें तुरंत स्वीकार किया जाएगा।
इन-मेमोरी स्टोरेज इंजन का उपयोग करने वाले वोटिंग सदस्य के साथ प्रतिकृति सेट के लिए, किसी को राइटकॉन्सर्नमैजोरिटीजर्नलडिफॉल्ट को गलत पर सेट करना होगा। अन्यथा यदि यह सत्य पर सेट है, तो प्रतिकृति सेट स्टार्टअप चेतावनी लॉग करेगा।
जब यह विकल्प असत्य पर सेट होता है, तो डेटाबेस लेखन को स्वीकार करने से पहले ऑन-डिस्क जर्नल को लिखे जाने के लिए w:"बहुमत" लिखने की प्रतीक्षा नहीं करेगा। इस दृष्टिकोण का नुकसान यह है कि किसी दिए गए प्रतिकृति सेट में अधिकांश नोड्स के क्षणिक नुकसान (जैसे पुनरारंभ या क्रैश) की स्थिति में बहुमत लेखन संचालन वापस रोल कर सकता है।
यदि MMapv1 संग्रहण इंजन का उपयोग कर रहे हैं, तो पत्रिका पूर्व-आवंटन को --nopreallocation विकल्प का उपयोग करके अक्षम किया जा सकता है जब mongod प्रारंभ किया जाता है।
WiredTiger स्टोरेज इंजन के साथ, MongoDB संस्करण 4.0 से ऊपर की ओर, --nojournal विकल्प या यहां तक कि storage.journal.enabled:false को WiredTiger स्टोरेज इंजन का उपयोग करने वाले प्रतिकृति सेट सदस्यों के लिए निर्दिष्ट करना संभव नहीं है।
जर्नलिंग का प्रबंधन
जर्नलिंग अक्षम करना
जर्नलिंग को केवल स्टैंडअलोन परिनियोजन के लिए अक्षम किया जा सकता है और उत्पादन प्रणालियों के लिए इसकी अनुशंसा नहीं की जाती है। MongoDB संस्करण 4.0 के लिए ऊपर की ओर, कोई भी --nojournal विकल्प और न ही storage.journal.enabled:false निर्दिष्ट नहीं कर सकता है जब WiredTiger स्टोरेज इंजन का उपयोग करने वाले प्रतिकृति सेट सदस्य शामिल होते हैं।
--nojournal कमांड लाइन विकल्प के साथ जर्नलिंग स्टार्ट मोंगोड को अक्षम करने के लिए।
जर्नल स्थिति की निगरानी करें
जर्नल पर आंकड़े प्राप्त करने के लिए db.serverStatus() कमांड का उपयोग करें जो WiredTiger.log लौटाता है।
प्रतिबद्ध पावती प्राप्त करें
हम प्रतिबद्ध पावती प्राप्त करने के लिए j विकल्प के साथ लेखन चिंता का उपयोग करते हैं। {जे:सच}। इस मामले में जर्नलिंग को सक्षम किया जाना चाहिए अन्यथा मोंगॉड इंस्टेंस त्रुटि उत्पन्न कर सकता है।
यदि जर्नलिंग सक्षम है, तो w:"बहुमत" इसका अर्थ j:true हो सकता है।
प्रतिकृति सेट के लिए, जब j:true, सेटअप को जर्नल में लिखने के लिए केवल प्राथमिक की आवश्यकता होती है, भले ही w:
हालांकि, भले ही j:true एक प्रतिकृति सेट के लिए कॉन्फ़िगर किया गया हो, प्रतिकृति सेट प्राथमिक विफलता के कारण रोलबैक हो सकता है।
अप्रत्याशित शटडाउन डेटा पुनर्प्राप्ति
जर्नल निर्देशिका में सभी जर्नल फ़ाइलें फिर से चलाई जाती हैं जब भी सर्वर का पता चलने से पहले MongoDB क्रैश से पुनरारंभ होता है। चूंकि यह ऑपरेशन लॉग आउटपुट में रिकॉर्ड किया जाएगा, इसलिए --repair चलाने की कोई आवश्यकता नहीं होगी।
वायर्ड टाइगर जर्नल कंप्रेसर को बदलना
स्नैपी कंप्रेसर जर्नल के लिए संपीड़न का डिफ़ॉल्ट एल्गोरिदम है। हालांकि कोई इसे मोंगोड इंस्टेंस सेटअप के आधार पर बदल सकता है।
एक स्टैंडअलोन मोंगोड उदाहरण के लिए:
- storage.wiredTiger.engineConfig.journalCompressor को अपडेट करने के लिए इसे एक नए मान पर सेट करें। ऐसा करने का सबसे उपयुक्त तरीका कॉन्फ़िगरेशन फ़ाइल के माध्यम से है, लेकिन यदि आप कमांड-लाइन विकल्पों का उपयोग कर रहे हैं, तो आपको पुनरारंभ के दौरान --wiredTigerJournalCompressor कमांड-लाइन विकल्प को अपडेट करना होगा।
- उदाहरण के एक मोंगो खोल से कनेक्ट करके मोंगोड उदाहरण को बंद करें और आदेश जारी करें:db.shutdownServer() या db.getSiblingDB('admin शटडाउन सर्वर ()
- मोंगोड उदाहरण को पुनरारंभ करें:
- यदि कॉन्फ़िगरेशन फ़ाइल का उपयोग कर रहे हैं, तो उपयोग करें:mongod -f
- यदि कमांड-लाइन विकल्पों का उपयोग कर रहे हैं, तो WiredTigerJournalCompressor को अपडेट करें:
Mongod --wiredTigerJournalCompressor <differentCompressor|none>
- यदि कॉन्फ़िगरेशन फ़ाइल का उपयोग कर रहे हैं, तो उपयोग करें:mongod -f
एक रेप्लिका सेट सदस्य के लिए:
- मोंगॉड उदाहरण को बंद करें:db.shutdownServer() या db.getSiblingDB('admin).shutdownServer()
- कॉन्फ़िगरेशन फ़ाइल में निम्नलिखित परिवर्तन करें:
- भंडारण.जर्नल.सक्षम को गलत पर सेट करें।
- प्रतिकृति सेटिंग्स पर टिप्पणी करें
- पैरामीटर अक्षम करेंLogicalSessionCacheRefresh को सत्य पर सेट करें।
i.e
storage:
journal:
enabled: false
#replication:
# replSetName: replA
setParameter:
disableLogicalSessionCacheRefresh: true
-
मोंगॉड इंस्टेंस को फिर से शुरू करें:
-
यदि कॉन्फ़िगरेशन फ़ाइल का उपयोग कर रहे हैं, तो उपयोग करें:mongod -f
-
यदि कमांड-लाइन विकल्पों का उपयोग कर रहे हैं:--nojournal विकल्प शामिल करें, किसी भी प्रतिकृति कमांड-लाइन विकल्प को हटा दें यानी --replसेट करें और पैरामीटर अक्षम करेंLogicalSessionCacheRefresh को सही पर सेट करें
mongod --nojournal --setParameter disableLogicalSessionCacheRefresh=true
-
-
मोंगॉड इंस्टेंस को बंद करें:
db.shutdownServer() or db.getSiblingDB(‘admin).shutdownServer()
-
नए जर्नल कंप्रेसर के साथ प्रतिकृति सेट सदस्य के पुनरारंभ के लिए तैयार करने के लिए कॉन्फ़िगरेशन फ़ाइल अपडेट करें:संग्रहण निकालें। जर्नल.सक्षम, परिनियोजन के लिए प्रतिकृति सेटिंग्स को अनकम्मेंट करें, अक्षम लॉजिकल सत्र कैश रिफ्रेश विकल्प को हटा दें और अंत में स्टोरेज को हटा दें।
storage:
wiredTiger:
engineConfig:
journalCompressor: <newValue>
replication:
replSetName: replA
-
मोंगॉड इंस्टेंस को प्रतिकृति सेट सदस्य के रूप में पुनरारंभ करें
- यदि कॉन्फ़िगरेशन फ़ाइल का उपयोग कर रहे हैं, तो उपयोग करें:mongod -f
- यदि कमांड-लाइन विकल्पों का उपयोग कर रहे हैं:--nojournal और --wiredTigerJournalCompressor विकल्पों को हटा दें। प्रतिकृति कमांड-लाइन विकल्प शामिल करें और अक्षम लॉजिकल सत्र कैश रीफ्रेश पैरामीटर को हटा दें।
mongod --wiredTigerJournalCompressor <differentCompressor|none> --replSet ...
निष्कर्ष
MongoDB लिखने के संचालन के स्थायित्व की गारंटी देने के लिए, जर्नलिंग का उपयोग किया जाता है जिसके द्वारा डेटा को आगे के माध्यम से ऑन-डिस्क पर लिखा जाता है लॉगिंग यदि मोंगोडीबी अप्रत्याशित रूप से बाहर निकलता है और जर्नलिंग सक्षम नहीं किया गया था, तो वायर्ड टाइगर स्टोरेज इंजन (जो सबसे पसंदीदा है) अंतिम चौकियों के माध्यम से डेटा पुनर्प्राप्त कर सकता है, ऐसे डेटा को पुनर्प्राप्त करना असंभव हो जाता है। अन्यथा, यदि जर्नलिंग सक्षम है, तो फिर से शुरू होने पर MongoDB लेखन कार्यों को फिर से लागू कर सकता है और एक सुसंगत स्थिति बनाए रख सकता है।