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

ClusterControl और उसके घटकों के प्रदर्शन का अनुकूलन कैसे करें

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

एक परिचय के रूप में, ClusterControl में कई मुख्य घटक होते हैं - PHP पर आधारित एक वेब एप्लिकेशन (फ्रंटएंड) और कई डिमोनाइज्ड प्रोसेस (बैकएंड)। ये लगातार भंडारण के लिए एक MySQL/MariaDB डेटाबेस का लाभ उठाते हैं। आप वेब एप्लिकेशन से अपने क्लस्टर को प्रभावी ढंग से नियंत्रित कर रहे हैं, जो आपके डेटाबेस क्लस्टर को प्रबंधित और मॉनिटर करने के लिए बैकएंड प्रक्रियाओं द्वारा निष्पादित प्रक्रिया कॉल की एक श्रृंखला में अनुवादित किया जाएगा।

MySQL डेटाबेस

ClusterControl घटक प्रबंधित नोड्स और सभी ClusterControl मेटाडेटा से एकत्र किए गए डेटा की निगरानी के लिए लगातार स्टोर के रूप में एक MySQL या MariaDB डेटाबेस पर भरोसा करते हैं (उदाहरण के लिए, कतार में कौन सी नौकरियां हैं, बैकअप शेड्यूल, बैकअप स्थिति, आदि।)। डिफ़ॉल्ट रूप से, इंस्टॉलर स्क्रिप्ट ओएस के मानक भंडार द्वारा जो भी संस्करण आता है उसे स्थापित करेगा। इंस्टॉलर द्वारा स्थापित किया जा रहा MySQL/MariaDB संस्करण निम्नलिखित है:

  • CentOS/Redhat 6 - MySQL 5.1

  • CentOS/Redhat 7 - MariaDB 5.5

  • उबंटू 18.04 (बायोनिक) - MySQL 5.7

  • उबंटू 16.04 (Xenial) - MySQL 5.7

  • उबंटू 14.04 (भरोसेमंद) - MySQL 5.5

  • डेबियन 9 (स्ट्रेच) - MySQL 5.5

  • डेबियन 8 (जेसी) - MySQL 5.5

  • डेबियन 7 (व्हीज़ी) - MySQL 5.5

इंस्टॉलर स्क्रिप्ट कुछ बुनियादी ट्यूनिंग करेगी जैसे कि इंस्टॉलेशन चरण की शुरुआत में डेटादिर स्थान, MySQL पोर्ट, उपयोगकर्ता और InnoDB बफर पूल आकार को कॉन्फ़िगर करना। हालाँकि, एक बार जब आप अधिक क्लस्टर/नोड्स आयात या बना लेते हैं, तो ट्यूनिंग उपयुक्त नहीं हो सकती है। निगरानी और प्रबंधन के लिए नोड्स की बढ़ी हुई संख्या के साथ, क्लस्टरकंट्रोल अधिक संसाधनों का उपयोग करेगा, और डेटाबेस परत आमतौर पर पहली बाधा है जो उपयोगकर्ताओं का सामना करती है। आने वाले लोड को नियंत्रित करने के लिए कुछ और ट्यूनिंग की आवश्यकता हो सकती है।

ClusterControl किसी भी प्रदर्शन विसंगति का पता लगाने के लिए cmon_X.log (जहाँ X क्लस्टर आईडी है) के अंदर निम्नलिखित पंक्तियों को लिखकर पर्याप्त स्मार्ट है:

2018-11-28 01:30:00 : (INFO) CmonSheetManager at 0x3839af0 loaded 70 values for key 'diskstat' between 2018-11-23 01:30:00 - 2018-11-28 01:30:0
0.
2018-11-28 01:30:00 : (INFO) SQL processing: 220.0000ms
2018-11-28 01:30:00 : (INFO) Parsing       : 0.0000ms
2018-11-28 01:30:00 : (INFO) Sum           : 220.0000ms

उपरोक्त का सीधा सा मतलब है कि घटक "डिस्कस्टैट" के लिए 70 मानों को लोड करने में 220ms (सम वैल्यू) का समय लगा, जहां अधिकांश प्रोसेसिंग समय SQL प्रोसेसिंग चरण में हो रहा था और SQL परिणाम को पार्स करने के लिए 0 ms था। . इससे यह निष्कर्ष निकलता है कि SQL परत ने अधिकांश संसाधन समय लिया जब ClusterControl ने डेटासेट को क्वेरी करने का प्रयास किया।

हमारा मानना ​​है कि ClusterControl द्वारा निष्पादित अधिकांश SQL क्वेरी एकल MySQL इंस्टेंस के लिए उचित रूप से अनुकूलित हैं और उचित अनुक्रमण का उपयोग करती हैं। सीधे शब्दों में कहें तो, यदि आप लॉग फ़ाइल में नियमित रूप से उपरोक्त जैसा कुछ देखते हैं, तो डेटाबेस परत में कुछ सुधार क्रम में हैं, जैसा कि निम्नलिखित अनुभागों में दिखाया गया है।

InnoDB बफर पूल आकार ट्यूनिंग

बफर पूल आकार एक महत्वपूर्ण घटक है और MySQL के प्रदर्शन को बेहतर बनाने के लिए इसे पहले से कॉन्फ़िगर करना होगा। यह MySQL प्रोसेसिंग को डिस्क से टकराने के बजाय मेमोरी के अंदर होने देता है। अंगूठे का एक सरल नियम इनो डीबी हिट अनुपात की जांच करना और बफर पूल और मेमोरी सेक्शन के तहत निम्न पंक्ति को देखना है:

Buffer pool hit rate 986 / 1000

986/1000 की हिट दर इंगित करती है कि 1000 पंक्ति में से पढ़ता है, यह 986 बार रैम में पंक्ति को पढ़ने में सक्षम था। शेष 14 बार, इसे डिस्क से डेटा की पंक्ति को पढ़ना पड़ा। सीधे शब्दों में कहें तो 1000/1000 सबसे अच्छा मूल्य है जिसे हम यहां हासिल करने की कोशिश कर रहे हैं, जिसका अर्थ है कि बार-बार एक्सेस किया जाने वाला डेटा पूरी तरह से रैम में फिट बैठता है।

innodb_buffer_pool_size मान को बढ़ाने से MySQL के काम करने के लिए अधिक जगह बनाने में बहुत मदद मिलेगी। हालाँकि, सुनिश्चित करें कि आपके पास पहले से पर्याप्त RAM संसाधन हैं। डिफ़ॉल्ट रूप से, ClusterControl 50% RAM को बफर पूल में आवंटित करता है। यदि होस्ट ClusterControl के लिए समर्पित है, तो आप इसे 70% जैसे उच्च मूल्य पर भी धकेल सकते हैं, बशर्ते आप OS प्रक्रियाओं और कैश में कम से कम 2GB RAM छोड़ दें। यदि आप इतना आवंटित नहीं कर सकते हैं, तो RAM बढ़ाना ही एकमात्र उपाय है।

इस मान को बदलने के लिए एक MySQL पुनरारंभ (MySQL 5.7.5 से पुराना) की आवश्यकता होती है, इस प्रकार सही सेवा पुनरारंभ क्रम होगा:

  1. my.cnf के अंदर innodb_buffer_pool_size मान को संशोधित करें।
  2. CMON सेवा बंद करें।
  3. MySQL/MariaDB सेवा को पुनरारंभ करें।
  4. CMON सेवा प्रारंभ करें।

या यदि आप लंबे समय तक डाउनटाइम वहन कर सकते हैं तो होस्ट को रीबूट करें।

अधिकतम_कनेक्शन ट्यूनिंग

डिफ़ॉल्ट रूप से, इंस्टॉलर स्क्रिप्ट max_connections मान को 512 तक कॉन्फ़िगर करेगी। यह अपेक्षाकृत अधिक है, हालांकि समझदार है, क्योंकि ClusterControl मुश्किल से कुल 200 कनेक्शन तक पहुंचता है, जब तक कि MySQL सर्वर को अन्य एप्लिकेशन के साथ साझा नहीं किया जाता है या आपके पास ClusterControl द्वारा मॉनिटर किए गए दसियों MySQL नोड्स हैं। (हम 30 नोड्स और अधिक के बारे में बात कर रहे हैं)।

एक उच्च max_connections मान संसाधनों को बर्बाद करता है और मान को समायोजित करने से MySQL के लिए कॉन्फ़िगर की गई अधिकतम मेमोरी प्रभावित होगी। यदि यह सिस्टम रैम से अधिक है तो एक मौका है कि MySQL सर्वर प्रक्रिया एक OOM अपवाद के साथ समाप्त हो जाएगी, यदि सभी कनेक्शन का उपयोग किया जाता है।

इसे जांचने के लिए, बस max_used_connections MySQL स्थिति देखें। क्लस्टरकंट्रोल नोड पर MySQL द्वारा अब तक पहुंचे अधिकतम कनेक्शन निम्नलिखित हैं जो कुल मिलाकर 6 MySQL नोड्स के साथ 2 क्लस्टर की निगरानी करते हैं:

mysql> SHOW STATUS like 'max_used_connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| Max_used_connections | 43    |
+----------------------+-------+

शुरू करने के लिए एक अच्छा मूल्य Max_used_connections x 2 है, और यदि मान लगातार बढ़ रहा है तो इसे धीरे-धीरे बढ़ाएं। max_connections चर को संशोधित करना SET GLOBAL कथन के माध्यम से गतिशील रूप से किया जा सकता है।

MySQL सॉकेट फ़ाइल का उपयोग करना

डिफ़ॉल्ट रूप से, इंस्टॉलर स्क्रिप्ट प्रत्येक ClusterControl डेटाबेस कॉन्फ़िगरेशन फ़ाइलों के अंदर निम्न होस्ट मान को स्वचालित रूप से कॉन्फ़िगर करेगी:

<थ>मान
कॉन्फ़िगरेशन फ़ाइल
/etc/cmon.cnf mysql_hostname=127.0.0.1
/etc/cmon.d/cmon_X.cnf (X क्लस्टर आईडी है) mysql_hostname=127.0.0.1
/var/www/html/clustercontrol/bootstrap.php परिभाषित करें ('DB_HOST', '127.0.0.1');
/var/www/html/cmonapi/config/database.php परिभाषित करें ('DB_HOST', '127.0.0.1');

उपरोक्त MySQL क्लाइंट को TCP नेटवर्किंग के माध्यम से कनेक्ट करने के लिए बाध्य करेगा, ठीक उसी तरह जैसे किसी दूरस्थ MySQL होस्ट से कनेक्ट करना है, हालांकि ClusterControl उसी सर्वर पर चल रहा है जिस पर MySQL सर्वर चल रहा है। हमने जानबूझकर इसे इंस्टॉलेशन प्रक्रिया को सरल बनाने के लिए इस तरह से कॉन्फ़िगर किया है क्योंकि लगभग हर ओएस प्लेटफॉर्म MySQL सॉकेट फ़ाइल को अलग तरीके से प्री-कॉन्फ़िगर करता है, जो इंस्टॉलेशन विफलता दर को बहुत कम करता है।

मान को "लोकलहोस्ट" में बदलने से क्लाइंट को इसके बजाय MySQL यूनिक्स सॉकेट फ़ाइल का उपयोग करने के लिए बाध्य किया जाएगा:

<थ>मान
कॉन्फ़िगरेशन फ़ाइल
/etc/cmon.cnf mysql_hostname=लोकलहोस्ट
/etc/cmon.d/cmon_X.cnf (X क्लस्टर आईडी है) mysql_hostname=लोकलहोस्ट
/var/www/html/clustercontrol/bootstrap.php परिभाषित करें ('DB_HOST', 'लोकलहोस्ट');
/var/www/html/cmonapi/config/database.php परिभाषित करें ('DB_HOST', 'लोकलहोस्ट');

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

MySQL UNIX सॉकेट फ़ाइल का उपयोग करना अधिक सुरक्षित है और नेटवर्क ओवरहेड को काट देगा। टीसीपी पर इसकी हमेशा अनुशंसा की जाती है। हालांकि, आपको यह सुनिश्चित करने की ज़रूरत है कि सॉकेट फ़ाइल सही तरीके से कॉन्फ़िगर की गई है। यह my.cnf के अंदर निम्नलिखित निर्देशों और ClusterControl नोड पर प्रत्येक MySQL विकल्प फ़ाइलों पर मौजूद होना चाहिए, उदाहरण के लिए:

[mysqld]
socket=/var/lib/mysql/mysql.sock

[client]
socket=/var/lib/mysql/mysql.sock

[mysql]
socket=/var/lib/mysql/mysql.sock

[mysqldump]
socket=/var/lib/mysql/mysql.sock

सॉकेट फ़ाइल को बदलने के लिए भी एक MySQL और CMON पुनरारंभ की आवश्यकता होगी। यदि आप "लोकलहोस्ट" का उपयोग कर रहे हैं, तो आप दूरस्थ कनेक्शन स्वीकार करने से रोकने के लिए कुछ अतिरिक्त कॉन्फ़िगरेशन विकल्प जैसे स्किप-नेटवर्किंग =1 जोड़ सकते हैं। हमारी क्लस्टरकंट्रोल डॉकर छवि बंदरगाहों पर बाध्यकारी होने पर डॉकर-प्रॉक्सी में एक सीमा को दूर करने के लिए इस दृष्टिकोण का उपयोग कर रही है।

एसएसएसडी के साथ ओपनएसएसएच

ClusterControl दूरस्थ नोड्स के प्रबंधन और निगरानी के लिए अपने मुख्य संचार चैनल के रूप में SSH प्रोटोकॉल का उपयोग करता है। डिफ़ॉल्ट ओपनएसएसएच कॉन्फ़िगरेशन बहुत अच्छे हैं और ज्यादातर मामलों में काम करना चाहिए। हालांकि, कुछ परिवेशों में जहां SSH को SElinux या सिस्टम सुरक्षा सेवा डेमॉन (SSSD) जैसे अन्य सुरक्षा वृद्धि उपकरणों के साथ एकीकृत किया गया है, यह SSH के प्रदर्शन पर महत्वपूर्ण प्रभाव डाल सकता है।

हमने ऐसे कई मामले देखे हैं जहां प्रत्येक प्रबंधित नोड के लिए SSH कनेक्शन की बढ़ती हुई मात्रा और अंततः, ClusterControl सर्वर और सभी प्रबंधित नोड्स दोनों SSH कनेक्शन के साथ अपनी सिस्टम मेमोरी को अधिकतम करते हैं। कुछ मामलों में, क्लस्टरकंट्रोल सर्वर पर रात में केवल एक सामान्य पूर्ण सिस्टम रीबूट होने से ही समस्या का समाधान हो सकता है।

यदि आप सिस्टम सुरक्षा सेवा डेमॉन (एसएसएसडी) के साथ अपना बुनियादी ढांचा चला रहे हैं, तो आपको क्लस्टरकंट्रोल नोड पर /etc/ssh/ssh_config पर OpenSSH क्लाइंट कॉन्फ़िगरेशन के अंदर निम्न पंक्ति पर टिप्पणी करने की सलाह दी जाती है:

#ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p %h

उपरोक्त होस्ट कुंजी को प्रबंधित करने के लिए SSSD का उपयोग करना छोड़ देगा, जिसे इसके बजाय OpenSSH क्लाइंट द्वारा नियंत्रित किया जाएगा।

ClusterControl 1.7.0 से शुरू होकर, आपके पास प्रोमेथियस के साथ एजेंट-आधारित निगरानी उपकरण का उपयोग करने का विकल्प है। एजेंट-आधारित निगरानी के साथ, ClusterControl SSH का उपयोग मेजबान मेट्रिक्स का नमूना लेने के लिए नहीं करता है जो कुछ वातावरण में अत्यधिक हो सकता है।

फाइल सिस्टम और विभाजन

ClusterControl कंट्रोलर हर क्लस्टर के लिए लगभग हर सेकेंड में अपनी लॉग फाइल में नई एंट्री लिखता है। उन लोगों के लिए जो डिस्क पर इस अनुक्रमिक लेखन का लाभ उठाना चाहते हैं और लागत बचाना चाहते हैं, आप इस उद्देश्य के लिए स्पिंडल डिस्क का उपयोग कर सकते हैं। निम्नलिखित पंक्ति को सभी cmon_X.cnf के अंदर संशोधित करें:

logfile=/new/partition/log/cmon_X.log

X को क्लस्टर आईडी से बदलें और परिवर्तनों को लागू करने के लिए CMON सेवा को पुनरारंभ करें।

यदि आप ClusterControl को बैकअप रिपॉजिटरी के रूप में उपयोग कर रहे हैं, तो आपके लिए रूट पार्टीशन के अलावा एक अलग पार्टीशन पर पर्याप्त डिस्क स्थान आवंटित करने की अनुशंसा की जाती है। यह बेहतर हो जाता है यदि विभाजन एक नेटवर्क या क्लस्टर फ़ाइल सिस्टम पर रहता है ताकि पुनर्स्थापना ऑपरेशन करते समय लक्षित नोड्स के साथ आसान माउंटिंग हो सके। हमने ऐसे मामले देखे हैं जहां बनाए गए बैकअप ने मुख्य विभाजन के सभी डिस्क स्थान को खा लिया, अंततः ClusterControl और उसके घटकों को प्रभावित किया।

अप टू डेट रखें

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

हम उपयोगकर्ताओं को हमेशा नवीनतम वेब ब्राउज़र (Google क्रोम और मोज़िला फ़ायरफ़ॉक्स पर निर्मित और परीक्षण) के साथ क्लस्टरकंट्रोल के नवीनतम संस्करण (अपग्रेड करना आसान है) का उपयोग करने की सलाह देते हैं, क्योंकि हम इसका लाभ उठा सकते हैं। नवीनतम संस्करण में उपलब्ध नई सुविधाएँ।

अंतिम विचार

क्लस्टरकंट्रोल का उपयोग करते समय यदि आपके कोई प्रश्न हैं या कोई समस्या या धीमेपन की समस्या आती है, तो कृपया हमारे समर्थन चैनल के माध्यम से हमसे संपर्क करें। सुझावों और प्रतिक्रिया का बहुत स्वागत है।

हैप्पी ट्यूनिंग!


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. सी # ड्राइवर के साथ मोंगोडीबी में शब्दकोश डालें

  2. MongoDB रेंज पेजिनेशन

  3. अतुल्यकालिक उप-कार्य के साथ Async कर्सर पुनरावृत्ति

  4. MongoDB :एकत्रीकरण ढांचा :प्रति समूह आईडी अंतिम दिनांकित दस्तावेज़ प्राप्त करें

  5. दस्तावेज़ से कुछ फ़ील्ड कैसे निकालें