MariaDB
 sql >> डेटाबेस >  >> RDS >> MariaDB

मूडल डेटाबेस को स्केल करना

Moodle ऑनलाइन पाठ्यक्रम चलाने के लिए एक बहुत लोकप्रिय मंच है। 2020 में हम जिस स्थिति को देखते हैं, मूडल, जूम जैसे संचारकों के साथ, उन सेवाओं की रीढ़ बनाता है जो ऑनलाइन सीखने और घर पर रहने की शिक्षा की अनुमति देती हैं। पिछले वर्षों की तुलना में मूडल प्लेटफॉर्म पर मांग में काफी वृद्धि हुई है। नए प्लेटफॉर्म बनाए गए हैं, प्लेटफॉर्म पर अतिरिक्त भार डाला गया है, जो ऐतिहासिक रूप से केवल एक सहायक उपकरण के रूप में काम करता था और अब उनका उद्देश्य पूरे शैक्षिक प्रयास को चलाना है। मूडल को कैसे स्केल करें? इस विषय पर हमारा एक ब्लॉग है। मूडल के लिए डेटाबेस बैकएंड को कैसे स्केल करें? खैर, यह एक और कहानी है। आइए इस पर एक नज़र डालते हैं क्योंकि डेटाबेस का विस्तार करना सबसे आसान काम नहीं है, खासकर अगर मूडल अपना थोड़ा सा ट्विस्ट जोड़ता है।

प्रवेश बिंदु के रूप में हम अपनी पिछली पोस्ट में वर्णित आर्किटेक्चर का उपयोग करेंगे। प्रॉक्सीएसक्यूएल के साथ मारियाडीबी क्लस्टर और चीजों के शीर्ष पर रखा गया।

जैसा कि आप देख सकते हैं, हमारे पास ProxySQL के साथ एक तीन नोड मारियाडीबी क्लस्टर है जो कि उपयोगकर्ता के आधार पर शेष ट्रैफ़िक से सुरक्षित पठन को विभाजित करता है।

<?php  // Moodle configuration file



unset($CFG);

global $CFG;

$CFG = new stdClass();



$CFG->dbtype    = 'mysqli';

$CFG->dblibrary = 'native';

$CFG->dbhost    = '192.168.1.222';

$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.222',

      '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 क्लस्टर ट्रैफ़िक का सामना नहीं कर सकता है तो क्या किया जा सकता है?

आइए पहले परिदृश्य से शुरू करते हैं।

ProxySQL इंस्टेंस ओवरलोडेड है

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

यदि आप अधिक CPU कोर का उपयोग करने में सक्षम होना चाहते हैं, तो यह है सेटिंग आपको भी बदलने की जरूरत है।

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

MariaDB क्लस्टर ओवरलोडेड है

अब हम एक अधिक गंभीर मुद्दे के बारे में बात कर रहे हैं। बेशक, उदाहरणों के आकार को बढ़ाने से हमेशा की तरह मदद मिलेगी। दूसरी ओर, "सुरक्षित पठन" सीमा के कारण क्षैतिज स्केल आउट कुछ हद तक सीमित है। ज़रूर, आप क्लस्टर में और नोड्स जोड़ सकते हैं लेकिन आप उनका उपयोग केवल सुरक्षित रीड के लिए कर सकते हैं। यह आपको किस हद तक बढ़ने देता है, यह कार्यभार पर निर्भर करता है। केवल-पढ़ने के लिए शुद्ध कार्यभार (सामग्री, मंचों आदि के माध्यम से ब्राउज़ करना) के लिए यह काफी अच्छा लगता है:

MySQL [(none)]> SELECT hostgroup, srv_host, srv_port, status, queries FROM stats_mysql_connection_pool WHERE hostgroup IN (20, 10) AND status='ONLINE';

+-----------+---------------+----------+--------+---------+

| hostgroup | srv_host      | srv_port | status | Queries |

+-----------+---------------+----------+--------+---------+

| 20        | 192.168.1.204 | 3306     | ONLINE | 5683    |

| 20        | 192.168.1.205 | 3306     | ONLINE | 5543    |

| 10        | 192.168.1.206 | 3306     | ONLINE | 553     |

+-----------+---------------+----------+--------+---------+

3 rows in set (0.002 sec)

यह काफी हद तक 1:20 का अनुपात है - लेखक को प्रभावित करने वाली एक क्वेरी के लिए हमारे पास 20 "सुरक्षित पठन" हैं जिन्हें शेष नोड्स में फैलाया जा सकता है। दूसरी ओर, जब हम डेटा को संशोधित करना शुरू करते हैं, तो अनुपात तेज़ी से बदलता है।

MySQL [(none)]> SELECT hostgroup, srv_host, srv_port, status, queries FROM stats_mysql_connection_pool WHERE hostgroup IN (20, 10) AND status='ONLINE';

+-----------+---------------+----------+--------+---------+

| hostgroup | srv_host      | srv_port | status | Queries |

+-----------+---------------+----------+--------+---------+

| 20        | 192.168.1.204 | 3306     | ONLINE | 3117    |

| 20        | 192.168.1.205 | 3306     | ONLINE | 3010    |

| 10        | 192.168.1.206 | 3306     | ONLINE | 6807    |

+-----------+---------------+----------+--------+---------+

3 rows in set (0.003 sec)

कई ग्रेड जारी करने, फ़ोरम विषय बनाने और कुछ पाठ्यक्रम सामग्री जोड़ने के बाद यह एक आउटपुट है। जैसा कि आप देख सकते हैं, इस तरह के एक सुरक्षित/असुरक्षित प्रश्न अनुपात के साथ लेखक पाठकों की तुलना में पहले संतृप्त हो जाएगा इसलिए अधिक नोड्स जोड़कर स्केलिंग करना उपयुक्त नहीं है।

इसके बारे में क्या किया जा सकता है? "विलंबता" नामक एक सेटिंग है। कॉन्फ़िगरेशन फ़ाइल के अनुसार, यह निर्धारित करता है कि लिखने के बाद तालिका को पढ़ना कब सुरक्षित है। जब लेखन होता है, तो तालिका को संशोधित के रूप में चिह्नित किया जाता है और "विलंबता" समय के लिए सभी चयन लेखक नोड को भेजे जाएंगे। एक बार "विलंबता" से अधिक समय बीत जाने के बाद, उस तालिका से चयन फिर से नोड्स पढ़ने के लिए भेजे जा सकते हैं। कृपया ध्यान रखें कि मारियाडीबी क्लस्टर के साथ, सभी नोड्स में राइटसेट को लागू करने के लिए आवश्यक समय आमतौर पर बहुत कम होता है, जिसे मिलीसेकंड में गिना जाता है। यह हमें मूडल कॉन्फ़िगरेशन फ़ाइल में विलंबता को काफी कम सेट करने की अनुमति देगा, उदाहरण के लिए 0.1s (100 मिलीसेकंड) जैसा मान काफी ठीक होना चाहिए। बेशक, अगर आपको कोई समस्या आती है, तो आप इस मान को और भी बढ़ा सकते हैं।

परीक्षण का एक अन्य विकल्प मारियाडीबी क्लस्टर पर पूरी तरह से भरोसा करना होगा ताकि यह बताया जा सके कि पढ़ना कब सुरक्षित है और कब नहीं। एक wsrep_sync_wait वैरिएबल है जिसे कई एक्सेस पैटर्न (रीड्स, अपडेट्स, इंसर्ट, डिलीट, रिप्लेस और SHOW कमांड) पर करणीय जाँच को बाध्य करने के लिए कॉन्फ़िगर किया जा सकता है। हमारे उद्देश्य के लिए यह सुनिश्चित करने के लिए पर्याप्त होगा कि रीड्स को लागू किए गए कार्य-कारण के साथ निष्पादित किया जाता है, इसलिए हम इस चर को '1' पर सेट करेंगे।

हम यह बदलाव सभी MariaDB क्लस्टर नोड्स पर करने जा रहे हैं। हमें क्वेरी नियमों के आधार पर पढ़ने/लिखने के विभाजन के लिए प्रॉक्सीएसक्यूएल को फिर से कॉन्फ़िगर करने की आवश्यकता होगी, न कि केवल उपयोगकर्ताओं को, जैसा कि हमने पहले किया था। हम 'moodle_safereads' उपयोगकर्ता को भी हटा देंगे क्योंकि इस सेटअप में अब इसकी आवश्यकता नहीं है।

हम तीन क्वेरी नियम सेट करते हैं जो क्वेरी के आधार पर ट्रैफ़िक वितरित करते हैं। चयन करें ... अद्यतन के लिए लेखक नोड को भेजा जाता है, सभी चयन प्रश्न पाठकों को भेजे जाते हैं और बाकी सब कुछ (INSERT, DELETE, REPLACE, UPDATE, BEGIN, COMMIT और इसी तरह) लेखक नोड को भी भेजा जाता है।

यह हमें यह सुनिश्चित करने की अनुमति देता है कि सभी रीड को रीडर नोड्स में फैलाया जा सकता है और इस प्रकार मारियाडीबी क्लस्टर में अधिक नोड्स जोड़कर क्षैतिज पैमाने को बाहर निकालने की अनुमति मिलती है।

हमें उम्मीद है कि उन दो युक्तियों के साथ आप अपने मूडल डेटाबेस बैकएंड को बहुत आसान और अधिक हद तक बढ़ाने में सक्षम होंगे


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. आप जानते हैं कि आप चाहते हैं:Oracle से MariaDB में माइग्रेट करें

  2. मारियाडीबी में एवीजी () फ़ंक्शन

  3. मारियाडीबी में WEIGHT_STRING () कैसे काम करता है

  4. अपने मारियाडीबी संस्करण की जांच करने के 6 तरीके

  5. मारियाडीबी में शो लोकेल कैसे चलाएं