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

PostgreSQL कनेक्शन पूलिंग:भाग 2 - PgBouncer

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

PgBouncer लगभग हर PostgreSQL DBaaS विक्रेता द्वारा समर्थित है, और व्यापक रूप से पूरे समुदाय में उपयोग किया जाता है। इस ब्लॉग पोस्ट में, हम बताएंगे कि PgBouncer कैसे काम करता है, इसका उपयोग करने के पेशेवरों और विपक्षों और कनेक्शन पूलर को कैसे सेटअप करें। यदि आप सामान्य रूप से कनेक्शन पूलिंग के बारे में अधिक जानना चाहते हैं, या सोच रहे हैं कि क्या यह आपके परिनियोजन के लिए सही है, तो हमारी पोस्टग्रेएसक्यूएल कनेक्शन पूलिंग देखें:भाग 1 - पेशेवरों और विपक्ष पोस्ट।

PostgreSQL कनेक्शन पूलिंग सीरीज

  • भाग 1 - फायदे और नुकसान
  • भाग 2 - PgBouncer
  • भाग 3 - Pgpool-II
  • भाग 4 - PgBouncer बनाम Pgpool-II

PgBouncer कैसे काम करता है?

जब PgBouncer क्लाइंट कनेक्शन प्राप्त करता है, तो यह पहले PostgreSQL सर्वर की ओर से प्रमाणीकरण करता है। PgBouncer उन सभी प्रमाणीकरण तंत्रों का समर्थन करता है जो PostgreSQL सर्वर समर्थन करता है, जिसमें होस्ट-आधारित-पहुंच कॉन्फ़िगरेशन शामिल है (नोट:हम PgBouncer के माध्यम से प्रतिकृति कनेक्शन को रूट नहीं कर सकते हैं)। यदि पासवर्ड प्रदान किया जाता है, तो प्रमाणीकरण दो तरीकों से किया जा सकता है:

  1. PgBouncer सबसे पहले userlist.txt फ़ाइल की जाँच करता है - यह फ़ाइल (उपयोगकर्ता नाम, md5 एन्क्रिप्टेड पासवर्ड) टुपल्स का एक सेट निर्दिष्ट करती है। यदि इस फ़ाइल में उपयोगकर्ता नाम मौजूद है, तो पासवर्ड का मिलान दिए गए मान से किया जाता है। PostgreSQL सर्वर से कोई कनेक्शन नहीं बना है।
  2. यदि पासथ्रू प्रमाणीकरण सेटअप है, और उपयोगकर्ता userlist.txt फ़ाइल में नहीं मिलता है, तो PgBouncer एक auth_query खोजता है। यह एक पूर्वनिर्धारित उपयोगकर्ता के रूप में PostgreSQL से जुड़ता है (जिसका पासवर्ड userlist.txt फ़ाइल में मौजूद होना चाहिए) और उपयोगकर्ता के पासवर्ड को खोजने के लिए ऑथ-क्वेरी को निष्पादित करता है और इसे दिए गए मान से मेल खाता है।

एक बार प्रमाणीकरण सफल हो जाने पर:

  1. PgBouncer एक ही उपयोगकर्ता नाम+डेटाबेस संयोजन के साथ कैश्ड कनेक्शन की जांच करता है।
  2. यदि कोई कैश्ड कनेक्शन मिलता है, तो यह क्लाइंट को कनेक्शन लौटा देता है।
  3. यदि कोई कैश्ड कनेक्शन नहीं मिलता है, तो यह एक नया कनेक्शन बनाता है, बशर्ते एक नया कनेक्शन बनाने से:
    • कनेक्शन की संख्या> पूल_साइज़ तक बढ़ाएँ
    • क्लाइंट से कनेक्शन की संख्या बढ़ाकर> max_client_connections
    • डेटाबेस से कनेक्शन की संख्या बढ़ाकर> max_db_connections
    • करें
    • उपयोगकर्ता से कनेक्शन की संख्या बढ़ाकर> max_user_connections
    • करें
  4. इन सभी मानों को PgBouncer सेटिंग में परिभाषित किया जा सकता है।
  5. यदि कोई नया कनेक्शन बनाने से किसी भी सेटिंग का उल्लंघन होता है, तो PgBouncer कनेक्शन को तब तक कतार में खड़ा करता है जब तक कि एक नया कनेक्शन नहीं बनाया जा सकता, सिवाय इसके कि यह max_client_connections प्रतिबंध का उल्लंघन करता हो।
    ध्यान दें - PgBouncer मोड के आधार पर प्रमाणीकरण के बाद के चरणों का समय थोड़ा भिन्न होता है। लेन-देन या स्टेटमेंट पूलिंग मोड के तहत, प्रमाणीकरण के बाद के चरणों को केवल तभी निष्पादित किया जाता है जब क्लाइंट लेनदेन/कथन निष्पादित करना शुरू कर देता है। हम नीचे पूलिंग मोड के बारे में अधिक चर्चा करते हैं।
  6. यदि यह max_client_connections प्रतिबंध का उल्लंघन करता है, तो यह कनेक्शन को रोक देता है।

पूलिंग पर आधारित मोड, PgBouncer डेटाबेस में वापस कनेक्शन वापस करने के अवसर की प्रतीक्षा करता है:

  • सत्र पूलिंग मोड में, एक कनेक्शन पूल में तभी लौटाया जाता है जब क्लाइंट सत्र बंद कर देता है।
  • लेन-देन पूलिंग मोड में, एक कनेक्शन पूल में तभी लौटाया जाता है जब कोई क्लाइंट लेन-देन पूरा करता है (आमतौर पर या तो रोलबैक या कमिट निष्पादित किया जाता है)। परिणामस्वरूप, इस मोड में सत्र-आधारित सुविधाएँ समर्थित नहीं हैं। इस बात की कोई गारंटी नहीं है कि एक ही क्लाइंट पर चलने वाले दो लेन-देन PgBouncer कनेक्शन एक ही PgBouncer सर्वर कनेक्शन पर चलेंगे।
  • स्टेटमेंट पूलिंग मोड में, स्टेटमेंट निष्पादित होते ही एक कनेक्शन पूल में वापस आ जाता है। यहां, ऑटोकॉमिट हमेशा चालू रहता है।

कनेक्शन को वापस डेटाबेस में वापस करने से पहले, PgBouncer एक रीसेट क्वेरी चलाता है जिससे सत्र की सभी जानकारी छीन ली जाती है - इससे क्लाइंट के बीच कनेक्शन साझा करना सुरक्षित हो जाता है। एप्लिकेशन की जरूरतों के आधार पर इस क्वेरी को कॉन्फ़िगर करना संभव है।

लेन-देन पूलिंग मोड का सबसे अधिक बार उपयोग किया जाता है, हालांकि सत्र पूलिंग मोड विशेष कार्यभार के लिए उपयोगी हो सकता है। आप PgBouncer के बारे में उनके विकी पेज पर अधिक पढ़ सकते हैं।

PostgreSQL कनेक्शन पूलिंग:भाग 2 - PgBouncerट्वीट करने के लिए क्लिक करें

PgBouncer क्यों चुनें?

जब PostgreSQL में कनेक्शन पूलिंग की बात आती है तो PgBouncer सबसे लोकप्रिय विकल्प है, इसके कई कारण हैं। यहां कुछ बेहतरीन सुविधाएं और पेशेवर PgBouncer ऑफ़र दिए गए हैं:

  • पूलिंग मोड - उपयोगकर्ताओं को यह तय करने की शक्ति देकर कि पूल में कनेक्शन कब लौटाया जाए, PgBouncer उपयोग के मामलों की एक विस्तृत श्रृंखला का समर्थन करने में सक्षम है। और, चूंकि यह सेटअप पूल स्तर पर है, आप अपने सामान्य डेटाबेस कनेक्शन के लिए लेन-देन मोड (बेहतर प्रदर्शन) का उपयोग कर सकते हैं, और सत्र मोड केवल तभी उपयोग कर सकते हैं जब आपको तैयार कथन जैसी सुविधाओं की आवश्यकता हो!
  • आसान सेटअप और उपयोग - PgBouncer बॉक्स से बाहर सेटअप करने के लिए सबसे आसान PostgreSQL कनेक्शन पूलर्स में से एक है, और इसके लिए क्लाइंट-साइड कोड परिवर्तन की भी आवश्यकता नहीं है।
  • पासथ्रू प्रमाणीकरण - PgBouncer कुछ "मिडलवेयर" कनेक्शन पूलर्स में से एक है जो किसी उपयोगकर्ता को उनके पासवर्ड (सादे टेक्स्ट या एन्क्रिप्टेड रूप में) तक पहुंच के बिना सुरक्षित रूप से प्रमाणित कर सकता है। यह PgBouncer को अधिक सुरक्षित और बनाए रखने में बहुत आसान बनाता है - जब भी कोई उपयोगकर्ता अपना पासवर्ड अपडेट करता है तो आपको PgBouncer को अपडेट करने की आवश्यकता नहीं होती है।
  • लाइटवेट - यह एक एकल प्रक्रिया है, और क्लाइंट से सभी कमांड और सर्वर से प्रतिक्रियाएं बिना किसी प्रोसेसिंग के PgBouncer पास करती हैं। इसलिए, इसे एक ही बार में संपूर्ण सामग्री को 'देखने' की आवश्यकता नहीं है, और इसलिए, बहुत कम मेमोरी फ़ुटप्रिंट बनाए रखता है।
  • मापनीयता और प्रदर्शन - जैसा कि हम अपनी श्रृंखला के अंतिम भाग में और अधिक विस्तार से चर्चा करेंगे, PgBouncer प्रति सेकंड लेन-देन में उल्लेखनीय रूप से सुधार कर सकता है जो आपका PostgreSQL सर्वर समर्थन कर सकता है, और यह बहुत बड़ी संख्या में ग्राहकों के लिए बहुत अच्छा है।

PgBouncer क्या नहीं करता है?

PgBouncer, जबकि एक बेहतरीन कनेक्शन पूलर, स्वचालित लोड संतुलन या उच्च-उपलब्धता का समर्थन नहीं करता है। यह एक आर्किटेक्चर बनाने के लिए HAProxy जैसे अन्य सामान्य linux टूल का उपयोग करने की अनुशंसा करता है जो इन सुविधाओं का समर्थन करता है।

नीचे लोड-संतुलित रीड्स के लिए नमूना PostgreSQL आर्किटेक्चर पर एक नज़र डालें:

नोट - मास्टर नोड (कि ये सभी गुलाम हैं) से प्रतिकृति होगी) आरेख में नहीं दिखाया गया है।

PgBouncer कैसे सेट करें

यदि आपके पास ScaleGrid PostgreSQL परिनियोजन है, तो आप कुछ ही क्लिक में PgBouncer सेट कर सकते हैं। अपने PostgreSQL क्लस्टर के विवरण दृश्य पर जाएं और PgBouncer आइकन पर क्लिक करें। एक बार जब आप "PgBouncer सक्षम करें" का चयन करते हैं तो आपको अपने पूलिंग मोड और पूल आकार को अनुकूलित करने के लिए कॉन्फ़िगरेशन विकल्पों के साथ प्रस्तुत किया जाएगा - आप डिफ़ॉल्ट स्वीकार कर सकते हैं (चिंता न करें, आप उन्हें बिना किसी डाउनटाइम के कभी भी बदल सकते हैं), और सक्षम करें पर क्लिक करें!

और बस! आपका जाना अच्छा है।

यदि आपके पास एक गैर-स्केलग्रिड परिनियोजन है, तो PgBouncer को PostgreSQL रिपॉजिटरी के हिस्से के रूप में वितरित किया जाता है और संबंधित पैकेज प्रबंधकों का उपयोग करके स्थापित किया जा सकता है। अधिक विस्तृत निर्देशों के लिए, या स्रोत से निर्माण करने के लिए, आप उनके ब्लॉग के निर्देशों का पालन कर सकते हैं।

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

  1. क्लाइंट को प्रमाणित करने के लिए (उपयोगकर्ता नाम, md5 एन्क्रिप्टेड पासवर्ड) की एक सूची या अधिक सुरक्षित परिनियोजन के लिए एक पासथ्रू प्रमाणीकरण सेटअप।
  2. इंटरफ़ेस/आईपी:आने वाले कनेक्शन सुनने के लिए पोर्ट।
  3. पूल परिभाषाएं। एक 'पूल' एक ऐसा नाम है जिसे क्लाइंट PgBouncer से कनेक्ट करते समय डेटाबेस-नाम के रूप में उपयोग करते हैं - इसे एक पूर्ण कनेक्शन स्ट्रिंग (होस्ट, पोर्ट, डीबीनाम और उपयोगकर्ता) में मैप किया जा सकता है। सबसे सरल परिभाषा फ़ॉर्म की है:
    * = host=
    यह प्रत्येक dbname+उपयोगकर्ता संयोजन के लिए डायनामिक पूल बनाएगा, और उपयोगकर्ता द्वारा प्रदान किए गए पोर्ट, dbname और उपयोगकर्ता नाम का उपयोग करके परिभाषित होस्ट से कनेक्ट होगा।

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

PgBouncer, PostgreSQL कनेक्शन पूलिंग के लिए एकमात्र विकल्प नहीं है - हमारी अगली पोस्ट में, हम Pgpool-II पर चर्चा करेंगे, जो शायद मुख्य है PgBouncer के प्रतियोगी। इस चार-भाग श्रृंखला में हमारी चौथी पोस्ट के लिए बने रहें जहां हम PgBouncer बनाम Pgpool-II की तुलना करते हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DigitalOcean पर PostgreSQL को कैसे परिनियोजित करें

  2. pg_stat_activity का उपयोग कैसे करें?

  3. पूर्ण पाठ खोज के साथ उपसर्ग में समाप्त होने वाले वाक्यांश का मिलान करें

  4. पोस्टग्रेज JSON डेटा प्रकार रेल क्वेरी

  5. PostgreSQL में कर्सर आधारित रिकॉर्ड