Mongodb वृद्धिशील बैकअप


26

मुझे MongoDB replicaset के लिए वृद्धिशील बैकअप सेट करने का काम दिया गया था, जैसा कि प्रारंभ बिंदु, निश्चित रूप से, मैंने इसे googled और MongoDB डॉक्स पर कुछ भी नहीं पाया, मुझे स्टैक फ़्लोफ़्लो पर यह प्रश्न मिला , जिसने अपना समाधान विकसित करने के लिए प्रोत्साहित किया। के रूप में तयरा को बहुत सक्रिय नहीं पाया।

मैंने इसके बारे में पढ़ा oplogऔर महसूस किया कि लॉग को फिर से लिखने के लिए कुछ विकसित करना बहुत आसान था, लेकिन यह पता चलता है कि मेरे लिए ऐसा नहीं था mongorestore

अब मेरे पास बैश स्क्रिप्ट के साथ काम करने का एक समाधान है और यह काफी आसान था, यही कारण है कि मैं यहां पूछ रहा हूं कि क्या मेरे तर्क में कोई दोष है, या शायद कुछ ऐसा है जो मुझे भविष्य में काटेगा।

नीचे मैंने कैसे लागू किया है कि:

पूर्ण बैकअप प्रक्रिया

  1. एक माध्यमिक सदस्य पर ताला लिखता है db.fsyncLock()
  2. स्नैपशॉट लें
  3. ओपलॉग से अंतिम स्थिति रिकॉर्ड करें

    db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
  4. अनलॉक लिखता है db.fsyncUnlock()

वृद्धिशील बैकअप प्रक्रिया

  1. एक माध्यमिक सदस्य पर ताला लिखता है
  2. पूर्ण (या नवीनतम वृद्धिशील) बैकअप पर रिकॉर्डेड ओप्लोग स्थिति से डंप करें:

    mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 
        --query '{ "ts" : { $gt :  Timestamp(1437725201, 50) } }'
    
  3. नवीनतम ओप्लोग स्थिति (पूर्ण बैकअप के लिए उसी तरह) रिकॉर्ड करें

  4. अनलॉक लिखता है

पूर्ण बैकअप बहाल प्रक्रिया

  1. के सभी उदाहरणों को रोकें mongod
  2. कॉपी स्नैपशॉट को उस डेटा डायर के बॉक्स में रखें जो प्राथमिक होगा, लेकिन सभी को बाहर करना सुनिश्चित करें local*और mongod.lock इस पुनर्स्थापना तकनीक को दर्पण को तोड़कर पुन: कॉन्फ़िगर करना कहा जाता है
  3. प्राथमिक शुरू करें
  4. पुन: कॉन्फ़िगर करें प्रतिकृतियां
  5. बिना किसी डेटा के सेकंडरी शुरू करें, उन्हें शुरुआती सिंक करने दें। या नए localडेटाबेस से नए डेटाबेस से डेटा की प्रतिलिपि बनाएँ

वृद्धिशील बैकअप पुनर्स्थापित करें

जब हमने वृद्धिशील बैकअप बनाया तो इसे इस तरह संग्रहीत किया:

/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json

हम पर भरोसा कर रहे हैं, oplog.rs.bsonलेकिन हमें इसका नाम बदलना होगा, इसलिए यहां कदम हैं:

  1. निर्देशिका को बैकअप में बदलें: cd /mnt/mongo-test_backup/1/local
  2. json फ़ाइल हटाएं rm *.json
  3. बॉन फ़ाइल का नाम बदलें mv oplog.rs.bson oplog.bson
  4. इसे पुनर्स्थापित करें:

    mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local

मेरे पास यह सब स्क्रिप्ट है, मैं इसे बाद में GitHub पर कर सकता हूं।

सवाल यह है कि क्या तर्क में कोई दोष है? मैं थोड़ा संदिग्ध हूं क्योंकि प्रक्रिया काफी सीधी है और फिर भी मैं इसे कहीं भी प्रलेखित नहीं कर पाया।


2
आप किस संस्करण का उपयोग कर रहे हैं? यदि आप wiredtiger का उपयोग कर रहे हैं, तो db.fsyncLock () के साथ संदर्भित पहला आइटम एक समस्या है। MongoDB इंक का दावा है "WiredTiger के साथ, लॉक विकल्प के साथ fsync कमांड यह गारंटी नहीं दे सकता है कि डेटा फाइलें नहीं बदलती हैं। परिणामस्वरूप, बैकअप बनाने के उद्देश्यों के लिए स्थिरता सुनिश्चित करने के लिए इन विधियों का उपयोग न करें।" लिंक
SDillon

1
@SDillon 3.0.4 का उपयोग कर लेकिन WiredTiger का उपयोग नहीं करते, कम से कम अभी तक नहीं। मैं इसे उपयोग करने का निर्णय लेता हूं, ताला लिखने के बजाय हमें सभी को एक साथ mongod को रोकना होगा। यह एक उचित बिंदु है धन्यवाद
टियागो

मुझे वृद्धिशील बैकअप के लिए निम्नलिखित टूल मिला github.com/EqualExperts/Tayra आशा है कि इससे मदद मिलेगी
अहमद अबुस्सना

1
"संस्करण 3.2 में परिवर्तित: लॉक विकल्प के साथ fsync कमांड यह सुनिश्चित कर सकती है कि डेटा फ़ाइलें MMAPv1 या WiredTiger संग्रहण इंजन का उपयोग करके MongoDB उदाहरणों के लिए नहीं बदलती हैं, इस प्रकार बैकअप बनाने के उद्देश्यों के लिए स्थिरता प्रदान करती हैं।"
सुरक्षा

वृद्धिशील बैकअप करने के लिए सामान्य (और बिल्कुल आसान) तरीका LVM और स्नैपशॉट है। docs.mongodb.com/manual/tutorial/…
JJussi

जवाबों:


3

तुम्हारे प्रश्न का उत्तर देने के लिए। नहीं! आपके तर्क पर कोई विफल नहीं है और इसे समस्याओं के बिना काम करना चाहिए। हालांकि, अगर LVM स्नैपशॉट का उपयोग किया जा सकता है, तो यह बैकअप करने का बेहतर तरीका है।


आप LVM स्नैपशॉट का वृद्धिशील बैकअप कैसे करते हैं? धन्यवाद!
तानिसद्लज

LVM स्नैपशॉट स्वभाव से वृद्धिशील होते हैं। स्नैपशॉट समय में पल रहे हैं और केवल दर्ज किए गए परिवर्तन हैं।
जजूसि

बस एक स्नैपशॉट लिया हाँ, यह वृद्धिशील है। लेकिन अगर आप स्नैपशॉट को संग्रहीत करते हैं तो एक पूर्ण बैकअप है। उदाहरण के लिए, आप दोहराव जैसे विभिन्न वृद्धिशील बैकअपों को संग्रहीत नहीं कर सकते। और आप केवल वृद्धिशील बैकअप के लिए हर 30 मिनट में स्नैपशॉट बनाना शुरू नहीं कर सकते क्योंकि यह प्रदर्शन वास्तव में खराब होगा।
तनीसडलजे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.