स्केलेबिलिटी एक सिस्टम की संपत्ति है जो संसाधनों को जोड़कर मांगों की बढ़ती मात्रा को संभालती है। मांगों की इस राशि के कारण अस्थायी हो सकते हैं, उदाहरण के लिए, यदि आप ग्राहकों या कर्मचारियों की वृद्धि के लिए बिक्री पर छूट, या स्थायी, शुरू कर रहे हैं। किसी भी स्थिति में, आपको इन परिवर्तनों को मांगों या ट्रैफ़िक में वृद्धि पर प्रबंधित करने के लिए संसाधनों को जोड़ने या निकालने में सक्षम होना चाहिए।
आपके डेटाबेस को स्केल करने के लिए विभिन्न दृष्टिकोण उपलब्ध हैं। इस ब्लॉग में, हम देखेंगे कि ये दृष्टिकोण क्या हैं और कनेक्शन पूलर्स और लोड बैलेंसर्स का उपयोग करके अपने PostgreSQL डेटाबेस को कैसे बढ़ाया जाए।
क्षैतिज और लंबवत स्केलिंग
आपके डेटाबेस को मापने के दो मुख्य तरीके हैं।
- क्षैतिज स्केलिंग (स्केल-आउट):यह डेटाबेस क्लस्टर बनाने या बढ़ाने के लिए और अधिक डेटाबेस नोड्स जोड़कर किया जाता है। यह नोड्स के बीच ट्रैफ़िक को संतुलित करते हुए पढ़ने के प्रदर्शन को बेहतर बनाने में आपकी मदद कर सकता है।
- वर्टिकल स्केलिंग (स्केल-अप):यह मौजूदा डेटाबेस नोड में अधिक हार्डवेयर संसाधन (सीपीयू, मेमोरी, डिस्क) जोड़कर किया जाता है। PostgreSQL को नए या बेहतर हार्डवेयर संसाधन का उपयोग करने की अनुमति देने के लिए कुछ कॉन्फ़िगरेशन पैरामीटर को बदलने की आवश्यकता हो सकती है।
कनेक्शन पूलर और लोड बैलेंसर
क्षैतिज और लंबवत दोनों स्केलिंग में, आपके डेटाबेस पर लोड को कम करने के लिए एक बाहरी टूल जोड़ना उपयोगी हो सकता है जिससे प्रदर्शन में सुधार होगा। शायद यह पर्याप्त नहीं है, लेकिन यह एक अच्छी शुरुआत है। ऐसा करने के लिए, कनेक्शन पूलर और लोड बैलेंसर को लागू करना एक अच्छा विचार है। मैंने कहा "और" क्योंकि वे अलग-अलग भूमिकाओं के लिए डिज़ाइन किए गए हैं।
कनेक्शन पूलिंग कनेक्शनों का एक पूल बनाने और डेटाबेस में हर समय नए कनेक्शन खोलने से बचने के लिए उनका पुन:उपयोग करने का एक तरीका है, जो आपके अनुप्रयोगों के प्रदर्शन को काफी बढ़ा देगा। PgBouncer PostgreSQL के लिए डिज़ाइन किया गया एक लोकप्रिय कनेक्शन पूलर है।
लोड बैलेंसर का उपयोग करना आपके डेटाबेस टोपोलॉजी में उच्च उपलब्धता रखने का एक तरीका है और यह उपलब्ध नोड्स के बीच ट्रैफ़िक को संतुलित करके प्रदर्शन को बढ़ाने के लिए भी उपयोगी है। इसके लिए, HAProxy PostgreSQL के लिए एक अच्छा विकल्प है, क्योंकि यह एक ओपन-सोर्स प्रॉक्सी है जिसका उपयोग उच्च उपलब्धता, लोड संतुलन, और TCP और HTTP आधारित अनुप्रयोगों के लिए प्रॉक्सी को लागू करने के लिए किया जा सकता है।
HAProxy, PgBouncer, और PostgreSQL के संयोजन को कैसे लागू करें
दोनों तकनीकों का एक संयोजन, HAProxy और PgBouncer, संभवतः आपके PostgreSQL वातावरण में प्रदर्शन को बढ़ाने और सुधारने का सबसे अच्छा तरीका है। तो, हम देखेंगे कि निम्नलिखित आर्किटेक्चर का उपयोग करके इसे कैसे कार्यान्वित किया जाए:
हम मान लेंगे कि आपने ClusterControl स्थापित कर लिया है, यदि नहीं, तो आप इस पर जा सकते हैं आधिकारिक साइट, या इसे स्थापित करने के लिए आधिकारिक दस्तावेज भी देखें।
सबसे पहले, आपको इसके सामने HAProxy के साथ अपने PostgreSQL क्लस्टर को तैनात करने की आवश्यकता है। इसके लिए, कृपया इस ब्लॉग पोस्ट में दिए गए चरणों का पालन करें ताकि ClusterControl का उपयोग करके PostgreSQL और HAProxy दोनों को परिनियोजित किया जा सके।
इस समय, आपके पास कुछ ऐसा होगा:
अब, आप प्रत्येक डेटाबेस नोड पर या किसी बाहरी मशीन पर PgBouncer स्थापित कर सकते हैं ।
PgBouncer सॉफ़्टवेयर प्राप्त करने के लिए आप PgBouncer डाउनलोड सेक्शन में जा सकते हैं, या RPM या DEB रिपॉजिटरी का उपयोग कर सकते हैं। इस उदाहरण के लिए, हम CentOS 8 का उपयोग करेंगे और इसे आधिकारिक PostgreSQL रिपॉजिटरी से स्थापित करेंगे।
सबसे पहले, PostgreSQL साइट से संबंधित रिपॉजिटरी को डाउनलोड और इंस्टॉल करें (यदि आपके पास यह अभी तक नहीं है):
$ wget https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
$ rpm -Uvh pgdg-redhat-repo-latest.noarch.rpm
फिर, PgBouncer पैकेज इंस्टाल करें:
$ yum install pgbouncer
जब यह पूरा हो जाता है, तो आपके पास /etc/pgbouncer/pgbouncer.ini में स्थित एक नई कॉन्फ़िगरेशन फ़ाइल होगी। डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइल के रूप में आप निम्न उदाहरण का उपयोग कर सकते हैं:
$ cat /etc/pgbouncer/pgbouncer.ini
[databases]
world = host=127.0.0.1 port=5432 dbname=world
[pgbouncer]
logfile = /var/log/pgbouncer/pgbouncer.log
pidfile = /var/run/pgbouncer/pgbouncer.pid
listen_addr = *
listen_port = 6432
auth_type = md5
auth_file = /etc/pgbouncer/userlist.txt
admin_users = admindb
और प्रमाणीकरण फ़ाइल:
$ cat /etc/pgbouncer/userlist.txt
"admindb" "root123"
यह सिर्फ एक बुनियादी उदाहरण है। सभी उपलब्ध पैरामीटर प्राप्त करने के लिए, आप आधिकारिक दस्तावेज़ीकरण देख सकते हैं।
इसलिए, इस मामले में, मैंने एक ही डेटाबेस नोड में PgBouncer स्थापित किया है, सभी IP पतों को सुन रहा है, और यह "world" नामक एक PostgreSQL डेटाबेस से जुड़ता है। मैं एक सादे-पाठ पासवर्ड के साथ userlist.txt फ़ाइल में अनुमत उपयोगकर्ताओं का प्रबंधन भी कर रहा हूं जिसे जरूरत पड़ने पर एन्क्रिप्ट किया जा सकता है।
PgBouncer सेवा शुरू करने के लिए, आपको बस निम्नलिखित कमांड चलाने की जरूरत है:
$ pgbouncer -d /etc/pgbouncer/pgbouncer.ini
अब, PostgreSQL डेटाबेस तक पहुंचने के लिए अपनी स्थानीय जानकारी (पोर्ट, होस्ट, उपयोगकर्ता नाम और डेटाबेस नाम) का उपयोग करके निम्न कमांड चलाएँ:
$ psql -p 6432 -h 127.0.0.1 -U admindb world
Password for user admindb:
psql (12.4)
Type "help" for help.
world=#
यह एक बुनियादी टोपोलॉजी है। आप इसे सुधार सकते हैं, उदाहरण के लिए, विफलता के एक बिंदु से बचने के लिए दो या दो से अधिक लोड बैलेंसर नोड्स जोड़ना, और उपलब्धता सुनिश्चित करने के लिए "रख-रखाव" जैसे कुछ टूल का उपयोग करना। यह ClusterControl का उपयोग करके भी किया जा सकता है।
PgBouncer के बारे में अधिक जानकारी के लिए और इसका उपयोग कैसे करें, आप इस ब्लॉग पोस्ट को देख सकते हैं।
निष्कर्ष
यदि आपको अपने PostgreSQL क्लस्टर को स्केल करने की आवश्यकता है, तो HAProxy और PgBouncer जोड़ना एक ही समय में स्केल-आउट और स्केल-अप करने का एक अच्छा तरीका है, क्योंकि आप ट्रैफ़िक को संतुलित करने के लिए अधिक हॉट स्टैंडबाय नोड्स जोड़ सकते हैं। और आप खुले हुए कनेक्शनों का पुन:उपयोग करके प्रदर्शन में सुधार करेंगे।
क्लस्टरकंट्रोल मॉनिटरिंग, अलर्टिंग, ऑटोमैटिक फेलओवर, बैकअप, पॉइंट-इन-टाइम रिकवरी, बैकअप वेरिफिकेशन से लेकर रीड रेप्लिकेशंस के स्केलिंग तक कई तरह की सुविधाएँ प्रदान करता है। यह आपके PostgreSQL डेटाबेस को एक अनुकूल और सहज UI से क्षैतिज या लंबवत तरीके से स्केल करने में आपकी सहायता कर सकता है।