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

प्रोएक्टिव MySQL मॉनिटरिंग (डेवलपर स्टूडियो/सलाहकार कोण)

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

आपके MySQL डेटाबेस में सक्रिय निगरानी आपकी टीम को यह समझने की अनुमति देती है कि आपकी डेटाबेस सेवाएं कैसा प्रदर्शन कर रही हैं। क्या यह उस कार्यभार के आधार पर कार्य करता है और वितरित करता है जिसे ले जाने की उम्मीद है? क्या आपके पास उस कार्यभार के आधार पर सर्वर के प्रदर्शन के लिए पर्याप्त संसाधन हैं जिसे वह वर्तमान में संभाल रहा है? सक्रिय निगरानी उन चीजों को लागू करती है जो आपदा को रोकेंगी या आपके डेटाबेस को नुकसान पहुंचाने से रोकेंगी जो आपको पहले से सूचित करेगी। इस प्रकार, डीबीए या प्रशासकों को आपके डेटाबेस क्लस्टर में खराबी, डेटा भ्रष्टाचार, सुरक्षा कारनामों और हमलों, या ट्रैफ़िक के अप्रत्याशित उछाल से बचने के लिए महत्वपूर्ण कार्य करने की अनुमति देता है। इन्हें तुरंत शामिल करने से, MySQL के लिए सक्रिय निगरानी को स्वचालित होना चाहिए और बिना किसी रुकावट के 24/7 संचालित होगा और यह DBA, Devops, प्रशासकों पर निर्भर है कि वे कार्यों की प्राथमिकता के आधार पर तय करें और यह कितना महत्वपूर्ण है यदि इसे रखरखाव की आवश्यकता है या बस एक सामान्य दैनिक दिनचर्या का काम।

ClusterControl के साथ सक्रिय निगरानी

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

जब अलार्म और सूचनाओं की बात आती है, तो ClusterControl का मिश्रित दृष्टिकोण होता है जिसके लिए अंतर्निहित अलार्म होते हैं, और फिर सलाहकार होते हैं जिनके बारे में हम इस ब्लॉग पर अधिक चर्चा करेंगे।

MySQL के लिए क्लस्टर नियंत्रण अलार्म

अलार्म उन समस्याओं का संकेत देते हैं जो समग्र रूप से क्लस्टर को प्रभावित या खराब कर सकती हैं। यह इंटरफ़ेस समस्या को हल करने के लिए अनुशंसित कार्रवाई (यदि उपलब्ध हो) के साथ समस्या पर विस्तृत विवरण प्रदान करता है। प्रत्येक अलार्म को इस प्रकार वर्गीकृत किया जाता है:

  • क्लस्टर

  • क्लस्टर पुनर्प्राप्ति

  • डेटाबेस स्वास्थ्य

  • डेटाबेस प्रदर्शन

  • होस्ट

  • नोड

  • नेटवर्क

इग्नोर चेक करके अलार्म की पुष्टि की जा सकती है? चेकबॉक्स। अनदेखा किए जाने पर, ईमेल के माध्यम से कोई सूचना नहीं भेजी जाएगी। एक अलार्म को हटाया या खारिज नहीं किया जा सकता है, हालांकि आप अनदेखा अलार्म छुपाएं बटन पर क्लिक करके इसे सूची से छुपा सकते हैं।

नीचे उदाहरण स्क्रीनशॉट देखें,

ClusterControl के साथ सक्रियता

ClusterControl स्वत:पुनर्प्राप्ति का समर्थन करता है जो विफलता का पता लगाने पर प्रतिक्रिया करता है। क्लस्टर कंट्रोल के साथ ऑटो रिकवरी सबसे सक्रिय कार्यात्मकताओं में से एक है जो आपदाओं की स्थिति में महत्वपूर्ण भूमिका निभाती है।

इस सक्रिय निगरानी के लिए स्वत:पुनर्प्राप्ति को सक्षम करना आवश्यक है जो विभिन्न स्थितियों में प्रतिक्रिया करता है, उदाहरण के लिए, यदि प्राथमिक MySQL नोड विफल हो जाता है।

ClusterControl में, यह तुरंत पता लगाया जाएगा क्योंकि यह कनेक्शन को सुनता है डेटाबेस सर्वर के साथ, या इस मामले में प्राथमिक सर्वर। ClusterControl ASAP पर प्रतिक्रिया करेगा और एक विफलता लागू करेगा।

विफलता सक्षम क्लस्टर पुनर्प्राप्ति का हिस्सा है। चूंकि क्लस्टर और नोड दोनों बटन सक्षम हैं, तो यह नोड पुनर्प्राप्ति का अनुसरण करता है जैसा कि आप नीचे देख रहे हैं।

नोड्स की पहुंच क्षमता के आधार पर, क्लस्टरकंट्रोल निम्नलिखित द्वारा लगातार प्रयास करने का प्रयास करेगा। SSH के माध्यम से जुड़ना और नोड तक पहुँचने का प्रयास करना और sysvinit या systemd का उपयोग शुरू करके पुनर्प्राप्त करने का प्रयास करना। जाहिर है, आप सोच सकते हैं कि यह एक विफलता लागू करता है और ClusterControl विफल प्राथमिक को प्रारंभ करने का प्रयास करता है। इसका मतलब यह हो सकता है कि दो डेटाबेस नोड उपलब्ध हैं, है ना? हालांकि सच है, ClusterControl विफल प्राथमिक को पुनर्प्राप्त करते समय केवल-पढ़ने के लिए स्थिति में ले जाएगा। नीचे देखें,

यद्यपि कुछ निश्चित विकल्प हैं जिन्हें आप विफलता तंत्र को प्रबंधित करने के लिए सेट कर सकते हैं, आप इसके लिए हमारे दस्तावेज़ देखें क्योंकि यह इस ब्लॉग का फोकस नहीं है।

ClusterControl के साथ सक्रियता के लिए सलाहकारों का उपयोग करना

ClusterControl में, सलाहकारों को <अपने MySQL क्लस्टर का चयन करें> → प्रदर्शन → सलाहकार पर जाकर पता लगाया जाएगा। ClusterControl सलाहकारों को उस क्लस्टर के आधार पर लागू करने के लिए सेट किया गया है जिसे वह मॉनिटर करने का प्रयास कर रहा है। उदाहरण के लिए, पेरकोना या मारियाडीबी पर चलने वाले गैलेरा क्लस्टर के साथ एक MySQL प्रतिकृति और MySQL में अंतर हो सकता है। उदाहरण के लिए, MySQL प्रतिकृति सलाहकार के पास निम्नलिखित हैं,

गैलेरा क्लस्टर में रहते हुए, यह गैलेरा विशिष्ट सलाहकारों को जोड़ता है जैसा कि नीचे दिखाया गया है ,

अपने ClusterControl MySQL सलाहकारों को अनुकूलित करना

सलाहकार अनुकूलन योग्य हैं और आपकी आवश्यकताओं के अनुसार संशोधित किए जा सकते हैं। ऊपर सलाहकारों के स्क्रीनशॉट में, बस संपादित करें पर क्लिक करें और आप उस सरल IDE पर पुनर्निर्देशित हो जाएंगे जिसे हमने ClusterControl में बनाया है।

आप अपने स्वयं के क्लस्टरकंट्रोल सलाहकार भी बना सकते हैं। आप अपना पहला सलाहकार लिखें पढ़कर बनाने के बारे में अधिक जानने के लिए खुद को संदर्भित कर सकते हैं या मेल्टडाउन/स्पेक्टर डिटेक्शन स्क्रिप्ट का उपयोग करके अपना खुद का बनाने के लिए 2-भाग श्रृंखला ले सकते हैं।

ClusterControl सलाहकार कैसे सक्रिय होते हैं?

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

जैसा कि पहले उल्लेख किया गया है, सलाहकारों को संशोधित किया जा सकता है और हमारे साधारण संपादक या आईडीई के माध्यम से संपादन योग्य हैं। उदाहरण के लिए एक MySQL प्रतिकृति क्लस्टर में, ClusterControl एक बिनलॉग संग्रहण स्थान सलाहकार प्रदान करता है। यह पता लगाता है कि बिनलॉग डेटा निर्देशिका में संग्रहीत हैं जहां यह सलाह देता है कि यह डेटा निर्देशिका से बाहर होना चाहिए।

आइए सलाहकारों की सूची से एक उदाहरण लेते हैं और वर्तमान में उपयोग किए गए सलाहकार का चयन करें . आइए इसे नीचे दिखाए अनुसार संपादित करें,

या वैकल्पिक रूप से, आप <अपने MySQL क्लस्टर का चयन करें> पर जा सकते हैं → प्रबंधित करें → डेवलपर स्टूडियो और नीचे दिखाए गए अनुसार कनेक्शन_यूज्ड_पीसीटी.जेएस चुनें।

 

अलार्म भेजकर इसे अधिक सक्रिय बनाकर, आप इसे संशोधित कर सकते हैं और जोड़ सकते हैं निम्नलिखित कार्य बिल्कुल नीचे की तरह हैं,

function myAlarm(title, message, recommendation)
{
  return Alarm::alarmId(
        Node,
      true,
        title,
        message,
        recommendation
  );
}

जबकि, थ्रेशोल्ड को 20 पर सेट करना, फिर नीचे इन पंक्तियों को if कंडीशन स्टेटमेंट में जोड़ें, जहां थ्रेशोल्ड इसके दिए गए थ्रेशोल्ड मान से ऊपर पहुंच गया है।

                 myAlarmId = myAlarm(TITLE, msg, ADVICE_WARNING);
                // Let's raise an alarm.
                host.raiseAlarm(myAlarmId, Warning);
Here's the complete script with my modifications in bold,
#include "common/mysql_helper.js"
var DESCRIPTION="This advisor calculates the percentage of threads_connected over max_connections,"
                " if the percentage is higher than 20% you will be notified,"
                " preventing your database server from becoming unstable.";
var WARNING_THRESHOLD=20;
var TITLE="Connections currently used";
var ADVICE_WARNING="You are using more than " + WARNING_THRESHOLD +
    "% of the max_connections."
    " Consider regulating load, e.g by using HAProxy. Using up all connections"
    " may render the database server unusable.";
var ADVICE_OK="The percentage of currently used connections is satisfactory." ;

function myAlarm(title, message, recommendation)
{
  return Alarm::alarmId(
        Node,
      true,
        title,
        message,
        recommendation
  );
}


function main()
{
    var hosts     = cluster::mySqlNodes();
    var advisorMap = {};
    for (idx = 0; idx < hosts.size(); ++idx)
    {
        host        = hosts[idx];
        map         = host.toMap();
        connected     = map["connected"];
        var advice = new CmonAdvice();
        print("   ");
        print(host);
        print("==========================");
        if (!connected)
        {
            print("Not connected");
            continue;
        }
        var Threads_connected = host.sqlStatusVariable("Threads_connected");
        var Max_connections   = host.sqlSystemVariable("Max_connections");
        if (Threads_connected.isError() || Max_connections.isError())
        {
            justification = "";
            msg = "Not enough data to calculate";
        }
        else
        {
            var used = round(100 * Threads_connected / Max_connections,1);
            if (used > WARNING_THRESHOLD)
            {
                advice.setSeverity(1);
                msg = ADVICE_WARNING;
                justification = used + "% of the connections is currently used,"
                " which is > " + WARNING_THRESHOLD + "% of max_connections.";
                 myAlarmId = myAlarm(TITLE, msg, ADVICE_WARNING);
                // Let's raise an alarm.
                host.raiseAlarm(myAlarmId, Warning);
            }
            else
            {
                justification = used + "% of the connections is currently used,"
                " which is < 90% of max_connections.";
                advice.setSeverity(0);
                msg = ADVICE_OK;
            }
        }
        advice.setHost(host);
        advice.setTitle(TITLE);
        advice.setJustification(justification);
        advice.setAdvice(msg);
        advisorMap[idx]= advice;
        print(advice.toString("%E"));
    }
    return advisorMap;
}

आप इसका परीक्षण करने के लिए sysbench का उपयोग कर सकते हैं। मेरे परीक्षण में, मुझे अलार्म भेजकर सक्रिय रूप से सूचित किया जाता है। यह मुझे ईमेल के माध्यम से भी भेजा जाएगा या अगर आपने तीसरे पक्ष की सूचनाओं को एकीकृत किया है तो इसकी सूचना दी जा सकती है। नीचे स्क्रीनशॉट देखें,

ClusterControl के सलाहकार चेतावनी

ClusterControl में किसी मौजूदा सलाहकार को संशोधित या संपादित करना सभी क्लस्टर पर लागू होता है। इसका मतलब है, आपको अपनी स्क्रिप्ट में जांच करने की आवश्यकता है कि क्या इसकी कोई विशिष्ट शर्त केवल आपके मौजूदा क्लस्टर (या तो MySQL या ClusterControl द्वारा अन्य समर्थित डेटाबेस) के लिए लागू है। ऐसा इसलिए है क्योंकि ClusterControl सलाहकारों को केवल हमारे cmon DB के माध्यम से एक ही स्रोत में संग्रहीत किया जाता है। ये आपके द्वारा ClusterControl में बनाए गए सभी क्लस्टर द्वारा खींचे या पुनर्प्राप्त किए जाते हैं।

उदाहरण के लिए, आप इसे एक स्क्रिप्ट में कर सकते हैं:

    वर होस्ट     =क्लस्टर ::mySqlNodes ();

    var सलाहकार मैप ={};

    प्रिंट(होस्ट[1].clusterId ());

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

function main()
{
    var hosts     = cluster::mySqlNodes();
    var advisorMap = {};
    for (idx = 0; idx < hosts.size(); ++idx)
    {
        host        = hosts[idx];
        map         = host.toMap();
        connected     = map["connected"];
        var advice = new CmonAdvice();
        print("   ");
        print(host);
        print("==========================");
        if (host.clusterId() == 15)
        {
            print("Not applicable for cluster id == 15");
            continue;
        }
…
….
…..

जिसका अर्थ है कि यदि यह क्लस्टर_आईडी ==15 है, तो बस छोड़ें या अगले लूप पर जाएं।

निष्कर्ष

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मारियाडीबी JSON_REPLACE () समझाया गया

  2. मारियाडीबी 10.2 समर्थन की घोषणा - क्लस्टरकंट्रोल 1.5

  3. MariaDB डेटाबेस में सभी तालिकाओं को सूचीबद्ध करने के 4 तरीके

  4. कैसे नहीं पसंद मारियाडीबी में काम करता है

  5. वितरित डेटाबेस उच्च उपलब्धता के लिए ClusterControl CMON HA - भाग दो (GUI एक्सेस सेटअप)