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

HAProxy से ProxySQL में माइग्रेट करने के लिए युक्तियाँ

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

इस संक्षिप्त ब्लॉग पोस्ट में हम माइग्रेशन प्रक्रिया के संबंध में कुछ सुझाव साझा करेंगे।

अपना अपग्रेड करने की योजना बना रहे हैं

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

यदि आप इसका उपयोग करने पर विचार करते हैं तो ProxySQL में परीक्षण पढ़ें/लिखें स्प्लिट करें

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

जब तक आप निहित लेनदेन का उपयोग नहीं करते, तब तक ClusterControl स्थापित करेगा क्वेरी नियमों के एक सेट का उपयोग करके आपके लिए पढ़ने/लिखने का विभाजन:

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

ProxySQL में कॉन्फ़िगरेशन फ़ाइल के बारे में भूल जाएं

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

बेशक, ClusterControl UI भी आपको ProxySQL को फिर से कॉन्फ़िगर करने की अनुमति देता है:

ProxySQL परिनियोजन पैटर्न

प्रॉक्सीएसक्यूएल को परिनियोजित करने के दो मुख्य तरीके हैं। आप प्रॉक्सीएसक्यूएल को इस पर तैनात करने के लिए समर्पित सर्वर का उपयोग कर सकते हैं:

या आप ProxySQL को एप्लिकेशन सर्वर से जोड़ सकते हैं:

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

बड़े डिप्लॉयमेंट के लिए ProxySQL क्लस्टर का उपयोग करें

यह सुनिश्चित करना कि आपके ProxySQL इंस्टेंस में हर समय एक ही कॉन्फ़िगरेशन है, चुनौतीपूर्ण हो सकता है, खासकर यदि उनकी संख्या बड़ी हो। ऐसी चुनौतियों से निपटने के कई तरीके हैं - Ansible/Chef/Puppet, शेल स्क्रिप्ट्स इत्यादि। हम बिल्ट-इन समाधान - ProxySQL क्लस्टर पर भरोसा करने का सुझाव देंगे। केवल कुछ कॉन्फ़िगरेशन परिवर्तनों के साथ आप प्रॉक्सीएसक्यूएल नोड्स को एक क्लस्टर बनाने के लिए कॉन्फ़िगर कर सकते हैं जहां एक नोड पर कॉन्फ़िगरेशन परिवर्तन क्लस्टर के सभी सदस्यों में प्रचारित किया जाएगा।

सुंदर लोड बैलेंसर स्विचिंग के लिए SO_REUSEPORT के साथ टिंकर

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

दिलचस्प बात यह है कि ProxySQL और HAProxy के हाल के संस्करण (1.8 से शुरू) दोनों SO_REUSEPORT का उपयोग करने में सक्षम हैं। यह सॉकेट विकल्प 3.9 कर्नेल से शुरू होकर लिनक्स में उपलब्ध है और यह कई प्रक्रियाओं को एक ही पोर्ट को साझा करने की अनुमति देता है। ProxySQL इसका उपयोग ProxySQL संस्करणों के बीच सुंदर उन्नयन के लिए कर सकता है, HAProxy इसका उपयोग एप्लिकेशन पर किसी भी प्रभाव के बिना कॉन्फ़िगरेशन को पुनः लोड करने के लिए करता है। दिलचस्प बात यह है कि उन दो लोड बैलेंसरों के बीच निर्बाध प्रवास के लिए पोर्ट को HAProxy के साथ साझा करने के लिए ProxySQL को कॉन्फ़िगर करना संभव है।

ऐसा करने का प्रयास करते समय आपको कुछ बातों पर विचार करना होगा - पहला, ProxySQL डिफ़ॉल्ट रूप से इस विकल्प का उपयोग नहीं करता है, आपको स्टार्टअप पर ProxySQL में -r ध्वज जोड़ना होगा। आप ProxySQL systemd यूनिट फ़ाइल को संपादित करके ऐसा कर सकते हैं:

[email protected]:~# systemctl edit proxysql --full

और ExecStart निर्देश को इसमें बदलना:

ExecStart=/usr/bin/proxysql -c /etc/proxysql.cnf -r

लिनक्स में आपको एक और सीमा के बारे में पता होना चाहिए कि केवल उसी उपयोगकर्ता आईडी द्वारा शुरू की गई प्रक्रियाएं ही पोर्ट को साझा कर सकती हैं। इसका मतलब यह होगा कि आपको प्रॉक्सीएसक्यूएल को "हैप्रोक्सी" उपयोगकर्ता के रूप में निष्पादित करने के लिए पुन:कॉन्फ़िगर करना होगा।

हमेशा की तरह, उत्पादन परिवेश में इस ऑपरेशन को करने का प्रयास करने से पहले आप परीक्षण चलाना चाह सकते हैं। इस उपलब्धि को हासिल करना निश्चित रूप से संभव है लेकिन आपको सावधानी बरतनी चाहिए और दोबारा जांच करनी चाहिए कि यह आपके पर्यावरण से संबंधित किसी प्रकार के गैर-मानक कॉन्फ़िगरेशन के कारण आपके उत्पादन को प्रभावित नहीं करेगा।

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. खंड के बीच MySQL समावेशी नहीं है?

  2. एक विदेशी कुंजी बाधा में प्रयुक्त स्तंभ नहीं बदल सकता

  3. MySQL में लोअरकेस अक्षरों वाली पंक्तियों को खोजने के 3 तरीके

  4. MySQL डेटाबेस का नाम कैसे बदलें

  5. भौगोलिक निकटता की गणना के लिए सूत्र