MongoDB में अक्सर एम्बेडेड सरणियों और सरणी वस्तुओं सहित डेटा के एक बड़े सेट के साथ काम करना शामिल होता है। इसलिए, यह सुनिश्चित करना हमेशा महत्वपूर्ण होता है कि पढ़ने और लिखने के संचालन को बढ़ाने के लिए आपकी डेटाबेस प्रसंस्करण दर जितनी जल्दी हो सके। इसके अलावा, डेटा असंगति के कारण उत्पन्न होने वाली डेटा विसंगतियों से बचने के लिए, आपको यह सुनिश्चित करने की आवश्यकता है कि यदि आप हार्डवेयर विफलता या कुछ सेवा रुकावटों की घटना से पुनर्प्राप्ति चाहते हैं तो आपका डेटा बढ़ी हुई उपलब्धता में है। MongoDB उस उद्देश्य के लिए कुछ 2 अवधारणाएँ प्रदान करता है - प्रतिकृति सेट और साझाकरण।
MongoDB में प्रतिकृति
मास्टर-स्लेव प्रतिकृति
यह सुनिश्चित करने के लिए उपयोग की जाने वाली सबसे पुरानी तकनीकों में से एक है कि एक सिस्टम विफल होने पर भी उपयोगकर्ताओं के लिए डेटा हमेशा उपलब्ध रहता है। हालांकि, मास्टर-स्लेव प्रतिकृति को मोंगोडीबी के नवीनतम संस्करणों में 3.2 से हटा दिया गया है और इस प्रकार प्रतिकृति सेट के साथ बदल दिया गया था।
इस कॉन्फ़िगरेशन को बनाने के लिए, एक मास्टर मोड में है और दूसरा स्लेव मोड पर विचार करते हुए 2 मोंगॉड इंस्टेंस शुरू करता है।
मास्टर मोड में इंस्टेंस शुरू करने के लिए, दौड़ें:
mongod --master --port portNumber
--मास्टर विकल्प mongod को एक local.oplog.$main संग्रह बनाने का निर्देश देता है जिसके साथ संचालन की एक सूची दासों के लिए डेटा को दोहराने में लागू करने के लिए कतारबद्ध होती है।
स्लेव मोड में एक मोंगॉड इंस्टेंस शुरू करने के लिए, बस दौड़ें:
mongod --slave --source <:>
यहां आपको --source तर्क में होस्टनाम और मास्टर इंस्टेंस के पोर्ट को निर्दिष्ट करने की आवश्यकता है। यह मास्टर स्लेव प्रतिकृति का उपयोग करने का एक संक्षिप्त अवलोकन है और चूंकि इसे बहिष्कृत कर दिया गया है, इसलिए हमारी रुचि रेप्लिका सेट पर होगी।
प्रतिकृति सेट
यह मोंगोडीबी प्रक्रियाओं का एक समूह है जिसे मोंगोड इंस्टेंस के रूप में जाना जाता है जो मूल रूप से एक ही डेटा सेट को होस्ट करता है। यह असर डेटा के लिए एक प्राथमिक नोड और कई माध्यमिक नोड्स द्वारा चित्रित किया गया है। प्राथमिक नोड सभी लेखन कार्यों को प्राप्त करता है और अपने ऑपरेशन लॉग में अपने डेटा सेट में अन्य सभी परिवर्तनों को रिकॉर्ड करता है। दूसरे छोर पर, द्वितीयक नोड प्राथमिक के ऑपरेशन लॉग को दोहराते हैं और संचालन को उनके डेटा सेट पर लागू करते हैं जैसे कि उनके डेटा सेट प्राथमिक के डेटा सेट को दर्शाते हैं। सरल शब्दों में, हम कह सकते हैं कि हमारे पास प्राथमिक नोड के रूप में मशीन ए और सेकेंडरी नोड के रूप में मशीन बी और सी है। मशीन ए एक राइट ऑपरेशन प्राप्त करता है और अपने डेटा में बदलाव करता है और फिर किए गए परिवर्तनों की एक सूची बनाता है। मशीन बी और सी तब प्रदान की गई सूची से संचालन की प्रतिलिपि बनाएंगे, इस मामले में ओप्लॉग, और उन्हें निष्पादित करेंगे ताकि परिणामी डेटा मशीन ए के समान हो।
जैसा कि पहले उल्लेख किया गया है, डेटा की उच्च उपलब्धता सुनिश्चित करना हमेशा महत्वपूर्ण होता है, खासकर उत्पादन सेटिंग में। विभिन्न मोंगोड उदाहरणों में डेटा अतिरेक प्रदान करके प्रतिकृति मदद करती है। डेटा हानि के मामले में, चूंकि एक ही डेटा की प्रतियां अलग-अलग डेटाबेस में कई स्थानों पर संग्रहीत की जाती हैं, इसलिए इसे मौजूदा में पुनर्प्राप्त करना आसान होता है।
कई चल रहे उदाहरणों के साथ, क्लाइंट से पढ़ने और लिखने के संचालन विभिन्न सर्वरों को भेजे जाते हैं और इसलिए प्रसंस्करण दर बढ़ जाती है। प्रतिकृति प्रक्रिया की मूल संरचना नीचे दिखाई गई है।
कभी-कभी प्राथमिक इंटरनेट विच्छेदन या सेवा रुकावट के कारण उदाहरण के लिए उपलब्ध नहीं हो सकता है। इस मामले में, प्रतिकृति सेट एक माध्यमिक को प्राथमिक नोड के रूप में नामित करेगा। जितना पढ़ने के अनुरोध मूल रूप से प्राथमिक के लिए किए जाते हैं, कुछ अवसरों पर पढ़ने के अनुरोध सेकेंडरी को भेजे जा सकते हैं लेकिन सावधान रहें क्योंकि लौटाए गए डेटा प्राथमिक में क्या प्रतिबिंबित नहीं कर सकते हैं या डेटा अद्यतित नहीं हो सकता है।
मध्यस्थ
प्राथमिक के चुनाव के मामले में, आपको चुनाव प्रक्रिया में वोट जोड़ने के लिए प्रतिकृति सेट के लिए एक अतिरिक्त मोंगोड उदाहरण की आवश्यकता होगी। इस उदाहरण को एक मध्यस्थ के रूप में जाना जाता है और इसकी मुख्य विशेषताएं हैं:
- इसमें डेटासेट की कॉपी नहीं है, इसलिए डेटा असर नोड्स के रूप में शक्तिशाली हार्डवेयर की आवश्यकता नहीं है..
- प्राथमिक बनने के लिए पदोन्नत नहीं किया जा सकता।
- उनके पास हमेशा 1 इलेक्टोरल वोट होता है ताकि रेप्लिका सेट में असमान संख्या में वोटिंग सदस्य हों, बिना किसी अतिरिक्त सदस्य के जो डेटा को दोहराता है। इसलिए, इसकी महत्वपूर्ण भूमिका प्राथमिक नोड का चयन करना है जब यह उपलब्ध नहीं है।
- यह अपरिवर्तित रहता है।
मध्यस्थ के विपरीत, अन्य प्रतिकृति सेटों को प्राथमिक से माध्यमिक और इसके विपरीत में परिवर्तित किया जा सकता है।
अतुल्यकालिक प्रतिकृति
प्रतिकृति की प्रक्रिया डेटा सिंक्रनाइज़ेशन के दो रूपों में होती है। सबसे पहले, सेट में सदस्यों को प्रारंभिक सिंक में पूर्ण डेटा के साथ पॉप्युलेट किया जाता है। बाद की प्रतिकृति संपूर्ण डेटा सेट में अग्रिम परिवर्तन लागू करने के लिए होती है।
प्रारंभिक सिंक में, प्रतिकृति के एक सदस्य से दूसरे में सेट किए गए डेटा की प्रतिलिपि बनाई जाती है। जब प्रक्रिया पूरी हो जाती है, तो सदस्य द्वितीयक नोड में बदल जाता है।
MongoDB स्वचालित विफलता
नेटवर्क डिस्कनेक्शन जैसी सेवा में रुकावट हो सकती है जो प्राथमिक और सेकेंडरी के बीच संचार को समाप्त करने के परिणामस्वरूप आती है। यदि वियोग 10 सेकंड से अधिक है या पूरी तरह से विफल हो जाता है, तो शेष प्रतिकृति सेट एक सदस्य को नया प्राथमिक बनने के लिए वोट देगा। अधिकांश मत प्राप्त करने वाला द्वितीयक नोड नया प्राथमिक बन जाता है।
MongoDB के संस्करण 3.0 में, एक प्रतिकृति सेट में 7 वोटिंग सदस्यों के साथ 50 सदस्य हो सकते हैं।
प्राथमिकता शून्य प्रतिकृति सेट सदस्य
ये द्वितीयक सदस्य हैं जो न तो प्राथमिक नोड बन सकते हैं और न ही चुनाव को ट्रिगर कर सकते हैं। डेटा सेट में महत्वपूर्ण भूमिकाएँ हैं:डेटा सेट प्रतियाँ बनाए रखना, प्राथमिक नोड का चुनाव करना और रीड ऑपरेशन करना। वे एक बैकअप की तरह काम करते हैं जहां एक नया सदस्य तुरंत जोड़ने में विफल हो सकता है। इस प्रकार यह अद्यतन डेटा को संग्रहीत करेगा और एक अनुपलब्ध सदस्य को तुरंत बदल सकता है।
MongoDB हिडन रेप्लिका सेट सदस्य
ये ऐसे सदस्य हैं जिनका क्लाइंट एप्लिकेशन से कोई संबंध नहीं है। उनका उपयोग अन्य माध्यमिक सदस्यों से भिन्न उपयोग आवश्यकताओं के साथ कार्यभार के लिए किया जाता है। वे केवल मूल प्रतिकृति ट्रैफ़िक प्राप्त करते हैं जो प्रारंभिक सिंक के दौरान होता है।
MongoDB विलंबित प्रतिकृति सेट सदस्य
ये कुछ निर्दिष्ट अवधि के भीतर प्राथमिक नोड की ओप्लॉग फ़ाइल से डेटा कॉपी करते हैं। वे हमेशा विलंबित स्थिति या सेट के पिछले रूप को दर्शाते हैं। इसलिए वे त्रुटियों का पता लगाने में महत्वपूर्ण हैं और यह संकेत देते हैं कि कोई उन त्रुटियों से कैसे उबर सकता है, उदाहरण के लिए यदि कोई डेटाबेस है जिसे छोड़ दिया गया है। विलंब की राशि चुनते समय, इस पर विचार किया जाना चाहिए:
- अवधि ऑपरेशन लॉग की क्षमता से कम होनी चाहिए, जो कि WiredTiger, MMAPv1 और इन-मेमोरी स्टोरेज इंजन के लिए 50GB है। अन्यथा, विलंबित सदस्य सफलतापूर्वक संचालन को दोहरा नहीं सकता है।
- विलंब की अवधि आपकी अपेक्षित रखरखाव विंडो अवधि के बराबर या थोड़ी अधिक होनी चाहिए।
कॉन्फ़िगरेशन
यह एक प्राथमिकता शून्य सदस्य है, यह छिपा हुआ है इसलिए आवेदनों के लिए दृश्यमान नहीं है और अंत में चुनाव प्रक्रिया में भाग ले सकता है। इसलिए प्राथमिकता को कॉन्फ़िगर करने के लिए, मान लें कि आपके प्रतिकृति सेट में 10 सदस्य हैं, आप सदस्य के रूप में n स्थिति में एक सदस्य का चयन कर सकते हैं [n] और इसके गुणों को इस प्रकार सेट कर सकते हैं:
{ "_id":, "Host":, "Priority":0, "slaveDelay":, "Hidden":true}
या प्राथमिक से जुड़े मोंगो खोल का उपयोग करके आप प्रतिकृति सेट के पहले सदस्य को विलंबित के रूप में सेट करने के लिए इस आदेश को चला सकते हैं:
cfg =rs.conf()cfg.members[0].priority =0cfg.members[0].hidden =truecfg.members[0].slaveDelay =3600rs.reconfig(cfg)
इस कॉन्फ़िगरेशन को सेट करने के बाद, विलंबित माध्यमिक प्राथमिक नहीं बन सकता है और इसलिए अनुप्रयोगों से छिपा हुआ है। सदस्य को ऑपलॉग संचालन से 1 घंटे (3600 सेकंड) की देरी होगी।
मोंगोडीबी डीबीए बनें - मोंगोडीबी को प्रोडक्शन में लानाजानें कि मोंगोडीबी को तैनात करने, मॉनिटर करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानना चाहिए मुफ्त में डाउनलोड करेंप्रतिकृति सेट कैसे प्रारंभ करें
इस गाइड में, हम कदम दर कदम देखेंगे कि हम MongoDB में एक प्रतिकृति सेट को कैसे कॉन्फ़िगर कर सकते हैं।
- मान लें कि आपके पास 3 मोंगोडब हैं जिन्हें आप दोहराना चाहते हैं और उन्हें निम्नानुसार कॉन्फ़िगर किया गया है:
- Mongod1.conf पोर्ट 27017 पर चल रहा है
- Mongod2.conf पोर्ट 27018 पर चल रहा है
- Mongod3.conf पोर्ट 27019 पर चल रहा है
प्रतिकृति सेट नाम जोड़ना सुनिश्चित करें जो प्रत्येक फ़ाइल में नहीं बदलेगा। आप ऐसा कर सकते हैं विकल्प को जोड़कर या बदलकर अपनी पसंद के नाम के लिए मूल्य सेट करें।
-
हम पहला उदाहरण चलाकर शुरू कर सकते हैं
sudo mongod --config /etc/mongo/mongod1.conf
यह है अगर, आपके पास कोई मोंगॉड रनिंग इंस्टेंस नहीं है। फिर अन्य उदाहरणों के लिए भी ऐसा ही करें। अपने मशीन रन में चल रहे इंस्टेंस की जांच करने के लिए
ps -ax | ग्रेप मोंगो
आपको कुछ इस तरह की सूची मिलेगी:
इसका मतलब है कि डिफ़ॉल्ट रूप से MongoDB में पहला उदाहरण पोर्ट 27017 पर चलता है, इसलिए हमारे पास यह सूची में पहला उदाहरण है। यदि आपने दूसरों को शुरू किया है, तो उन्हें सूची में उनके संबंधित पथ url के साथ भी रेखांकित किया जाएगा। मोंगो शेल में एक इंस्टेंस से कनेक्ट करने के लिए, यह कमांड चलाएँ:4328 ttys000 0:06.15 mongod4950 ttys001 0:00.00 grep mongo
हालाँकि हमारे मामले में हमें एक प्रतिकृति सेट नाम के साथ जुड़ने की आवश्यकता है, इसलिए हमें कमांड में इसका नाम जोड़ना होगा:पोर्ट 27017 इस मामले में हमारा रेप्लिकासेटनाम ="टेस्ट्रेप"mongo --port port_number यानी mongo --port 27017.
-
आइए देखें कि क्या rs.status()
. चलाकर कोई प्रतिकृति सेट सक्षम हैअगर आपको ऐसा परिणाम मिलता है:
{ "ok" :0, "errmsg" :"not run with --replSet", "code" :76, "codeName" :"NoReplicationEnabled"}
तो इसका मतलब है कि कोई प्रतिकृति सेट सक्षम नहीं है। अन्यथा यदि आपको परिणाम
. के रूप में मिलता है{ "ऑपरेशन टाइम":टाइमस्टैम्प (0, 0), "ओके":0, "एरम्सजी":"नो रिप्लेसेट कॉन्फिगरेशन प्राप्त नहीं हुआ", "कोड":94, "कोडनेम":"NotYetInitialized" , "$clusterTime" :{ "क्लस्टरटाइम" :टाइमस्टैम्प (0, 0), "हस्ताक्षर" :{ "हैश" :BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAAA="), "keyId" :NumberLong(0) } }}
तो इसका मतलब है कि प्रतिकृति अभी तक शुरू नहीं हुई है।
-
rs.initiate () विधि हमें एक नया प्रतिकृति सेट शुरू करने में मदद करेगी और जिस उदाहरण के भीतर इसे शुरू किया गया है वह हमारा प्राथमिक नोड बन जाता है। इसलिए हम आरंभ विधि चलाकर अपने उदाहरण में एक आरंभ कर सकते हैं। rs.initiate().
-
rs.status().members चलाकर प्रतिकृति सेट की स्थिति फिर से जांचें। अब आपको कुछ इस तरह दिखना चाहिए
"सदस्य" :[ { "_id" :0, "name" :"localhost:27018", "health" :1, "state" :1, "stateStr" :"PRIMARY", "uptime" " :577, "ऑप्टाइम" :{ "ts" :टाइमस्टैम्प (1535301271, 1), "टी" :NumberLong(1) }, "optimeDate" :ISODate("2018-08-26T16:34:31Z"), " syncingTo" :"", "syncSourceHost" :"", "syncSourceId" :-1, "infoMessage" :"सदस्य को सिंक करने के लिए नहीं मिला", "चुनाव का समय":टाइमस्टैम्प (1535301265, 1), "चुनाव दिनांक" :ISODate ("2018-08-26T16:34:25Z"), "configVersion" :1, "self" :true, "lastHeartbeatMessage" :"" } ]
अच्छा, जाना अच्छा है। हमारी रुचि सदस्य विकल्प होगी, जैसा कि हम देख सकते हैं कि यह n सरणी है जिसमें 1 सदस्य है। इस मामले में पहले सदस्य के StateStr विकल्प की जाँच करना प्राथमिक पर सेट है, जिसका अर्थ है कि यह हमारे प्राथमिक नोड के रूप में कार्य करेगा।
-
इसके होस्टनाम का उपयोग करके प्रतिकृति सेट में एक नया सदस्य जोड़ें। कनेक्टेड इंस्टेंस के होस्टनाम की जांच करने के लिए आप रन जोड़ना चाहते हैं
db.serverStatus().host
आपको कुछ ऐसा मिलेगा
ervername.local:27019
तो प्राथमिक से आप इस आदेश को मोंगो खोल में चलाकर एक और सदस्य जोड़ सकते हैं:
rs.add("servername.local:27019");
-
स्थिति आदेश चलाएँ
rs.status().members
यह जाँचने के लिए कि क्या परिवर्तन किए गए हैं।
अब आपके पास कुछ इस तरह दिखना चाहिए:
[ { "_id" :0, "name" :"localhost:27018", "health" :1, "state" :1, "stateStr" :"PRIMARY", "uptime" :11479, "ऑप्टाइम":{"टीएस":टाइमस्टैम्प (1535312183, 1), "टी":नंबरलॉन्ग (1)}, "ऑप्टाइमडेट":आईएसओडेट ("2018-08-26टी19:36:23जेड"), "सिंकिंग टू" :" ", "syncSourceHost" :"", "syncSourceId" :-1, "infoMessage" :"", "चुनाव का समय" :टाइमस्टैम्प(1535301265, 1), "चुनाव दिनांक" :ISODate("2018-08-26T16:34:25Z "), "configVersion" :2, "self" :true, "lastHeartbeatMessage" :"" }, { "_id" :1, "name" :"127.0.0.1:27019", "health" :1, "state " :2, "stateStr" :"SECONDARY", "uptime" :15, "optime" :{ "ts" :Timestamp(1535312183, 1), "t" :NumberLong(1) }, "optimeDurable" :{ " ts":टाइमस्टैम्प(1535312183, 1), "t" :NumberLong(1) }, "optimeDate" :ISODate("2018-08-26T19:36:23Z"), "optimeDurableDate" :ISODate("2018-08-26T19:36:23Z"), "lastHeartbeat" :ISODate("2018-08 -26T19:36:26.302Z"), "lastHeartbeatRecv" :ISODate("2018-08-26T19:36:27.936Z"), "pingMs" :NumberLong(0), "lastHeartbeatMessage" :"", "syncingTo" :"लोकलहोस्ट:27018", "सिंकसोर्सहोस्ट":"लोकलहोस्ट:27018", "सिंकसोर्सआईड":0, "इन्फोमैसेज":"", "कॉन्फिगवर्सन":2}]
अब हमारे पास 2 सदस्य हैं, एक प्राथमिक नोड है और दूसरा सेकेंडरी नोड है। आप अधिक सदस्य जोड़ सकते हैं लेकिन 50 से अधिक नहीं। अब हम उदाहरण में पोर्ट 27018 पर प्राथमिक के रूप में एक डेटाबेस बनाते हैं।
यदि हम प्राथमिक को डिस्कनेक्ट करते हैं, तो एक विफलता होगी और चूंकि हमारे पास केवल 1 प्राथमिक है, यह स्वचालित रूप से एक माध्यमिक में परिवर्तित हो जाएगा। अब अगर हम पोर्ट 27019 पर एक से जुड़ते हैं तो आपको उनके दस्तावेज़ों के साथ समान डेटाबेस और संग्रह प्राप्त करने चाहिए।
अब यदि डिस्कनेक्ट किए गए प्राथमिक नोड को फिर से जोड़ा जाता है, तो इसे द्वितीयक के रूप में जोड़ा जाएगा क्योंकि यह मौजूदा प्राथमिक के ओप्लॉग से संचालन की प्रतिलिपि बनाता है।
MongoDB प्रतिकृति सेट चिंता लिखें
यदि MongoDB एक सफल जर्नल राइट चिंता लौटाता है, तो डेटा को डिस्क में संग्रहीत किया जाएगा, इसलिए mongod के पुनरारंभ होने के बाद उपलब्ध हो जाएगा। हालाँकि, लिखने के संचालन के लिए, डेटा केवल तभी टिकाऊ होता है जब इसे दोहराया जाता है और प्रतिकृति सेट के अधिकांश मतदान सदस्य के पक्ष में जर्नल के लिए प्रतिबद्ध होता है।
कुछ डेटा अपडेट या सम्मिलित करने के लिए बहुत बड़ा हो सकता है, इसलिए डेटा को अन्य सदस्यों में दोहराने के लिए अपेक्षा से अधिक समय लग सकता है। इस कारण से यह सलाह दी जाती है कि जिस अवधि के भीतर एक ऑपरेशन निष्पादित किया जाना है, उसे पूरा करने के लिए राइट कॉन्सर्न कॉन्फ़िगरेशन को संपादित करना उचित है। डिफ़ॉल्ट राइट कॉन्सर्न कॉन्फ़िगरेशन यह निर्धारित करता है कि प्रतिकृति सेट को केवल प्राथमिक सदस्य से पावती की आवश्यकता होती है। एक डिफ़ॉल्ट लेखन चिंता केवल प्राथमिक के लिए लिखने के संचालन की पुष्टि करती है, लेकिन विशिष्ट लेखन संचालन के लिए लेखन चिंता को निर्दिष्ट करके कुछ प्रतिकृति सेट सदस्यों पर लेखन संचालन की जांच करने के लिए ओवरराइड किया जा सकता है। उदाहरण के लिए:
db.books.insert({name:"James",place:"Beijing"},{writeConcern:{w:3, wtimeout:3600}})
इस मामले में लिखने का विकल्प यह निर्देश देता है कि ऑपरेशन को प्राथमिक और कम से कम 2 सेकेंडरी में फैल जाने के बाद ही प्रतिक्रिया देनी चाहिए या यदि यह 3.6 सेकंड के बाद समाप्त हो जाए।
MongoDB के लिए राइट कंसर्न को कॉन्फ़िगर करना
MongoDB getLastErrorDefaults विकल्प हमें प्रतिकृति सेट कॉन्फ़िगरेशन में लेखन चिंता डिफ़ॉल्ट सेटिंग्स को बदलने के लिए पैरामीटर देता है। इसका तात्पर्य यह है कि परिणाम लौटाने से पहले अधिकांश मतदान सदस्यों में कार्रवाई पूरी होनी चाहिए।
cfg =rs.conf()cfg.settings ={},cfg.settings.getLastErrorDefaults ={w:"बहुमत", wtimeout:3600}rs.reconfig(cfg)
टाइमआउट वैल्यू राइटिंग ऑपरेशंस को ब्लॉक करने से रोकेगा, यानी अगर राइट चिंता को स्वीकार करने के लिए 5 सदस्य होने चाहिए, लेकिन दुर्भाग्य से प्रतिकृति सेट में 4 या उससे कम सदस्य हैं, तो ऑपरेशन तब तक ब्लॉक रहेगा जब तक कि सभी सदस्य उपलब्ध नहीं हो जाते। टाइमआउट थ्रेशोल्ड जोड़कर, इस अवधि के बाद ऑपरेशन ब्लॉकिंग को छोड़ दिया जाएगा।
प्रतिकृति अवरोधन
एक ऑपरेशन को अवरुद्ध करना विशेष रूप से जब सभी सदस्यों को दोहराया गया है, यह सुनिश्चित करता है कि प्रतिक्रिया वापस करने के लिए किसी अन्य प्रतिकृति सेट सदस्य के उपलब्ध होने की प्रतीक्षा में कोई और समय बर्बाद नहीं होगा। MongoDB getLastError कमांड विकल्प यह बताता है कि वैकल्पिक "w" विशेषता का उपयोग करके प्रतिकृति अद्यतन कैसे किया जाता है।
उदाहरण के लिए, यह क्वेरी
db.runCommand({getLastError:1, w:N, "wtimeout":5000});
इसके लिए आवश्यक है कि ब्लॉकिंग तब तक होगी जब तक कि N सदस्यों की संख्या ने अंतिम लेखन ऑपरेशन को दोहराया नहीं है। यदि N उपलब्ध है या 2 से कम है, तो क्वेरी वापस कर दी जाएगी। अन्यथा यदि N का मान 2 के बराबर है, तो प्राथमिक के बराबर मास्टर, उसके 1 दास को अंतिम ऑपरेशन में दोहराने के बाद ही प्रतिक्रिया देगा।
समयबाह्य पैरामीटर मूल रूप से मिलीसेकंड में समय निर्धारित करने के लिए है जिसके बाद getLastError कमांड टाइमआउट हो जाएगा और अंतिम विकल्प को दोहराने से पहले एक त्रुटि लौटाएगा।
ब्लॉक करना जितना फायदेमंद होता है, कभी-कभी उसकी भी एक सीमा होती है। यह रीड ऑपरेशंस को महत्वपूर्ण रूप से धीमा कर देता है, खासकर यदि आप "w" मान को बहुत बड़ा सेट करते हैं। मैं आपको बेहतर सुरक्षा और दक्षता के लिए "w" मान को 2 या 3 पर सेट करने की सलाह दूंगा।
MongoDB में वरीयता पढ़ें
यह मूल रूप से आसन्न मार्ग है जिसके साथ क्लाइंट रीड ऑपरेशंस को प्रतिकृति सेट में बनाया जाता है। डिफ़ॉल्ट MongoDB सेटअप रीड ऑपरेशंस को प्राथमिक में कॉन्फ़िगर करता है क्योंकि यह आपके द्वारा लाए जा रहे दस्तावेज़ के नवीनतम संस्करण के साथ है। जैसा कि पहले उल्लेख किया गया है, प्रतिकृति सेट का उपयोग करने का सर्वोच्च लाभ हमारे डेटाबेस सिस्टम के प्रदर्शन में सुधार करना है। इस प्रकार, उन अनुप्रयोगों के लिए विलंबता को कम करने के लिए कई माध्यमिक सदस्यों को पढ़ने के संचालन को वितरित करने की सलाह दी जाती है, जिनके लिए जरूरी डेटा की आवश्यकता नहीं होती है। हालांकि, ऐसे और भी महत्वपूर्ण कारण हैं जिनकी वजह से आपको अपनी मूल वरीयता के रूप में प्राथमिक का उपयोग करना चाहिए:
- विफलता के दौरान डेटा उपलब्धता बनाए रखना।
- भौगोलिक रूप से वितरित अनुप्रयोगों के लिए, प्राथमिक एक ही डेटासेंटर में ग्राहकों के लिए स्थानीय पठन प्रदान करेगा।
- फ्रंट-एंड एप्लिकेशन को प्रभावित नहीं करने के लिए, विशेष रूप से सिस्टम संचालन चलाने वाले।
Mongo.setReadPref() विधि
यह विधि मूल रूप से यह परिभाषित करने के लिए है कि क्लाइंट प्रतिकृति सेट के सदस्यों के लिए सभी प्रश्नों को कैसे रूट करेगा। इसमें 2 तर्क, मोड और टैगसेट लगते हैं।
मोड तर्क पठन वरीयता निर्दिष्ट करता है जो या तो प्राथमिक, प्राथमिक पसंदीदा, माध्यमिक, माध्यमिक पसंदीदा या निकटतम हो सकता है।
टैगसेट मोड कस्टम पठन वरीयता निर्दिष्ट करता है। आप उन्हें वस्तुओं की एक सरणी के रूप में भी निर्दिष्ट कर सकते हैं। सेटअप का एक उदाहरण होगा:
db.getMongo().setReadPref('primaryPreferred', [ { "dc":"east", "use":"production" }, { "dc":"east", "use":"रिपोर्टिंग"}, {"डीसी":"पूर्व"}, {}])
यहां क्या होता है कि, यदि ग्राहक पहले टैग तक पहुंचने का प्रयास करता है और अनुरोध पूरा नहीं होता है, तो उन्हें दूसरी पठन वरीयता के लिए चुना जाएगा।
वरीयता मोड पढ़ें
- प्राथमिक:यह परिभाषित करता है कि किसी दिए गए प्रतिकृति सेट से पढ़े जाने वाले सभी रीड ऑपरेशन प्राथमिक हैं और डिफ़ॉल्ट वरीयता रीड मोड है।
- प्राथमिक पसंदीदा:यदि केवल प्राथमिक उपलब्ध नहीं है, तो माध्यमिक से पठन संचालन किया जा सकता है।
- सेकेंडरी:सभी रीड ऑपरेशंस रेप्लिका सेट के सेकेंडरी मेंबर्स से बनाए जाते हैं।
- माध्यमिक पसंदीदा:यदि केवल कोई माध्यमिक उपलब्ध नहीं है, तो प्राथमिक से पठन संचालन किया जा सकता है।
- निकटतम:कम से कम नेटवर्क विलंबता वाले सदस्य को इसके प्रकार के बावजूद रीड ऑपरेशन के लिए चुना जाता है।
टैग सेट और उनका कॉन्फ़िगरेशन
ये ऐसे विकल्प हैं जो आपको उस तरह से मॉडल करने में सक्षम बनाते हैं जिस तरह से आप अपनी लेखन चिंता चाहते हैं और पसंद को पढ़ने के लिए पसंद करते हैं। वे प्रतिकृति सेट कॉन्फ़िगरेशन ऑब्जेक्ट के भीतर संग्रहीत हैं। अगर आप rs.conf().members चलाते हैं, तो आपको यह ऑब्जेक्ट वापस मिल जाएगा:
[ { "_id" :0, "host" :"localhost:27018", "arbiterOnly" :false, "buildIndexes" :true, "hidden" :false, "priority" :1, "tags" " :{ }, "slaveDelay" :NumberLong(0), "votes" :1 }, { "_id" :1, "host" :"127.0.0.1:27019", "arbiterOnly" :false, "buildIndexes" :सच, "छिपा हुआ":झूठा, "प्राथमिकता":1, "टैग":{}, "स्लेवडेले":नंबरलॉन्ग (0), "वोट":1}]
जैसा कि आप देख सकते हैं, प्रत्येक सदस्य के पास टैग विशेषता होती है।
पठन वरीयताएँ और चिंता लिखें के बीच मुख्य अंतर यह है कि, पूर्व में एक टैग के मूल्य पर विचार किया जाता है जब किसी सदस्य को पढ़ने के लिए चुना जाता है जबकि बाद वाला नहीं करता है।
मान लें कि रीड ऑपरेशन के लिए एक टैग सेट इस पर सेट है:
{ "disk":"ssd", "use":"reporting" }
प्रतिकृति सेट में एक सदस्य को पढ़ने के संचालन के लिए इन टैगों को पूरा करना होगा। इसलिए कहने के लिए, इस तरह का एक विन्यास
{ "disk":"ssd", "use":"Reporting", "rack":"a" }
प्रश्न को संतुष्ट करेगा जबकि यह एक
{ "disk":"ssd", "use":"production", "rack":"k" }
प्रश्न को संतुष्ट नहीं करेगा।
सेट रेप्लिका में टैग जोड़ना
प्रतिकृति सेट में आपके चयनित सदस्य के लिए, आप MongoDB में rs.conf() विधि का उपयोग करके टैग सेट जोड़ सकते हैं।
मान लें कि आपने अपने प्रतिकृति सेट सरणी के स्थान 1 में एक सदस्य का चयन किया है, आप निम्नानुसार टैग सेट जोड़ सकते हैं।
conf =rs.conf()conf.members[0].tags ={ "dc":"NYK", "use":"production" }conf.members[1].tags ={ " dc":"LON", "use":"reporting" }conf.members[2].tags ={ "use":"production" }rs.reconfig(conf)
MongoDB प्रतिकृति सेट के लिए परिनियोजन पैटर्न
- भौगोलिक रूप से वितरित प्रतिकृति सेट - बिजली हानि जैसे दोषों के खिलाफ डेटा की सुरक्षा के अलावा डेटा की अतिरेक को बढ़ाता है। चल रहे इंस्टेंस कई स्थानों पर स्थित हैं।
- तीन सदस्य प्रतिकृति सेट - प्रतिकृति सेट के लिए बुनियादी मानक वास्तुकला।
- चार या अधिक सदस्य प्रतिकृति सेट - डेटा की व्यापक अतिरेक को सक्षम करता है और प्रतिकृति सेट में पढ़ने के संचालन के व्यापक वितरण का भी समर्थन करता है।
MongoDB प्रतिकृति सेट परिनियोजन ट्यूनिंग तकनीक
एक आदर्श प्रतिकृति सेट के लिए एक उत्पादन प्रणाली के लिए कम से कम 3 सदस्यों के साथ एक अच्छी तरह से तैयार वास्तुकला की आवश्यकता होगी। ये परिनियोजन रणनीतियाँ आपको एक बेहतरीन प्रतिकृति सेट को सक्षम करने में मदद करेंगी।
- रिपोर्टिंग और बैकअप जैसे समर्पित कार्यों का समर्थन करने के लिए विलंबित और छिपे हुए सदस्यों का उपयोग करें।
- हमेशा तैनात सदस्यों की संख्या विषम बनाएं। जैसा कि हमने ऊपर चर्चा की है, प्राथमिक के चुनाव में विषम संख्या में सदस्यों की आवश्यकता होगी। इसलिए सुनिश्चित करें कि आपके पास एक विषम संख्या है और यदि नहीं, तो आप हमेशा एक मध्यस्थ जोड़ सकते हैं।
- पढ़ने के लिए भारी तैनाती के लिए, आपको लोड को संतुलित करने की आवश्यकता होगी। इसलिए आपको पठन प्रदर्शन को बेहतर बनाने के लिए माध्यमिक को पठन वितरित करने की आवश्यकता होगी। इसके अलावा, जब डेटा समय के साथ बढ़ता है, तो आप अधिक सदस्यों को जोड़ सकते हैं और उन्हें वितरित कर सकते हैं लेकिन ध्यान रखें कि आपको इसे इस तरह से कॉन्फ़िगर करना होगा कि प्राथमिक डिजाइन को चुनना सर्वोपरि है।
- हमेशा गलती सहनशीलता पर विचार करें। यह मूल रूप से यह निर्धारित कर रहा है कि किसी दिए गए समय में कितने सदस्य अनुपलब्ध हो सकते हैं और कितने सदस्य प्राथमिक की चुनाव प्रक्रिया को बनाए रखने के लिए बने रहेंगे। यदि आपके पास प्राथमिक नहीं है, तो दुर्भाग्य से प्रतिकृति सेट किसी भी लेखन कार्य को स्वीकार नहीं करेगा।
- मांग आने से पहले मौजूदा प्रतिकृति सेट में नए सदस्य जोड़ें।
- रेप्लिका सेट टैग सेट का उपयोग यह सुनिश्चित करने के लिए करें कि सभी ऑपरेशन विशिष्ट डेटा केंद्रों पर दोहराए गए हैं। आप इन टैग्स का उपयोग विशिष्ट परिनियोजन मशीनों के लिए रीड ऑपरेशंस के लिए रूटिंग में भी कर सकते हैं।
- नेटवर्क विभाजन से उत्पन्न होने वाले झटके से बचने के लिए अपने अधिकांश सदस्यों को एक स्थान पर तैनात करें। नेटवर्क विभाजन डेटा केंद्रों के बीच डिस्कनेक्ट किए गए संचार का परिणाम हो सकता है, जिसके परिणामस्वरूप प्रतिकृति प्रक्रिया और प्राथमिक चुनाव की प्रक्रिया में बाधा उत्पन्न हो सकती है।
- सुरक्षा कारणों से, अपने सदस्यों को भौगोलिक रूप से वितरित करने के अलावा कुछ छिपाएं भी। आप कम से कम 2 या 3 सदस्यों की प्राथमिकता शून्य पर सेट कर सकते हैं ताकि उन्हें प्राथमिक बनाने से रोका जा सके।
- डेटा हानि से बचाव के लिए जर्नलिंग का उपयोग करें जिसके परिणामस्वरूप बिजली की विफलता जैसी कोई चीज़ हो सकती है। यह सुनिश्चित करता है कि डेटा अचानक बंद होने की स्थिति में डिस्क पर लिखा जाता है।
ऑपरेशन लॉग (ओप्लॉग)
ओप्लॉग उन मास्टर ऑपरेशंस का रिकॉर्ड रखता है जिन्हें दासों पर लागू किया जाना है। यह oplog.$main संग्रह में स्थानीय नामक डेटाबेस में संग्रहीत है। यह तब बनाया जाता है जब आप पहली बार प्रतिकृति सेट सदस्य प्रारंभ करते हैं। ऊपरी सीमा पर, सभी भंडारण इंजनों के लिए oplog 50GB के आकार तक सीमित है। ओप्लॉग का आकार डिफ़ॉल्ट सेटिंग से बदला जा सकता है। यदि यह आकार उदाहरण के लिए 24 घंटे के संचालन में पहुंच जाता है, तो सेकेंडरी इस अवधि के दौरान आराम से इसकी नकल नहीं कर पाएंगे और अंत में नकल बिल्कुल भी नहीं कर पाएंगे। आप विकल्प का उपयोग करके oplog का आकार बदल सकते हैं replSetResizeOplog अर्थात
db.database({replSetResizeOplog:1, size:16384})
यदि आप इस oplog का आकार कम करना चाहते हैं, तो इसके परिणामस्वरूप कुछ डेटा हटा दिया जाएगा। प्रतिकृति सेट में इसका मुख्य प्रभाव यह है कि इस नोड से समन्वयित सदस्य पुराने हो जाते हैं। इस प्रकार, आपको इन सदस्यों को फिर से सिंक करना होगा।
कार्यभार पैटर्न जिन्हें एक बड़े ओपलॉग आकार की आवश्यकता होगी
- एक साथ कई दस्तावेज़ों में अपडेट करें। नोड्स में परिणामों में सुधार के लिए एकाधिक अद्यतन संचालन को एक व्यक्तिगत ऑपरेशन में अनुवादित किया जाना चाहिए। यह ऑपरेशन ऑप्लॉग स्पेस के विशाल स्थान का उपयोग करेगा।
- इन-प्लेस अपडेट की महत्वपूर्ण संख्या। यह आमतौर पर तब होता है जब दस्तावेजों के डेटा को अपडेट करना जरूरी नहीं कि इस दस्तावेज़ का आकार बढ़ाना हो। डेटाबेस ओपलॉग में बड़ी संख्या में ऑपरेशन रिकॉर्ड करेगा जिससे इसका आकार बढ़ जाएगा।
- डिलीटेशन डेटा की उतनी ही मात्रा के बराबर होता है, जितना कि इंसर्ट। ऐसा तब होता है जब आप अपने द्वारा डाले गए डेटा की मात्रा के बराबर (लगभग) डेटा की मात्रा को हटाने का प्रयास करते हैं। इस ऑपरेशन से ओप्लॉग का आकार बढ़ जाएगा।
निष्कर्ष
प्रतिकृति डेटाबेस का एक महत्वपूर्ण पहलू है जिसे डेवलपर्स को समझने की आवश्यकता है। यह डेटा की बढ़ी हुई उपलब्धता सुनिश्चित करता है। आपका MongoDB सर्वर डाउन हो सकता है, उदाहरण के लिए, पावर आउटेज के कारण लेकिन आप अभी भी चाहेंगे कि आपके क्लाइंट इसके डेटा तक पहुंचें। यदि आपने किसी अन्य सर्वर में डेटा दोहराया है, तो प्राथमिक सर्वर विफल होने पर आपके क्लाइंट इससे डेटा एक्सेस करना जारी रख सकेंगे। इसके अलावा, लोड संतुलन में वृद्धि हुई है ताकि सभी उपयोगकर्ताओं के एक एकल सर्वर तक पहुँचने के बजाय, हमने द्वितीयक प्रतिकृतियों से ट्रैफ़िक की सेवा के ट्रेडऑफ़ को देखा है।