ClusterControl कई विशिष्ट अलर्ट (या अलार्म) के साथ आता है जो आपको अन्य मॉनिटरिंग सिस्टम में नहीं मिलेगा। ClusterControl एक डेटाबेस क्लस्टर टोपोलॉजी को समग्र रूप से समझता है - सभी डेटाबेस नोड्स और उनके बीच संबंध, जिसमें आश्रित नोड्स या क्लस्टर जैसे स्लेव क्लस्टर, रिवर्स-प्रॉक्सी और मध्यस्थ नोड्स शामिल हैं। उदाहरण के लिए, ClusterControl एक विभाजित क्लस्टर का पता लगाने और रिपोर्ट करने में सक्षम है, क्लस्टर में सभी नोड्स के बीच समय के बहाव, क्लस्टर पुनर्प्राप्ति विफलता, क्लस्टर-टू-क्लस्टर प्रतिकृति विफलता और कई क्लस्टर-व्यापी विशिष्ट अलार्म। इसलिए, यह बहुत अच्छा होगा यदि हम किसी मौजूदा एसएनएमपी-आधारित निगरानी या पेजिंग सिस्टम के साथ क्लस्टरकंट्रोल अलार्म को एकीकृत कर सकें।
इस ब्लॉग श्रृंखला में, हम SNMP प्रोटोकॉल के साथ ClusterControl को कैसे एकीकृत करें, इस पर अवधारणा का प्रमाण प्रदर्शित करने जा रहे हैं। ब्लॉग श्रृंखला के अंत में, हम अंततः एक SNMP प्रबंधक (Nagios, Zabbix, आदि) को एक SNMP ट्रैप भेजने में सक्षम होंगे। इस भाग में, हम निम्नलिखित भागों को कवर करने जा रहे हैं:
- MIB (SNMP ऑब्जेक्ट परिभाषा)
- एसएनएमपी एजेंट (रिपोर्टिंग)
आर्किटेक्चर
इस उदाहरण में, हमारे पास SNMP प्रबंधक के रूप में एक Nagios सर्वर है, जिसमें एक क्लस्टरकंट्रोल सर्वर (SNMP एजेंट) एक 3-नोड गैलेरा क्लस्टर की निगरानी करता है जैसा कि निम्नलिखित आरेख में दिखाया गया है:
इस पोस्ट के सभी निर्देश CentOS 7 पर आधारित हैं।
ClusterControl सर्वर पर SNMP इंस्टाल करना
1) SNMP-संबंधित पैकेज स्थापित करें:
$ yum -y install net-snmp net-snmp-perl net-snmp-utils perl-Net-SNMP perl-CPAN
2) सुनिश्चित करें कि /etc/snmp/snmpd.conf की सामग्री में निम्नलिखित हैं:
$ grep -v '^\s*$\|^\s*\#' /etc/snmp/snmpd.conf
com2sec notConfigUser default public
com2sec mynet 192.168.10.0/16 private
com2sec mynet localhost private
group notConfigGroup v1 notConfigUser
group notConfigGroup v2c notConfigUser
group myGroup v2c mynet
view all included .1
view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1
access notConfigGroup "" any noauth exact systemview none none
access myGroup "" any noauth exact all all none
master agentx
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <[email protected]> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes
थोड़ा स्पष्टीकरण:
-
सेवरलिन्स का MIB एक निजी घटक है, इसलिए, हमें केवल अपने नेटवर्क की अनुमति देने की आवश्यकता है, 192.168.10.0/16 और SNMP डेटा को क्वेरी करने के लिए लोकलहोस्ट। हम इसे "com2sec" खंड में परिभाषित करते हैं।
-
फिर हम "myGroup" नामक एक सुरक्षा समूह बनाते हैं, जो केवल "mynet" नेटवर्क से कनेक्शन की अनुमति देता है, और प्रोटोकॉल SNMP संस्करण 2c स्वीकार करता है।
-
फिर हम दृश्य को परिभाषित करते हैं (अनुरोधकर्ता से क्या देखा जा सकता है)। "सभी" का अर्थ है कि एसएनएमपी अनुरोधकर्ता सब कुछ देख सकता है (ओआईडी .1 से शुरू)। "सिस्टमव्यू" केवल सुरक्षित-से-सार्वजनिक जानकारी जैसे होस्टनाम, डेटाटाइम, आदि तक सीमित है जो सार्वजनिक एसएनएमपी उपयोगकर्ताओं के लिए डिफ़ॉल्ट है।
-
फिर हम "myGroup" को "सब" देखने की अनुमति देते हैं।
3) परिवर्तनों को लोड करने के लिए SNMP सेवा को पुनरारंभ करें:
$ systemctl restart snmpd
4) अब, यदि हम snmpwalk करते हैं, तो आपको कुछ MIB देखने में सक्षम होना चाहिए:
$ snmpwalk -v2c -cpublic localhost # should return limited entries
$ snmpwalk -v2c -cprivate localhost # should return thousands of entries because the private view starts with .1
ClusterControl सर्वर पर ClusterControl MIB स्थापित करना
MIB का मतलब प्रबंधन सूचना आधार है। यह एक स्वरूपित टेक्स्ट फ़ाइल है जो एसएनएमपी उपकरण के एक विशेष टुकड़े द्वारा उपयोग की जाने वाली डेटा ऑब्जेक्ट्स को सूचीबद्ध करती है। एमआईबी के बिना, एसएनएमपी द्वारा उपयोग किए जाने वाले ओआईडी का अनुवाद "चीज" में नहीं किया जा सकता है। एसएनएमपी एमआईबी परिभाषाएं आरएफसी 1212 के अनुसार संक्षिप्त एमआईबी प्रारूप में लिखी गई हैं। कईनीन्स की अपनी निजी उद्यम संख्या (पीईएन), 57397 है। आप यहां पंजीकृत उद्यम संख्या डेटाबेस की जांच कर सकते हैं।
1) SEVERALNINES-CLUSTERCONTROL-MIB.txt को कॉपी करें और इसे /usr/share/snmp/mibs के नीचे रखें। यह जांचने के लिए कि एसएनएमपी किस एमआईबी पथ की तलाश करेगा, इस कमांड का उपयोग करें:
$ net-snmp-config --default-mibdirs
2) हमारे कस्टम एमआईबी को लोड करने के लिए, हमें /etc/snmp/snmp.conf पर एक नई कॉन्फ़िगरेशन फ़ाइल बनाने की आवश्यकता है ("डी" के बिना नोटिस) और निम्न पंक्ति जोड़ें:
mibs +SEVERALNINES-CLUSTERCONTROL-MIB
3) एसएनएमपी सेवा के लिए दूरस्थ पहुंच की अनुमति देने के लिए /etc/sysconfig/snmpd के अंदर निम्न पंक्ति जोड़ें:
OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"
4) परिवर्तन लोड करने के लिए SNMP डेमॉन को पुनरारंभ करें:
$ systemctl restart snmpd
5) यह देखने के लिए कि एमआईबी ठीक से लोड है या नहीं, snmptranslate कमांड का उपयोग करें:
$ snmptranslate -IR -On -Tp severalnines
+--severalnines(57397)
|
+--clustercontrolMIB(1)
|
+--alarms(1)
|
+--alarmSummary(1)
| |
| +-- -R-- Integer32 totalAlarms(1)
| | Range: 0..2147483647
| +-- -R-- Integer32 totalCritical(2)
| | Range: 0..2147483647
| +-- -R-- Integer32 totalWarning(3)
| | Range: 0..2147483647
| +-- -R-- Integer32 clusterId(4)
| Range: 0..2147483647
|
+--alarmSummaryGroup(2)
|
+--alarmNotification(3)
|
+--criticalAlarmNotification(1)
+--criticalAlarmNotificationEnded(2)
उपरोक्त आउटपुट से पता चलता है कि हमने अपने ClusterControl के MIB को लोड कर लिया है। इस अवधारणा के सबूत के लिए, हमारे पास "अलार्म" नामक केवल एक मुख्य घटक है, और इसके नीचे, हमारे पास उनके डेटाटाइप के साथ 3 उप-घटक हैं:
-
अलार्मसमरी - अलार्म का सारांश। बस महत्वपूर्ण, चेतावनी और संबंधित क्लस्टर आईडी दिखा रहा है।
-
alarmSummaryGroup - हमारे SNMP ऑब्जेक्ट का ग्रुपिंग।
-
AlarmNotification - यह SNMP ट्रैप परिभाषा के लिए है। इसके बिना, हमारे SNMP ट्रैप को SNMP प्रबंधक समझ नहीं पाएगा।
इसके आगे की संख्या वस्तु पहचानकर्ता (OID) को इंगित करती है। उदाहरण के लिए, टोटल वार्निंग ओआईडी .1.3.6.1.4.1.57397.1.1.1.3 है और क्रिटिकल अलार्म नोटिफिकेशन ओआईडी .1.3.6.1.4.1.57397.1.1.3.1 है। निजी संगठनों के लिए, OID हमेशा ".1.3.6.1.4.1" से शुरू होता है, उसके बाद एंटरप्राइज़ नंबर (57397 सेवेनाइन्स PEN है) और फिर MIB ऑब्जेक्ट।
ClusterControl सर्वर पर SNMP एजेंट स्थापित करना
एसएनएमपी ऑब्जेक्ट आउटपुट (महत्वपूर्ण अलार्म की संख्या, क्लस्टर आईडी और इसी तरह) को "सर्व" करने के लिए, हमें एसएनएमपी एजेंट के साथ एसएनएमपी डेमॉन का विस्तार करने की आवश्यकता है। एसएनएमपी में, वे इस प्रोटोकॉल को एजेंटएक्स कहते हैं, जिसे हमने इस खंड के तहत snmpd.conf में परिभाषित किया है:
master agentx
इस अवधारणा के सबूत के लिए, मैंने अलार्म के सारांश को एसएनएमपी/ओआईडी स्वरूपण में पुनर्प्राप्त करने और रिपोर्ट करने के लिए पर्ल में लिखी एक स्क्रिप्ट तैयार की है।
1) पर्ल SNMP घटक स्थापित करें:
$ yum install perl-Net-SNMP
2) SNMP प्रक्रिया द्वारा कहीं भी पहुंच योग्य क्लस्टरकंट्रोल-snmp-agent.pl रखें। इसे /usr/share/snmp निर्देशिका के अंतर्गत रखने की अनुशंसा की जाती है।
$ ls -al /usr/share/snmp/clustercontrol-snmp-agent.pl
-rwxr-xr-x 1 root root 2974 May 10 14:16 /usr/share/snmp/clustercontrol-snmp-agent.pl
3) स्क्रिप्ट के अंदर निम्नलिखित पंक्तियों को कॉन्फ़िगर करें (पंक्ति 14 से 17):
my $clusterId = 23; # cluster ID that you want to monitor
my $totalAlarm = `/bin/s9s alarms --list --cluster-id=$clusterId --batch | wc -l`;
my $criticalAlarm = `/bin/s9s alarms --list --cluster-id=$clusterId --batch | grep CRITICAL | wc -l`;
my $warningAlarm = `/bin/s9s alarms --list --cluster-id=$clusterId --batch | grep WARNING | wc -l`;
4) स्क्रिप्ट को निष्पादन योग्य अनुमति के साथ सेट करें:
$ chmod 755 /usr/share/snmp/clustercontrol-snmp-agent.pl
5) स्क्रिप्ट चलाएँ:
$ perl /usr/share/snmp/clustercontrol-snmp-agent.pl
NET-SNMP version 5.7.2 AgentX subagent connected
सुनिश्चित करें कि आप "सबजेंट कनेक्टेड" लाइन देखते हैं। इस बिंदु पर, SNMP प्रोटोकॉल के माध्यम से ClusterControl अलार्म को सही ढंग से रिपोर्ट किया जाना चाहिए। जाँच करने के लिए, बस snmpwalk कमांड का उपयोग करें और इसे दूरस्थ सर्वर से निष्पादित करें, उदाहरण के लिए Nagios सर्वर से (snmpwalk net-snmp-utils पैकेज द्वारा प्रदान किया जाता है):
$ snmpwalk -v2c -c private 192.168.10.50 .1.3.6.1.4.1.57397.1.1.1
SEVERALNINES-CLUSTERCONTROL-MIB::totalAlarms = INTEGER: 3
SEVERALNINES-CLUSTERCONTROL-MIB::totalCritical = INTEGER: 2
SEVERALNINES-CLUSTERCONTROL-MIB::totalWarning = INTEGER: 1
SEVERALNINES-CLUSTERCONTROL-MIB::clusterId = INTEGER: 23
वैकल्पिक रूप से, आप इसके बजाय MIB ऑब्जेक्ट नाम का भी उपयोग कर सकते हैं जो समान परिणाम देता है:
$ snmpwalk -v2c -c private 192.168.10.50 SEVERALNINES-CLUSTERCONTROL-MIB::alarmSummary
SEVERALNINES-CLUSTERCONTROL-MIB::totalAlarms = INTEGER: 3
SEVERALNINES-CLUSTERCONTROL-MIB::totalCritical = INTEGER: 2
SEVERALNINES-CLUSTERCONTROL-MIB::totalWarning = INTEGER: 1
SEVERALNINES-CLUSTERCONTROL-MIB::clusterId = INTEGER: 23
अंतिम विचार
यह एक बहुत ही सरल प्रूफ-ऑफ-कॉन्सेप्ट (PoC) है कि कैसे ClusterControl को SNMP प्रोटोकॉल के साथ एकीकृत किया जा सकता है। अगले एपिसोड में, हम ClusterControl सर्वर से SNMP ट्रैप को Nagios, Zabbix या Sensu जैसे SNMP मैनेजर को भेजने पर विचार करेंगे।