आमने-सामने की बैठकें, आजकल, केवल न्यूनतम तक सीमित हैं, ऑनलाइन गतिविधियां शिक्षक-छात्र संपर्क के मुख्य तरीके के रूप में ले ली गई हैं। इसने मौजूदा ऑनलाइन "मीटिंग" प्लेटफॉर्म पर तनाव बढ़ा दिया (क्या कोई है जो नहीं जानता कि ज़ूम क्या है?) लेकिन ऑनलाइन लर्निंग प्लेटफॉर्म पर भी। ऑनलाइन टूल की उच्च उपलब्धता पहले से कहीं अधिक महत्वपूर्ण है और ऑपरेशन टीम अपने वातावरण के लिए टिकाऊ, अत्यधिक उपलब्ध आर्किटेक्चर बनाने के लिए दौड़ती है।
आपमें से कम से कम कुछ लोगों ने मूडल का उपयोग किया है - यह एक स्टैंडअलोन ऑनलाइन शिक्षण मंच है जिसे आप परिसर में तैनात कर सकते हैं और इसका उपयोग अपने संगठन के लिए ऑनलाइन प्रशिक्षण देने के लिए कर सकते हैं। जैसा कि हमने उल्लेख किया है, यह हमेशा की तरह एक टिकाऊ, अत्यधिक उपलब्ध फैशन में काम करने के लिए महत्वपूर्ण है। हम एक अत्यधिक उपलब्ध समाधान का प्रस्ताव करना चाहते हैं जिसमें बैकएंड डेटाबेस के रूप में मारियाडीबी शामिल है - एसिंक्रोनस प्रतिकृति और गैलेरा क्लस्टर दोनों।
पर्यावरण डिजाइन प्रक्रिया
हम एक ऐसी प्रक्रिया के साथ शुरुआत करना चाहेंगे जहां हम मूडल के लिए पर्यावरण को डिजाइन करने के पीछे की विचार प्रक्रिया की व्याख्या करेंगे। हम उच्च उपलब्धता चाहते हैं इसलिए एक एकल डेटाबेस नोड हमारे लिए काम नहीं करता है। हम कई नोड्स चाहते हैं और यह हमें पहले डिजाइन निर्णय की ओर ले जाता है। क्या हमें अतुल्यकालिक प्रतिकृति या गैलेरा क्लस्टर का उपयोग करना चाहिए? दूसरा प्रश्न है:हम कार्यभार को नोड्स में कैसे वितरित करेंगे? चलिए दूसरे से शुरू करते हैं।
इस ब्लॉग को लिखे जाने के समय के नवीनतम मूडल संस्करण (3.9) ने एक अच्छी सुविधा पेश की जिसे सेफ रीड्स कहा जाता है। यहाँ हल करने की समस्या लिखने के बाद पढ़ी जाती है। जब आप एक नोड का उपयोग करते हैं, तो दुनिया एक साधारण जगह होती है। तुम लिखते हो फिर पढ़ते हो। आपने जो कुछ भी लिखा है वह पहले से ही है। जब आप नोड्स जोड़ते हैं, हालांकि, चीजें बदल जाती हैं। अतुल्यकालिक प्रतिकृति में दास दसियों सेकंड या उससे भी अधिक पीछे रह सकते हैं। आप जो कुछ भी मास्टर पर लिखते हैं, उसे दास पर लागू होने में मिनट भी लग सकते हैं (यदि अधिक चरम मामलों में अधिक नहीं)। यदि आप एक लेखन निष्पादित करते हैं और फिर दासों में से एक से उसी डेटा को तुरंत पढ़ने का प्रयास करते हैं, तो आप एक बुरा आश्चर्य तक हो सकते हैं - डेटा वहां नहीं होगा। गैलेरा क्लस्टर "वस्तुतः" सिंक्रोनस प्रतिकृति का उपयोग करता है और इस विशेष मामले में "वस्तुतः" एक बड़ा अंतर बनाता है - गैलेरा पढ़ने के बाद लिखने की समस्याओं से प्रतिरक्षा नहीं है। स्थानीय नोड पर लेखन निष्पादन और क्लस्टर के शेष नोड्स पर लागू होने वाले राइटसेट के बीच हमेशा देरी होती है। निश्चित रूप से, यह सेकंड के बजाय मिलीसेकंड में मापा जाता है, लेकिन यह अभी भी इस धारणा को तोड़ सकता है कि आपने जो लिखा है उसे तुरंत पढ़ सकते हैं। लिखने के बाद आप जिस एकमात्र स्थान पर सुरक्षित रूप से पढ़ सकते हैं, वह वह नोड है जिस पर आपने डेटा लिखा था।
चूंकि मूडल रीड-आफ्टर-राइट पर बहुत अधिक निर्भर करता है, हम केवल पढ़ने के लिए और नोड्स जोड़कर आसानी से रीडिंग को स्केल नहीं कर सकते हैं। गैलेरा क्लस्टर के लिए हम गैलेरा को यह सुनिश्चित करने के लिए बाध्य करने के लिए wsrep-sync-wait कॉन्फ़िगरेशन सेटिंग का उपयोग करके समस्या को कम करने का प्रयास कर सकते हैं कि रीड निष्पादित करने के लिए सुरक्षित हैं। यह सिस्टम पर प्रदर्शन प्रभाव पैदा करता है क्योंकि सभी रीड्स को निष्पादित होने से पहले राइट्स को लागू करने के लिए इंतजार करना पड़ता है। यह मारियाडीबी क्लस्टर (और अन्य गैलेरा-आधारित समाधान) के लिए भी एक समाधान है, अतुल्यकालिक प्रतिकृति के लिए नहीं। सौभाग्य से, मूडल का समाधान इस मुद्दे को हल करता है। आप नोड्स की एक सूची को परिभाषित कर सकते हैं जो संभवतः पिछड़ रहे हैं और मूडल उनका उपयोग केवल उन पढ़ने के लिए करेगा जिन्हें लिखने के साथ अद्यतित होने की आवश्यकता नहीं है। सभी शेष पठन जिनके लिए डेटा को हमेशा अद्यतित रखने की आवश्यकता होती है, उन्हें लेखक नोड को निर्देशित किया जाएगा। इसलिए, मूडल की मापनीयता सीमित है क्योंकि केवल "सुरक्षित" पठन को बढ़ाया जा सकता है। हम निश्चित रूप से 3.9 की सुविधा का उपयोग करना चाहेंगे क्योंकि यह निर्धारित करने का एकमात्र सुरक्षित तरीका है कि किस चयन को कहां जाना चाहिए। यह देखते हुए कि सब कुछ मूडल की कॉन्फ़िगरेशन फ़ाइल में लिखा गया है, हम संभवतः एक लोड बैलेंसर का उपयोग करना चाहेंगे, अधिमानतः प्रॉक्सीएसक्यूएल, तर्क बनाने के लिए जो हमारे पढ़ने के वितरण को संभालेगा।
क्या हमें मारियाडीबी क्लस्टर या एसिंक्रोनस प्रतिकृति का उपयोग करना चाहिए? हम वास्तव में आपको दिखाएंगे कि दोनों का उपयोग कैसे करें। दोनों ही मामलों में मूडल के लिए कॉन्फ़िगरेशन काफी समान होगा। दोनों ही मामलों में हम ProxySQL को लोडबैलेंसर के रूप में उपयोग करेंगे। उन समाधानों के बीच मुख्य अंतर विफलता है। मारियाडीबी क्लस्टर से निपटने का तरीका आसान है - यदि एक नोड नीचे है, तो ProxySQL बस लिखने वाले ट्रैफ़िक को शेष नोड्स में से एक में ले जाएगा। हालांकि एसिंक्रोनस प्रतिकृति चीजें थोड़ी अलग हैं। यदि गुरु नीचे चला जाता है, तो विफलता होनी ही है। यह स्वचालित रूप से नहीं होता है, आपको या तो इसे हाथ से करना होगा या आप इसे पूरा करने के लिए किसी सॉफ़्टवेयर पर भरोसा कर सकते हैं। हमारे मामले में हम पर्यावरण को प्रबंधित करने और फेलओवर करने के लिए क्लस्टर कंट्रोल का उपयोग करेंगे, इसलिए उपयोगकर्ता के दृष्टिकोण से, एसिंक्रोनस प्रतिकृति और मारियाडीबी क्लस्टर के बीच बहुत अंतर नहीं है - दोनों ही मामलों में लेखक की विफलता स्वचालित रूप से नियंत्रित हो जाएगी और क्लस्टर स्वचालित रूप से ठीक हो जाएगा ।
हमने जो स्थापित किया है वह यह है कि हम एसिंक्रोनस और वस्तुतः सिंक्रोनस प्रतिकृति दोनों का प्रदर्शन करेंगे। हम मूडल 3.9 से सुरक्षित लेखन सुविधा का उपयोग करेंगे और हम प्रॉक्सीएसक्यूएल को लोडबैलेंसर के रूप में उपयोग करेंगे। उच्च उपलब्धता सुनिश्चित करने के लिए हमें एक से अधिक प्रॉक्सीएसक्यूएल इंस्टेंस की आवश्यकता होगी इसलिए हम उनमें से दो के साथ जाएंगे और डेटाबेस परत में प्रवेश का एक बिंदु बनाने के लिए हम वर्चुअल आईपी बनाने के लिए Keepalived का उपयोग करेंगे और इसे उपलब्ध ProxySQL में से एक को इंगित करेंगे। नोड्स। यहां बताया गया है कि हमारा डेटाबेस क्लस्टर कैसा दिख सकता है:
एसिंक्रोनस प्रतिकृति के लिए यह कुछ इस तरह दिख सकता है:
MariaDB प्रतिकृति का उपयोग करके मूडल के लिए अत्यधिक उपलब्ध डेटाबेस बैकएंड को परिनियोजित करना
आइए मारियाडीबी प्रतिकृति के साथ शुरू करते हैं। हम लोड बैलेंसर्स सहित संपूर्ण डेटाबेस बैकएंड को परिनियोजित करने के लिए ClusterControl का उपयोग करने जा रहे हैं।
MariaDB प्रतिकृति क्लस्टर परिनियोजित करना
सबसे पहले, हमें विज़ार्ड से "तैनाती" चुनना होगा:
फिर हमें SSH कनेक्टिविटी को परिभाषित करना चाहिए, पासवर्ड रहित, कुंजी-आधारित SSH एक्सेस है डेटाबेस इन्फ्रास्ट्रक्चर को प्रबंधित करने के लिए ClusterControl की आवश्यकता।
जब आप वे विवरण भरते हैं, तो विक्रेता और संस्करण चुनने का समय आ जाता है , सुपरयूज़र के पासवर्ड को परिभाषित करें और कुछ अन्य विवरणों पर निर्णय लें।
हम अभी के लिए मारियाडीबी 10.4 का उपयोग करने जा रहे हैं। अगले चरण के रूप में हमें प्रतिकृति टोपोलॉजी को परिभाषित करना होगा:
हमें नोड्स के होस्टनाम पास करने चाहिए और उन्हें प्रत्येक से कैसे संबंधित होना चाहिए अन्य। एक बार जब हम टोपोलॉजी से खुश हो जाते हैं, तो हम इसे तैनात कर सकते हैं। इस ब्लॉग के उद्देश्य के लिए हम अपने बैकएंड के रूप में मास्टर और दो दासों का उपयोग करेंगे।
हमारा पहला क्लस्टर तैयार है। अब, ProxySQL और Keepalived को परिनियोजित करते हैं।
ProxySQL परिनियोजित करना
ProxySQL के लिए कुछ विवरण भरना आवश्यक है - इंस्टॉल करने के लिए होस्ट चुनें इस पर, प्रॉक्सीएसक्यूएल संस्करण, प्रशासनिक और निगरानी उपयोगकर्ताओं के लिए प्रमाण-पत्र तय करें। आपको मौजूदा डेटाबेस उपयोगकर्ताओं को भी आयात करना चाहिए या अपने आवेदन के लिए एक नया बनाना चाहिए। अंत में, तय करें कि आप ProxySQL के साथ कौन से डेटाबेस नोड्स का उपयोग करना चाहते हैं और तय करें कि क्या आप निहित लेनदेन का उपयोग करते हैं। मूडल के मामले में यह सच नहीं है।
रख-रखाव तैनात करना
अगले चरण के रूप में हम Keepalived को परिनियोजित करेंगे।
प्रॉक्सीएसक्यूएल इंस्टेंस जैसे विवरणों को पास करने के बाद, जिन्हें मॉनिटर किया जाना चाहिए, वर्चुअल आईपी और इंटरफ़ेस वीआईपी को बाध्य होना चाहिए हम तैनात करने के लिए तैयार हैं। कुछ मिनटों के बाद सब कुछ तैयार हो जाना चाहिए और टोपोलॉजी नीचे की तरह दिखनी चाहिए:
मूडल और प्रॉक्सीएसक्यूएल को सुरक्षित राइट्स स्केल-आउट के लिए कॉन्फ़िगर करें
अंतिम चरण मूडल और प्रॉक्सीएसक्यूएल को सुरक्षित लेखन का उपयोग करने के लिए कॉन्फ़िगर करना होगा। हालांकि मूडल कॉन्फ़िगरेशन में डेटाबेस नोड्स को हार्डकोड करना संभव है, टोपोलॉजी परिवर्तनों को संभालने के लिए प्रॉक्सीएसक्यूएल पर भरोसा करना बेहतर होगा। डेटाबेस में एक अतिरिक्त उपयोगकर्ता बनाने के लिए हम क्या कर सकते हैं। सुरक्षित रीड को निष्पादित करने के लिए उस उपयोगकर्ता को मूडल में कॉन्फ़िगर किया जाएगा। ProxySQL को उस उपयोगकर्ता से निष्पादित सभी ट्रैफ़िक को उपलब्ध स्लेव नोड्स में भेजने के लिए कॉन्फ़िगर किया जाएगा।
सबसे पहले, एक उपयोगकर्ता बनाते हैं जिसका उपयोग हम केवल-पढ़ने के लिए उपयोग के लिए करेंगे।
हम यहां सभी विशेषाधिकार दे रहे हैं लेकिन उस सूची को सीमित करना संभव होना चाहिए ।
जिस उपयोगकर्ता को हमने अभी बनाया है, उसे दोनों ProxySQL इंस्टेंस में जोड़ा जाना चाहिए जो हमारे पास क्लस्टर में है ताकि ProxySQL को उस उपयोगकर्ता के रूप में प्रमाणित करने की अनुमति मिल सके। ClusterControl UI में आप "आयात उपयोगकर्ता" क्रिया का उपयोग कर सकते हैं।
हम उस उपयोगकर्ता को खोज सकते हैं जिसे हमने अभी बनाया है:
. हमारे डिफ़ॉल्ट कॉन्फ़िगरेशन में दो होस्टग्रुप हैं - होस्टग्रुप 10 जो हमेशा वर्तमान मास्टर और होस्टग्रुप 20 को इंगित करता है जो स्लेव नोड्स की ओर इशारा करता है। हम चाहते हैं कि यह उपयोगकर्ता स्लेव नोड्स को ट्रैफ़िक भेजे, इसलिए हम एचजी 20 को डिफ़ॉल्ट के रूप में असाइन करेंगे।बस, उपयोगकर्ता को उपयोगकर्ताओं की सूची में दिखाया जाएगा:
अब हमें अन्य ProxySQL नोड पर भी यही प्रक्रिया दोहरानी चाहिए या "सिंक इंस्टेंस" विकल्प। एक तरह से या दूसरे, दोनों ProxySQL नोड्स में मूडल_सेफरीड्स उपयोगकर्ता जोड़ा जाना चाहिए।
मूडल को परिनियोजित करने के लिए अंतिम चरण होगा। हम यहां पूरी प्रक्रिया से नहीं गुजरेंगे, लेकिन एक समस्या है जिसका हमें समाधान करना है। ProxySQL खुद को 5.5.30 के रूप में प्रस्तुत करता है और मूडल शिकायत करता है कि यह बहुत पुराना है। हम किसी भी संस्करण में इसे आसानी से संपादित कर सकते हैं:
एक बार यह हो जाने के बाद, हमें अस्थायी रूप से सभी ट्रैफ़िक को यहां भेजना होगा मालिक। यह ProxySQL में सभी क्वेरी नियमों को हटाकर पूरा किया जा सकता है। 'मूडल' उपयोगकर्ता के पास डिफ़ॉल्ट होस्टग्रुप के रूप में HG10 है, जिसका अर्थ है कि बिना किसी क्वेरी नियम के उस उपयोगकर्ता के सभी ट्रैफ़िक को मास्टर को निर्देशित किया जाएगा। दूसरा, सुरक्षित पढ़ता है, उपयोगकर्ता के पास डिफ़ॉल्ट होस्टग्रुप 20 है जो कि बहुत अधिक कॉन्फ़िगरेशन है जिसे हम रखना चाहते हैं।
एक बार यह हो जाने के बाद, हमें मूडल की कॉन्फ़िगरेशन फ़ाइल को संपादित करना चाहिए और सुरक्षित को सक्षम करना चाहिए फीचर पढ़ता है:
<?php // Moodle configuration file
unset($CFG);
global $CFG;
$CFG = new stdClass();
$CFG->dbtype = 'mysqli';
$CFG->dblibrary = 'native';
$CFG->dbhost = '192.168.1.111';
$CFG->dbname = 'moodle';
$CFG->dbuser = 'moodle';
$CFG->dbpass = 'pass';
$CFG->prefix = 'mdl_';
$CFG->dboptions = array (
'dbpersist' => 0,
'dbport' => 6033,
'dbsocket' => '',
'dbcollation' => 'utf8mb4_general_ci',
'readonly' => [
'instance' => [
'dbhost' => '192.168.1.111',
'dbport' => 6033,
'dbuser' => 'moodle_safereads',
'dbpass' => 'pass'
]
]
);
$CFG->wwwroot = 'http://192.168.1.200/moodle';
$CFG->dataroot = '/var/www/moodledata';
$CFG->admin = 'admin';
$CFG->directorypermissions = 0777;
require_once(__DIR__ . '/lib/setup.php');
// There is no php closing tag in this file,
// it is intentional because it prevents trailing whitespace problems!
यहां क्या हुआ है कि हमने ProxySQL में केवल पढ़ने के लिए कनेक्शन जोड़ा है जो मूडल_सेफरीड्स उपयोगकर्ता का उपयोग करेगा। यह यूजर हमेशा गुलामों की तरफ इशारा करेगा। यह मारियाडीबी प्रतिकृति के लिए मूडल के हमारे सेटअप को समाप्त करता है।
MariaDB क्लस्टर का उपयोग करके मूडल के लिए अत्यधिक उपलब्ध डेटाबेस बैकएंड को परिनियोजित करना
इस बार हम अपने बैकएंड के रूप में मारियाडीबी क्लस्टर का उपयोग करने का प्रयास करेंगे। फिर से, पहला कदम वही है, हमें विज़ार्ड से "तैनाती" चुनना होगा:
एक बार जब आप ऐसा कर लेते हैं, तो हमें SSH कनेक्टिविटी, पासवर्ड रहित, कुंजी- को परिभाषित करना चाहिए- डेटाबेस इन्फ्रास्ट्रक्चर को प्रबंधित करने के लिए ClusterControl के लिए आधारित SSH एक्सेस एक आवश्यकता है।
तब हमें विक्रेता, संस्करण, पासवर्ड होस्ट और कुछ और के बारे में निर्णय लेना चाहिए सेटिंग्स:
एक बार जब हम सभी विवरण भर देते हैं, तो हम तैनात करने के लिए अच्छे हैं।पी>
हम यहां आगे भी जारी रख सकते हैं लेकिन आगे के सभी चरण मूल रूप से मारियाडीबी प्रतिकृति के समान हैं, हम आपको केवल स्क्रॉल करने के लिए कहेंगे और "प्रॉक्सीएसक्यूएल को तैनात करना" अनुभाग और उसके बाद आने वाली हर चीज की जांच करेंगे। आपको ProxySQL को तैनात करना होगा, Keepalived, इसे फिर से कॉन्फ़िगर करना होगा, Moodle की कॉन्फ़िगरेशन फ़ाइल को बदलना होगा और यह बहुत अधिक है। हमें उम्मीद है कि यह ब्लॉग आपको Moodle के लिए मारियाडीबी क्लस्टर या प्रतिकृति द्वारा समर्थित अत्यधिक उपलब्ध वातावरण बनाने में मदद करेगा।