क्या यह MongoDB के लिए एक वैध बैकअप रणनीति है?


11

मुझे लगभग 10GB के MongoDB डेटाबेस के साथ एक एकल समर्पित सर्वर मिला है। मुझे दैनिक बैकअप करने की आवश्यकता है, लेकिन मैं डेटाबेस के साथ डाउनटाइम नहीं कर सकता। क्या किसी एकल डिस्क पर प्रतिकृति सेट का उपयोग करना संभव है (अलग-अलग बंदरगाहों पर चलने वाले मोंडोड के 2 उदाहरणों के साथ), और केवल माध्यमिक एक ऑफ़लाइन ले जाएं और डेटा फ़ाइलों को ऑफसाइट स्टोरेज में बैकअप करें जैसे कि S3 (जर्नल चालू होता है)? या मास्टर / दास का उपयोग करना प्रतिकृति सेट से बेहतर होगा?

क्या यह व्यवहार्य है, और यदि हां, तो मुझे क्या संभावित समस्याएं हो सकती हैं? यदि नहीं, तो मैं इसे कैसे काम करूं?

जवाबों:


6

प्रतिकृति इस परिदृश्य में काम करेगी। हालाँकि, मैं नहीं बता सकता कि एक ही सर्वर पर दो MongoDB उदाहरण होने का एक अच्छा विचार है - यह सर्वर हार्डवेयर / सॉफ्टवेयर और लोड पर निर्भर करता है।

यह सुनिश्चित करने के लिए कि आपका backupMongoDB नोड मास्टर नहीं बनता है, इसके priorityपैरामीटर को 0उदाहरण के लिए सेट करें

rs.add({_id: 1, host: "localhost:<port>", priority: 0})

नोट : यदि आप डाउनटाइम नहीं कर सकते हैं, तो आप प्रतिकृति में कम से कम 2 प्राथमिक MongoDB नोड्स, लेख देखें


2

विचार करने के लिए एक रणनीति आपके प्रतिकृति पर बैकअप नोड पर "छिपी" विकल्प का उपयोग कर रही है। MongoDB ब्लॉग से:

छिपे हुए सर्वर isMaster () परिणामों में दिखाई नहीं देंगे। इसका मतलब यह भी है कि यदि ड्राइवर स्वचालित रूप से दासों को पढ़ता है तो उनका उपयोग नहीं किया जाएगा। एक छिपे हुए सर्वर में 0 की प्राथमिकता होनी चाहिए (आपके पास एक छिपा प्राथमिक नहीं हो सकता)। एक छिपे हुए सदस्य को जोड़ने के लिए, दौड़ें:

rs.add ({"_ id": num, "host": hostname, "प्राथमिकता": 0, "छिपा हुआ" सही "})


1

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

एकमात्र संभावित समस्या यह है कि मैं देख रहा हूं कि कुछ परिस्थितियों में आपके माध्यमिक को आपके प्राथमिक में पदोन्नत किया जा सकता है और आपको या तो a) नए माध्यमिक से अपना बैकअप लेने की आवश्यकता होगी, या b) अपनी बैकअप स्क्रिप्ट को स्मार्ट बनाने के लिए पर्याप्त है ताकि वह उस उदाहरण को बता सके MongoDB नीचे कदम है।

अच्छी खबर यह है कि यह काफी तुच्छ होना चाहिए

  1. अपने बैकअप स्रोत का पता लगाने के लिए कि कौन सा उदाहरण प्राथमिक है और कौन सा माध्यमिक है ( db.isMaster())
  2. कमांड rs.freeze()और rs.stepDown()कमांड का उपयोग कर या फिर से कनेक्ट करने के लिए बैकअप इंस्टेंस को समझें

क्या यह 0 को प्राथमिकता देने का विकल्प नहीं है जैसा कि अलेक्जेंडर का सुझाव है ताकि माध्यमिक कभी प्राथमिक न हो जाए?
जेम्स सिम्पसन

आपको कुछ परीक्षण करना होगा, लेकिन मुझे यकीन नहीं है कि यदि प्राथमिक कारण नीचे चला जाता है तो माध्यमिक बस स्टैंडबाय होगा। मैं हमेशा चाहता था कि मेरी दूसरी
चार्ल्स हूपर

1
>> आपके माध्यमिक को आपके प्राथमिक में पदोन्नत किया जा सकता है - जैसा कि उल्लेख किया गया है, द्वितीयक को प्राथमिकता में 0 पर सेट करना इसे कभी भी मास्टर में बदलने से रोक देगा।
जोंसोम ने मोनिका जूल 20'11

आप सहकर्मी नोड्स की अपनी सूची में से किसी एक सहकर्मी से जुड़ सकते हैं (यह कोई भी प्राथमिक, द्वितीयक, मध्यस्थ, या छिपा हुआ नोड हो सकता है), उस सहकर्मी से पूछें, जो द्वितीयक हैं ( rs.status()और पाश के माध्यम से result["members"]), और एक से कनेक्ट करें दूसरा बैकअप करने के लिए।
15
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.