डेटाबेस क्लस्टर को परिनियोजित करना कोई रॉकेट साइंस नहीं है - ऐसा करने के तरीके के बारे में कई तरीके हैं। लेकिन आप कैसे जानते हैं कि आपने अभी जो तैनात किया है वह उत्पादन के लिए तैयार है? मैनुअल परिनियोजन भी थकाऊ और दोहराव वाला हो सकता है। क्लस्टर में नोड्स की संख्या के आधार पर, परिनियोजन चरण समय लेने वाली और त्रुटि-प्रवण हो सकते हैं। कठपुतली, शेफ और Ansible जैसे कॉन्फ़िगरेशन प्रबंधन उपकरण बुनियादी ढांचे को तैनात करने में लोकप्रिय हैं, लेकिन स्टेटफुल डेटाबेस क्लस्टर के लिए, आपको पूरे डेटाबेस HA स्टैक की तैनाती को संभालने के लिए महत्वपूर्ण स्क्रिप्टिंग करने की आवश्यकता है। इसके अलावा, चुने हुए टेम्पलेट/मॉड्यूल/रसोई की किताब/भूमिका का सावधानीपूर्वक परीक्षण किया जाना चाहिए, इससे पहले कि आप अपने बुनियादी ढांचे के स्वचालन के हिस्से के रूप में इस पर भरोसा कर सकें। संस्करण परिवर्तनों के लिए स्क्रिप्ट को अद्यतन और पुन:परीक्षण करने की आवश्यकता होती है।
अच्छी खबर यह है कि ClusterControl पूरे स्टैक की तैनाती को स्वचालित करता है - और मुफ्त में भी! हमने हजारों उत्पादन क्लस्टर तैनात किए हैं, और यह सुनिश्चित करने के लिए कई सावधानियां बरती हैं कि वे उत्पादन के लिए तैयार हैं विभिन्न टोपोलॉजी समर्थित हैं, मास्टर-स्लेव प्रतिकृति से लेकर गैलेरा, एनडीबी और इनोडीबी क्लस्टर तक, शीर्ष पर विभिन्न डेटाबेस प्रॉक्सी के साथ।
ClusterControl के माध्यम से तैनात एक उच्च उपलब्धता स्टैक में तीन परतें होती हैं:
- डेटाबेस परत (उदा., गैलेरा क्लस्टर)
- प्रतिवर्ती प्रॉक्सी परत (उदा., HAProxy या ProxySQL)
- रक्षित परत, जो वर्चुअल आईपी के उपयोग के साथ, प्रॉक्सी परत की उच्च उपलब्धता सुनिश्चित करती है
इस ब्लॉग में, हम आपको दिखाने जा रहे हैं कि उच्च उपलब्धता सेटअप के लिए लोड बैलेंसर्स के साथ एक प्रोडक्शन-ग्रेड गैलेरा क्लस्टर को कैसे तैनात किया जाए। पूरे सेटअप में 6 होस्ट शामिल हैं:
- 1 होस्ट - ClusterControl (तैनाती, निगरानी, प्रबंधन सर्वर)
- 3 होस्ट - MySQL गैलेरा क्लस्टर
- 2 होस्ट - रिवर्स प्रॉक्सी क्लस्टर के सामने लोड बैलेंसर के रूप में कार्य करते हैं।
निम्नलिखित आरेख परिनियोजन पूर्ण होने के बाद हमारे अंतिम परिणाम को दर्शाता है:
आवश्यकताएं
ClusterControl को एक स्वतंत्र नोड पर रहना चाहिए जो क्लस्टर का हिस्सा नहीं है। ClusterControl डाउनलोड करें, और पेज आपके लिए एक अद्वितीय लाइसेंस जेनरेट करेगा और ClusterControl स्थापित करने के चरण दिखाएगा:
$ wget -O install-cc https://severalnines.com/scripts/install-cc
$ chmod +x install-cc
$ ./install-cc # as root or sudo user
निर्देशों का पालन करें जहां आपको MySQL सर्वर, ClusterControl नोड पर MySQL रूट पासवर्ड, ClusterControl उपयोग के लिए cmon पासवर्ड आदि के बारे में मार्गदर्शन किया जाएगा। स्थापना पूर्ण होने के बाद आपको निम्न पंक्ति मिलनी चाहिए:
Determining network interfaces. This may take a couple of minutes. Do NOT press any key.
Public/external IP => http://{public_IP}/clustercontrol
Installation successful. If you want to uninstall ClusterControl then run install-cc --uninstall.
फिर, ClusterControl सर्वर पर, एक SSH कुंजी जनरेट करें जिसका उपयोग हम बाद में पासवर्ड रहित SSH सेटअप करने के लिए करेंगे। आप सिस्टम में किसी भी उपयोगकर्ता का उपयोग कर सकते हैं लेकिन इसमें सुपर-यूज़र ऑपरेशंस (sudoer) करने की क्षमता होनी चाहिए। इस उदाहरण में, हमने रूट उपयोगकर्ता को चुना:
$ whoami
root
$ ssh-keygen -t rsa
उन सभी नोड्स के लिए पासवर्ड रहित SSH सेट करें, जिन्हें आप ClusterControl के माध्यम से मॉनिटर/प्रबंधित करना चाहते हैं। इस मामले में, हम इसे स्टैक के सभी नोड्स (क्लस्टरकंट्रोल नोड सहित) पर सेट करेंगे। ClusterControl नोड पर, निम्न कमांड चलाएँ और संकेत मिलने पर रूट पासवर्ड निर्दिष्ट करें:
$ ssh-copy-id [email protected] # clustercontrol
$ ssh-copy-id [email protected] # galera1
$ ssh-copy-id [email protected] # galera2
$ ssh-copy-id [email protected] # galera3
$ ssh-copy-id [email protected] # proxy1
$ ssh-copy-id [email protected] # proxy2
फिर आप यह सत्यापित कर सकते हैं कि क्या यह ClusterControl नोड पर निम्न कमांड चलाकर काम कर रहा है:
$ ssh [email protected] "ls /root"
सुनिश्चित करें कि आप पासवर्ड दर्ज करने की आवश्यकता के बिना उपरोक्त आदेश का परिणाम देख पा रहे हैं।
क्लस्टर परिनियोजित करना
ClusterControl गैलेरा क्लस्टर (कोडरशिप, पेरकोना और मारियाडीबी) के लिए सभी विक्रेताओं का समर्थन करता है। कुछ मामूली अंतर हैं जो विक्रेता को चुनने के आपके निर्णय को प्रभावित कर सकते हैं। यदि आप उनके बीच के अंतरों के बारे में जानना चाहते हैं, तो हमारी पिछली ब्लॉग पोस्ट देखें - गैलेरा क्लस्टर तुलना - कोडरशिप बनाम पेरकोना बनाम मारियाडीबी।
उत्पादन परिनियोजन के लिए, आपके पास न्यूनतम तीन-नोड गैलेरा क्लस्टर होना चाहिए। क्लस्टर के परिनियोजित होने के बाद, मैन्युअल रूप से या ClusterControl के माध्यम से आप इसे बाद में कभी भी स्केल कर सकते हैं। हम https://192.168.55.160/clustercontrol पर अपना ClusterControl UI खोलेंगे और पहला एडमिन यूजर बनाएंगे। फिर, शीर्ष मेनू पर जाएं और तैनाती -> MySQL गैलेरा पर क्लिक करें और आपको निम्नलिखित संवाद के साथ प्रस्तुत किया जाएगा:
दो चरण हैं, पहला "सामान्य और एसएसएच सेटिंग्स" है। यहां हमें SSH उपयोगकर्ता को कॉन्फ़िगर करने की आवश्यकता है जिसे ClusterControl को डेटाबेस नोड्स से कनेक्ट करने के लिए उपयोग करना चाहिए, साथ में SSH कुंजी के पथ के साथ (जैसा कि पूर्वापेक्षा अनुभाग के तहत उत्पन्न होता है) और साथ ही डेटाबेस नोड्स के SSH पोर्ट। ClusterControl मानता है कि सभी डेटाबेस नोड्स एक ही SSH उपयोगकर्ता, कुंजी और पोर्ट के साथ कॉन्फ़िगर किए गए हैं। इसके बाद, क्लस्टर को एक नाम दें, इस मामले में हम "MySQL Galera Cluster 5.7" का उपयोग करेंगे। यह मान बाद में बदला जा सकता है। फिर आवश्यक सॉफ़्टवेयर स्थापित करने के लिए क्लस्टरकंट्रोल को निर्देश देने के लिए विकल्पों का चयन करें, फ़ायरवॉल को अक्षम करें और विशेष लिनक्स वितरण पर सुरक्षा वृद्धि मॉड्यूल को भी अक्षम करें। सफल परिनियोजन की क्षमता को अधिकतम करने के लिए इन सभी को चालू करने की अनुशंसा की जाती है।
जारी रखें पर क्लिक करें और आपको निम्नलिखित संवाद के साथ प्रस्तुत किया जाएगा:
अगले चरण में, हमें डेटाबेस सर्वर - विक्रेता, संस्करण, डेटादिर, पोर्ट, आदि को कॉन्फ़िगर करने की आवश्यकता है - जो बहुत आत्म-व्याख्यात्मक हैं। "कॉन्फ़िगरेशन टेम्प्लेट" ClusterControl नोड के /usr/share/cmon/templates के अंतर्गत टेम्प्लेट फ़ाइल नाम है। "रिपॉजिटरी" यह है कि कैसे ClusterControl को डेटाबेस नोड पर रिपॉजिटरी को कॉन्फ़िगर करना चाहिए। डिफ़ॉल्ट रूप से, यह विक्रेता भंडार का उपयोग करेगा और भंडार द्वारा प्रदान किए गए नवीनतम संस्करण को स्थापित करेगा। हालांकि, कुछ मामलों में, सुरक्षा नीति प्रतिबंध के कारण उपयोगकर्ता के पास मूल भंडार से पहले से मौजूद भंडार हो सकता है। फिर भी, क्लस्टरकंट्रोल उनमें से अधिकांश का समर्थन करता है, जैसा कि रिपोजिटरी के अंतर्गत उपयोगकर्ता मार्गदर्शिका में वर्णित है।
अंत में, डेटाबेस नोड्स का IP पता या होस्टनाम (एक मान्य FQDN होना चाहिए) जोड़ें। आपको नोड के बाईं ओर एक हरे रंग का टिक आइकन दिखाई देगा, यह दर्शाता है कि ClusterControl पासवर्ड रहित SSH के माध्यम से नोड से जुड़ने में सक्षम था। अब आप जाने के लिए अच्छे हैं। परिनियोजन प्रारंभ करने के लिए परिनियोजन पर क्लिक करें। इसे पूरा होने में 15 से 20 मिनट का समय लग सकता है। आप गतिविधि (शीर्ष मेनू) -> नौकरियां -> क्लस्टर बनाएं . के अंतर्गत परिनियोजन प्रगति की निगरानी कर सकते हैं :
एक बार परिनियोजन पूरा हो जाने पर, इस बिंदु पर, हमारी वास्तुकला को नीचे दिखाया जा सकता है:
लोड बैलेंसर्स को तैनात करना
गैलेरा क्लस्टर में, सभी नोड समान होते हैं - प्रत्येक नोड में समान भूमिका और समान डेटासेट होता है। इसलिए, यदि कोई नोड विफल रहता है, तो क्लस्टर के भीतर कोई विफलता नहीं है। क्लस्टर विभाजन के दौरान निष्क्रिय नोड्स को छोड़ने के लिए केवल एप्लिकेशन पक्ष को विफलता की आवश्यकता होती है। इसलिए, गैलेरा क्लस्टर के शीर्ष पर लोड बैलेंसर रखने की अत्यधिक अनुशंसा की जाती है:
- एक से अधिक डेटाबेस एंडपॉइंट को एक एंडपॉइंट (लोड बैलेंसर होस्ट या वर्चुअल आईपी एड्रेस को एंडपॉइंट के रूप में) में एकीकृत करें।
- बैकएंड डेटाबेस सर्वर के बीच डेटाबेस कनेक्शन को संतुलित करें।
- स्वास्थ्य जांच करें और केवल स्वस्थ नोड्स को डेटाबेस कनेक्शन अग्रेषित करें।
- डेटाबेस सर्वरों को हिट करने से पहले आपत्तिजनक (खराब तरीके से लिखी गई) क्वेरी को रीडायरेक्ट/रीराइट/ब्लॉक करें।
गैलेरा क्लस्टर के लिए रिवर्स प्रॉक्सी के तीन मुख्य विकल्प हैं - HAProxy, MariaDB MaxScale या ProxySQL - सभी को ClusterControl द्वारा स्वचालित रूप से स्थापित और कॉन्फ़िगर किया जा सकता है। इस परिनियोजन में, हमने ProxySQL को चुना क्योंकि यह उपरोक्त सभी की जाँच करता है और साथ ही यह बैकएंड सर्वर के MySQL प्रोटोकॉल को समझता है।
इस आर्किटेक्चर में, हम डेटाबेस टियर में किसी भी सिंगल-पॉइंट-ऑफ-फेल्योर (एसपीओएफ) को खत्म करने के लिए दो प्रॉक्सीएसक्यूएल सर्वरों का उपयोग करना चाहते हैं, जो एक फ्लोटिंग वर्चुअल आईपी एड्रेस का उपयोग करके एक साथ बंधे होंगे। हम इसे अगले भाग में समझाएंगे। एक नोड सक्रिय प्रॉक्सी के रूप में कार्य करेगा और दूसरा हॉट-स्टैंडबाय के रूप में कार्य करेगा। जो भी नोड किसी निश्चित समय पर वर्चुअल आईपी एड्रेस रखता है, वह सक्रिय नोड होता है।
पहले ProxySQL सर्वर को परिनियोजित करने के लिए, बस क्लस्टर क्रिया मेनू (सारांश बार के दाईं ओर) पर जाएँ और लोड बैलेंसर जोड़ें -> ProxySQL -> ProxySQL तैनात करें पर क्लिक करें। और आप निम्नलिखित देखेंगे:
फिर से, अधिकांश क्षेत्र स्व-व्याख्यात्मक हैं। "डेटाबेस उपयोगकर्ता" अनुभाग में, ProxySQL एक गेटवे के रूप में कार्य करता है जिसके माध्यम से आपका एप्लिकेशन डेटाबेस से जुड़ता है। एप्लिकेशन ProxySQL के विरुद्ध प्रमाणित करता है, इसलिए आपको सभी बैकएंड MySQL नोड्स के सभी उपयोगकर्ताओं को उनके पासवर्ड के साथ ProxySQL में जोड़ना होगा। ClusterControl से, आप या तो एप्लिकेशन द्वारा उपयोग किए जाने के लिए एक नया उपयोगकर्ता बना सकते हैं - आप इसका नाम, पासवर्ड, किस डेटाबेस तक पहुंच प्रदान करते हैं और उपयोगकर्ता के पास कौन से MySQL विशेषाधिकार हैं, यह तय कर सकते हैं। ऐसा उपयोगकर्ता MySQL और ProxySQL दोनों पक्षों पर बनाया जाएगा। दूसरा विकल्प, मौजूदा बुनियादी ढांचे के लिए अधिक उपयुक्त, मौजूदा डेटाबेस उपयोगकर्ताओं का उपयोग करना है। आपको उपयोगकर्ता नाम और पासवर्ड पास करने की आवश्यकता है, और ऐसा उपयोगकर्ता केवल ProxySQL पर बनाया जाएगा।
यदि हम SET autocommit=0 के साथ लेन-देन शुरू करते हैं, तो अंतिम खंड, "अंतर्निहित लेन-देन", ClusterControl ProxySQL को मास्टर को सभी ट्रैफ़िक भेजने के लिए कॉन्फ़िगर करेगा। अन्यथा, यदि आप लेन-देन बनाने के लिए BEGIN या START TRANSACTION का उपयोग करते हैं, तो ClusterControl क्वेरी नियमों में रीड/राइट स्प्लिट को कॉन्फ़िगर करेगा। यह सुनिश्चित करने के लिए है कि ProxySQL लेनदेन को सही ढंग से संभालेगा। यदि आपको पता नहीं है कि आपका आवेदन यह कैसे करता है, तो आप बाद वाले को चुन सकते हैं।
दूसरे ProxySQL नोड के लिए समान कॉन्फ़िगरेशन दोहराएं, "सर्वर पता" मान को छोड़कर, जो कि 192.168.55.182 है। एक बार हो जाने के बाद, दोनों नोड्स "नोड्स" टैब के अंतर्गत सूचीबद्ध होंगे -> ProxySQL जहां आप सीधे UI से उनकी निगरानी और प्रबंधन कर सकते हैं:
इस समय, हमारी वास्तुकला अब इस तरह दिख रही है:
यदि आप ProxySQL के बारे में अधिक जानना चाहते हैं, तो इस ट्यूटोरियल को देखें - MySQL के लिए डेटाबेस लोड बैलेंसिंग और ProxySQL के साथ मारियाडीबी - ट्यूटोरियल।
वर्चुअल IP पता परिनियोजित करना
अंतिम भाग वर्चुअल आईपी एड्रेस है। इसके बिना, हमारे लोड बैलेंसर (रिवर्स प्रॉक्सी) कमजोर कड़ी होंगे क्योंकि वे विफलता का एकल-बिंदु होंगे - जब तक कि एप्लिकेशन में विफल डेटाबेस कनेक्शन को किसी अन्य लोड बैलेंसर पर स्वचालित रूप से रीडायरेक्ट करने की क्षमता न हो। फिर भी, वर्चुअल आईपी पते का उपयोग करके उन दोनों को एकीकृत करना और डेटाबेस परत के लिए कनेक्शन समापन बिंदु को सरल बनाना एक अच्छा अभ्यास है।
ClusterControl UI से -> लोड बैलेंसर जोड़ें -> Keepalived -> Keepalived तैनात करें और दो ProxySQL होस्ट चुनें जिन्हें हमने परिनियोजित किया है:
साथ ही, IP पते को बाइंड करने के लिए वर्चुअल IP पता और नेटवर्क इंटरफ़ेस निर्दिष्ट करें। नेटवर्क इंटरफ़ेस दोनों ProxySQL नोड्स पर मौजूद होना चाहिए। एक बार तैनात करने के बाद, आपको क्लस्टर के सारांश बार में निम्नलिखित हरे रंग के चेक दिखाई देने चाहिए:
इस बिंदु पर, हमारी वास्तुकला को नीचे दिखाया जा सकता है:
हमारा डेटाबेस क्लस्टर अब उत्पादन उपयोग के लिए तैयार है। आप अपने मौजूदा डेटाबेस को इसमें आयात कर सकते हैं या एक नया नया डेटाबेस बना सकते हैं। यदि परीक्षण लाइसेंस की समय सीमा समाप्त नहीं हुई है, तो आप स्कीमा और उपयोगकर्ता प्रबंधन सुविधा का उपयोग कर सकते हैं।
यह समझने के लिए कि ClusterControl Keepalived को कैसे कॉन्फ़िगर करता है, इस ब्लॉग पोस्ट को देखें, कैसे ClusterControl वर्चुअल IP को कॉन्फ़िगर करता है और विफलता के दौरान क्या अपेक्षा करें।
डेटाबेस क्लस्टर से कनेक्ट करना
एप्लिकेशन और क्लाइंट के दृष्टिकोण से, उन्हें पोर्ट 6033 पर 192.168.55.180 से कनेक्ट करने की आवश्यकता है जो लोड बैलेंसर्स के ऊपर तैरता हुआ वर्चुअल आईपी एड्रेस है। उदाहरण के लिए, Wordpress डेटाबेस कॉन्फ़िगरेशन कुछ इस तरह होगा:
/** The name of the database for WordPress */
define( 'DB_NAME', 'wp_myblog' );
/** MySQL database username */
define( 'DB_USER', 'wp_myblog' );
/** MySQL database password */
define( 'DB_PASSWORD', 'mysecr3t' );
/** MySQL hostname - virtual IP address with ProxySQL load-balanced port*/
define( 'DB_HOST', '192.168.55.180:6033' );
यदि आप लोड बैलेंसर को दरकिनार कर डेटाबेस क्लस्टर को सीधे एक्सेस करना चाहते हैं, तो आप डेटाबेस होस्ट के पोर्ट 3306 से कनेक्ट कर सकते हैं। यह आमतौर पर प्रशासन, प्रबंधन और समस्या निवारण के लिए DBA कर्मचारियों द्वारा आवश्यक होता है। ClusterControl के साथ, इनमें से अधिकांश ऑपरेशन सीधे यूजर इंटरफेस से किए जा सकते हैं।
अंतिम विचार
जैसा कि ऊपर दिखाया गया है, डेटाबेस क्लस्टर को तैनात करना अब कोई मुश्किल काम नहीं है। एक बार तैनात होने के बाद, मुफ्त निगरानी सुविधाओं के साथ-साथ बैकअप प्रबंधन, विफलता/वसूली और अन्य के लिए वाणिज्यिक सुविधाओं का एक पूरा सूट है। विभिन्न प्रकार के क्लस्टर/प्रतिकृति टोपोलॉजी का तेजी से परिनियोजन उच्च उपलब्धता डेटाबेस समाधानों का मूल्यांकन करते समय उपयोगी हो सकता है, और वे आपके विशेष वातावरण में कैसे फिट होते हैं।