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

उच्च उपलब्धता के लिए ओपन edX MongoDB डेटाबेस कैसे परिनियोजित करें

ओपन एडएक्स एक ऐसा प्लेटफॉर्म है जो एडएक्स के पीछे व्यापक पैमाने पर स्केलेबल लर्निंग सॉफ्टवेयर तकनीक प्रदान करता है। ओपन एडएक्स प्रोजेक्ट ऑनलाइन पाठ्यक्रम बनाने, वितरित करने और विश्लेषण करने के लिए एक वेब-आधारित मंच है। यह सॉफ्टवेयर है जो edx.org और कई अन्य ऑनलाइन शिक्षा साइटों को शक्ति प्रदान करता है।

हमने ओपन एडएक्स प्लेटफॉर्म पर MySQL डेटाबेस के लिए एक उच्च उपलब्धता को तैनात करने के बारे में पहले ब्लॉग किया है। जैसा कि पहले कहा गया है, यह एक जटिल मंच है क्योंकि इसमें कई घटक शामिल हैं, और इस विशाल मंच का हिस्सा यह कई सेवाओं द्वारा कवर किया गया है:

  • ई-कॉमर्स:https://github.com/edx/ecommerce
  • कैटलॉग:https://github.com/edx/course-discovery
  • एलएमएस / स्टूडियो:https://github.com/edx/edx-platform
  • साख:https://github.com/edx/credentials
  • अंतर्दृष्टि:https://github.com/edx/edx-analytics-dashboard
  • Analytics API:https://github.com/edx/edx-analytics-data-api

अनिवार्य रूप से, ओपन एडक्स महामारी और ऑनलाइन प्रशिक्षण के बीच ऑनलाइन पाठ्यक्रमों के लिए एकदम सही है, जैसा कि आपने पहले ही आजमाया और लिया होगा, खासकर यदि आप उत्पाद प्रमाणन प्राप्त कर रहे हैं।

संक्षिप्त स्थापत्य अवलोकन

ओपन edX आर्किटेक्चर का केंद्रबिंदु edx-प्लेटफ़ॉर्म है, जिसमें लर्निंग मैनेजमेंट और कोर्स ऑथरिंग एप्लिकेशन (क्रमशः एलएमएस और स्टूडियो) शामिल हैं। इसके edx-प्लेटफ़ॉर्म के अलावा, संपूर्ण प्लेटफ़ॉर्म वाली तकनीकी सेवाओं में शामिल विभिन्न प्रौद्योगिकियाँ शामिल हैं जो इस सॉफ़्टवेयर के संपूर्ण जटिल स्तर को कवर करती हैं। पिछले दिसंबर में edX टीम प्रस्तुति से लिए गए आरेख को देखें।

आपके पास स्नोफ्लेक, Amazon RDS, MongoDB, Amazon S3, Elasticsearch, Memcached है , और रेडिस इस समृद्ध मंच को मूर्त रूप देने वाली प्रौद्योगिकियों के रूप में। फिर भी ओपन एडएक्स को स्थापित और सेटअप करना और भी कठिन है लेकिन मैं इस प्लेटफॉर्म को थोड़ा समझने के लिए एक सरल विकास वातावरण बनाने में कामयाब रहा।

जबकि, चलिए MongoDB पर ध्यान केंद्रित करते हैं जिसका उपयोग फ़ोरम, पाठ्यक्रम संरचना और पाठ्यक्रम संपत्तियों के लिए सामग्री संग्रहीत करने के लिए किया जाता है। प्रति-शिक्षार्थी डेटा MySQL में संग्रहीत किया जाता है, इसलिए यदि आप ओपन एडएक्स के साथ अपने MySQL के बारे में जानना चाहते हैं और उच्च उपलब्धता चाहते हैं, तो इसे यहां पढ़ें।

MongoDB के लिए सामग्री संग्रहीत करना

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

एक संपत्ति को "लॉक" या "अनलॉक" के रूप में अपलोड किया जा सकता है। एक बंद संपत्ति केवल एक विशेष पाठ्यक्रम लेने वाले छात्रों के लिए उपलब्ध है - edx-प्लेटफ़ॉर्म फ़ाइल परोसने से पहले उपयोगकर्ता की भूमिका की जाँच करता है। अनुरोध पर किसी भी उपयोगकर्ता को अनलॉक की गई संपत्तियां प्रदान की जाती हैं। जब कोई छात्र किसी पाठ्यक्रम में संपत्ति का अनुरोध करता है, तो संपूर्ण संपत्ति ग्रिडएफएस से प्रदान की जाती है।

अपने Open edX MongoDB डेटाबेस के लिए उच्च उपलब्धता सेट करना

मानते हैं कि अपना ओपन एडएक्स प्लेटफॉर्म स्थापित करना या स्थापित करना एक बड़ी चुनौती है। यह विशेष रूप से कठिन है कि आप इस प्लेटफ़ॉर्म या सॉफ़्टवेयर के लिए नए हैं, लेकिन इसमें एक बहुत ही शानदार वास्तुशिल्प डिज़ाइन है। हालाँकि, यह संभव है कि आपके MongoDB के साथ आपका सेटअप प्राथमिक के रूप में एक-नोड प्रतिकृति सेट स्टैंड हो। दूसरी ओर, यह सबसे अच्छा है कि आपके रेप्लिका सेट में प्राथमिक के अलावा कम से कम एक सेकेंडरी या मल्टीपल सेकेंडरी नोड होना चाहिए। यह आपके उच्च उपलब्धता सेटअप की सेवा करता है यदि आपका प्राथमिक कपट हो जाता है, तो आपका द्वितीयक प्रतिकृति नोड प्राथमिक भूमिका निभाएगा।

द्वितीयक प्रतिकृतियों के साथ एक प्रतिकृति सेट सेट करें

ऐसा करते हुए, आपको बस कम से कम दो सेकेंडरी रेप्लिका को जोड़ना और सेटअप करना है। आदर्श यह है कि, कम से कम, एक प्रतिकृति सेट में, आपके पास 3 नोड हैं, जिनमें से एक आपका प्राथमिक है, फिर अन्य दो नोड आपके सेकेंडरी हैं जो प्राथमिक की नकल कर रहे हैं। यह मोंगोडीबी रेप्लिका को चुनाव आगे बढ़ने की अनुमति देता है यदि प्राथमिक अपने सेकेंडरी के साथ कनेक्टिविटी खो देता है। यह आपको विश्वसनीयता, अतिरेक और निश्चित रूप से उच्च उपलब्धता प्रदान करता है। यह एक सरल सेटअप है जिसे आपको MongoDB के साथ एक उच्च उपलब्ध वातावरण प्राप्त करना पड़ सकता है।

यह उच्च उपलब्धता क्यों प्रदान करता है? MongoDB में एक प्रतिकृति सेट mongod प्रक्रियाओं का एक समूह है जो समान डेटा सेट को बनाए रखता है। MongoDB रेप्लिका सेट चुनाव का उपयोग यह निर्धारित करने के लिए करता है कि कौन सा सेट सदस्य उस घटना के लिए प्राथमिक हो जाएगा जो प्राथमिक नीचे चला जाता है या असामान्य रूप से समाप्त हो जाता है या कुछ कॉन्फ़िगरेशन बदल जाता है। प्रतिकृति सेट विभिन्न घटनाओं के जवाब में चुनाव को ट्रिगर कर सकते हैं, जैसे:

  • प्रतिकृति सेट में एक नया नोड जोड़ना,
  • प्रतिकृति सेट शुरू करना,
  • rs.stepDown() या rs.reconfig(), और
  • जैसी विधियों का उपयोग करके प्रतिकृति सेट रखरखाव करना
  • द्वितीयक सदस्य कॉन्फ़िगर किए गए समयबाह्य (डिफ़ॉल्ट रूप से 10 सेकंड) से अधिक समय के लिए प्राथमिक से कनेक्टिविटी खो देते हैं।

इस उदाहरण आरेख को लें, जो दर्शाता है कि चुनाव कैसे काम करता है।

MongoDB दस्तावेज़ीकरण की छवि सौजन्य

इसके अतिरिक्त, आप अन्य माध्यमिक प्रतिकृतियों का उपयोग इस प्रकार कर सकते हैं आपकी पठन वरीयता लेकिन यह आपके क्लाइंट के कनेक्शन के आधार पर सेटअप पर निर्भर करती है। आप कनेक्शन के लिए पठन वरीयता विकल्पों को पढ़कर अधिक जान सकते हैं या यहां पठन वरीयता की जांच कर सकते हैं।

अब, यह बहुत अच्छा लग रहा है लेकिन आपके एप्लिकेशन क्लाइंट एंडपॉइंट से निपटने जैसे होस्टनाम या आईपी पते को बदलने के लिए मैन्युअल परिवर्तन की आवश्यकता होती है। यह आदर्श नहीं है यदि आपके रेप्लिका सेट के ऊपर HaProxy की तरह एक लोड बैलेंसर है, क्योंकि MongoDB रेप्लिका सेट MongoDB के आंतरिक रूप से चुनाव करता है।

एक साझा क्लस्टर सेटअप करें

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

तो आपके आवेदन के सामने एक मोंगो क्यों है? ऐसे समय में जब आपके रेप्लिका ने प्राथमिक होस्टनाम या आईपी परिवर्तन को आवेदन के नजरिए से, चुनाव के बाद सेट किया है, इसका मतलब है कि आपको समापन बिंदु को भी बदलना होगा। मोंगोस के साथ, बस अपने एप्लिकेशन क्लाइंट को हमारे मोंगोस इंस्टेंस में से एक पर इंगित करें। आपका एप्लिकेशन क्लाइंट केवल मोंगोस इंस्टेंस के साथ इंटरफेस करता है और यह सब कुछ मायने रखता है। आपके MongoDB Shard सेटअप के उद्देश्य और कार्य का उपयोग करने वाले आपके क्वेरी अनुरोधों या लेन-देन को संभालने के लिए mongos एक होगा। इसका अर्थ है, आपकी ओपन edx कॉन्फ़िगरेशन फ़ाइलों में, कोई परिवर्तन नहीं किया जाना है। आपको अपने MongoDB रेप्लिका सेट में हुए परिवर्तनों को समझने के लिए अपने एप्लिकेशन सर्वर को पुनरारंभ करने की आवश्यकता नहीं है।

उच्च उपलब्धता कैसे सेट करें

उदाहरण के लिए, ClusterControl का उपयोग करना। ClusterControl का उपयोग करना सरल और कुशलता से प्राप्त किया जा सकता है क्योंकि यह बहुत जटिल सेटअप के लिए उन मैन्युअल कॉन्फ़िगरेशन और इंस्टॉलेशन से बचने के लिए UI पर किया जा सकता है।

मान लें कि आपके पास एक मौजूदा MongoDB उदाहरण है जिसमें Open edX डेटाबेस मौजूद है,

rs0:PRIMARY> show dbs;

admin                0.000GB

cs_comments_service  0.000GB

edxapp               0.087GB

local                0.118GB



rs0:PRIMARY> rs.status()

{

        "set" : "rs0",

        "date" : ISODate("2021-01-22T14:46:51.398Z"),

        "myState" : 1,

        "term" : NumberLong(17),

        "heartbeatIntervalMillis" : NumberLong(2000),

        "members" : [

                {

                        "_id" : 0,

                        "name" : "192.168.40.10:27017",

                        "health" : 1,

                        "state" : 1,

                        "stateStr" : "PRIMARY",

                        "uptime" : 133,

                        "optime" : {

                                "ts" : Timestamp(1611326680, 1),

                                "t" : NumberLong(17)

                        },

                        "optimeDate" : ISODate("2021-01-22T14:44:40Z"),

                        "electionTime" : Timestamp(1611326679, 1),

                        "electionDate" : ISODate("2021-01-22T14:44:39Z"),

                        "configVersion" : 2,

                        "self" : true

                }

        ],

        "ok" : 1

}

आप इसे केवल मौजूदा डेटाबेस के रूप में ClusterControl में आयात कर सकते हैं और ClusterControl की बैकअप सुविधा का उपयोग करके बैकअप ले सकते हैं। वैकल्पिक रूप से, आप mongodump का उपयोग कर सकते हैं या MongoDB के लिए Percona बैकअप का उपयोग करने का प्रयास कर सकते हैं।

अब, ClusterControl में, एक नए परिनियोजन के रूप में एक MongoDB Shard बनाएँ। यह निम्न चरणों द्वारा किया जा सकता है:

  1. परिनियोजन विज़ार्ड संवाद में एक नया MongoDB Shard परिनियोजित करें।

  1. SSH सेटिंग्स और इसके कॉन्फ़िगरेशन सर्वर और राउटर सेट करें। यह वह जगह है जहां आपके mongos उदाहरण आपके कॉन्फ़िगरेशन सर्वर से अलग होंगे।

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

  1. अपनी डेटाबेस सेटिंग परिभाषित करें

इस बिंदु पर, हिट करें परिनियोजन बटन और बस प्रतीक्षा करें क्योंकि ClusterControl द्वारा कार्य संसाधित किया जाता है।

  1. एक बार समाप्त होने के बाद, अब आप मोंगोडंप से लिए गए बैकअप को पुनर्स्थापित कर सकते हैं। उदाहरण के लिए, मैंने ClusterControl का उपयोग करके बैकअप लिया और फिर इसे अपने स्रोत बैकअप के रूप में उपयोग किया। mongorestore कमांड का उपयोग करते समय, सुनिश्चित करें कि आपका गंतव्य होस्ट आपके mongos उदाहरणों में से एक है। इस उदाहरण परिनियोजन के लिए, मेरे पास 192.168.40.233 होस्ट हैं।

$ mongorestore --host 192.168.40.233 --port 27017 --username <username> --password <password> --gzip  --archive=BACKUP-2/rs0.gz --authenticationDatabase=admin

2021-01-22T11:17:06.335+0000    preparing collections to restore from

2021-01-22T11:17:06.336+0000    don't know what to do with subdirectory "cs_comments_service", skipping...

2021-01-22T11:17:06.336+0000    don't know what to do with subdirectory "edxapp", skipping...

2021-01-22T11:17:06.337+0000    don't know what to do with subdirectory "admin", skipping...

2021-01-22T11:17:06.337+0000    don't know what to do with subdirectory "", skipping...

2021-01-22T11:17:06.372+0000    restoring to existing collection edxapp.modulestore.definitions without dropping

2021-01-22T11:17:06.372+0000    reading metadata for edxapp.modulestore.definitions from archive 'BACKUP-2/rs0.gz'

2021-01-22T11:17:06.373+0000    restoring edxapp.modulestore.definitions from archive 'BACKUP-2/rs0.gz'

2021-01-22T11:17:06.387+0000    restoring to existing collection edxapp.fs.chunks without dropping

2021-01-22T11:17:06.387+0000    reading metadata for edxapp.fs.chunks from archive 'BACKUP-2/rs0.gz'

…

……
  1. अब, आप तैयार हैं और फिर अपनी ओपन edX कॉन्फ़िगरेशन फ़ाइलों में कुछ बदलाव करें। . मेरे इंस्टॉलेशन सेटअप में, आप /edx/etc/studio.yml और  /edx/etc/lms.yml को अपडेट कर सकते हैं। आपको /edx/app/edxapp/lms.auth.json और /edx/app/edxapp/cms.auth.json फाइलों में भी फाइलों को बदलना पड़ सकता है और उन्हें अपने मोंगोस इंस्टेंस के सही होस्टनाम से बदलना पड़ सकता है।

  2. अपने mongos में सत्यापित करें और जांचें कि क्या डेटाबेस लोड किए गए हैं और उन तक पहुंचा जा सकता है,

[email protected]:~# mongo --host "mongodb://edxapp:[email protected]:27017/?authSource=admin"

MongoDB shell version v4.2.11

connecting to: mongodb://192.168.40.233:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb

Implicit session: session { "id" : UUID("00a3a395-3531-4381-972e-502478af38d1") }

MongoDB server version: 4.2.11

mongos> show dbs

admin                0.000GB

config               0.002GB

cs_comments_service  0.000GB

edxapp               0.104GB

अब आप तैयार हैं!!!

ClusterControl के वेब दृश्य में भी, एक बार जब ClusterControl परिनियोजन समाप्त कर लेता है, तो आपके पास एक टोपोलॉजी होगी जो इस तरह दिखेगी,

एक बार हो जाने के बाद, आप अपने ओपन एडएक्स को प्रबंधित करने और प्रबंधित करने के लिए पूरी तरह से तैयार हैं आपके पाठ्यक्रम!


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मोंगो अद्यतन सरणी तत्व (.NET ड्राइवर 2.0)

  2. मोंगो समूह क्वेरी फ़ील्ड कैसे रखें

  3. स्प्रिंग डेटा MongoDB लेनदेन

  4. Node.js . के साथ SSL पर MongoDB से कनेक्ट करना

  5. स्प्रिंग डेटा MongoDb:मैपिंगMongoConverter निकालें _class