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

PostgreSQL प्रतिकृति सर्वोत्तम अभ्यास - भाग 1

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

PostgreSQL में प्रतिकृति विधियाँ

PostgreSQL में डेटा को दोहराने के लिए अलग-अलग तरीके हैं, लेकिन यहां हम दो मुख्य तरीकों पर ध्यान केंद्रित करेंगे:स्ट्रीमिंग प्रतिकृति और तार्किक प्रतिकृति।

स्ट्रीमिंग प्रतिकृति

पोस्टग्रेएसक्यूएल स्ट्रीमिंग प्रतिकृति, सबसे आम पोस्टग्रेएसक्यूएल प्रतिकृति, एक भौतिक प्रतिकृति है जो बाइट-बाय-बाइट स्तर पर परिवर्तनों को दोहराती है, किसी अन्य सर्वर में डेटाबेस की एक समान प्रतिलिपि बनाती है। यह लॉग शिपिंग विधि पर आधारित है। WAL रिकॉर्ड्स को लागू करने के लिए सीधे एक डेटाबेस सर्वर से दूसरे में ले जाया जाता है। हम कह सकते हैं कि यह एक तरह का निरंतर PITR है।

यह WAL स्थानांतरण दो अलग-अलग तरीकों से किया जाता है, WAL रिकॉर्ड को एक समय में एक फ़ाइल (WAL सेगमेंट) को स्थानांतरित करके (फ़ाइल-आधारित लॉग शिपिंग) और WAL रिकॉर्ड्स को स्थानांतरित करके (एक WAL फ़ाइल से बना होता है) WAL रिकॉर्ड) पर (रिकॉर्ड आधारित लॉग शिपिंग), एक प्राथमिक सर्वर और एक या अधिक स्टैंडबाय सर्वरों के बीच, WAL फ़ाइल के भरने की प्रतीक्षा किए बिना।

व्यवहार में, स्टैंडबाय सर्वर पर चलने वाली WAL रिसीवर नामक एक प्रक्रिया, TCP/IP कनेक्शन का उपयोग करके प्राथमिक सर्वर से कनेक्ट होगी। प्राथमिक सर्वर में, एक अन्य प्रक्रिया मौजूद होती है, जिसका नाम WAL प्रेषक होता है, और WAL रजिस्ट्रियों को स्टैंडबाय सर्वर पर भेजने का प्रभारी होता है जैसे वे होते हैं।

एक बुनियादी स्ट्रीमिंग प्रतिकृति को निम्न के रूप में दर्शाया जा सकता है:

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

तार्किक प्रतिकृति

PostgreSQL तार्किक प्रतिकृति उनकी प्रतिकृति पहचान (आमतौर पर एक प्राथमिक कुंजी) के आधार पर डेटा ऑब्जेक्ट और उनके परिवर्तनों को दोहराने की एक विधि है। यह एक प्रकाशन और सदस्यता मोड पर आधारित है, जहां एक या अधिक ग्राहक प्रकाशक नोड पर एक या अधिक प्रकाशनों की सदस्यता लेते हैं।

एक प्रकाशन तालिका या तालिकाओं के समूह से उत्पन्न परिवर्तनों का एक समूह है। जिस नोड में प्रकाशन को परिभाषित किया जाता है उसे प्रकाशक कहा जाता है। सदस्यता तार्किक प्रतिकृति का डाउनस्ट्रीम पक्ष है। जिस नोड में सदस्यता परिभाषित की जाती है उसे ग्राहक के रूप में संदर्भित किया जाता है, और यह किसी अन्य डेटाबेस और प्रकाशनों के सेट (एक या अधिक) से कनेक्शन को परिभाषित करता है, जिसमें वह सदस्यता लेना चाहता है। सदस्य उन प्रकाशनों से डेटा खींचते हैं जिनकी वे सदस्यता लेते हैं।

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

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

PostgreSQL में प्रतिकृति मोड

PostgreSQL में प्रतिकृति सिंक्रोनस या एसिंक्रोनस हो सकती है।

अतुल्यकालिक प्रतिकृति

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

तुल्यकालिक प्रतिकृति

एक लिखित लेन-देन की प्रत्येक प्रतिबद्धता तब तक प्रतीक्षा करेगी जब तक यह पुष्टि न हो जाए कि प्रतिबद्धता प्राथमिक और स्टैंडबाय सर्वर दोनों की डिस्क पर राइट-फॉरवर्ड लॉग पर लिखी गई है। यह विधि डेटा हानि की संभावना को कम करती है। डेटा हानि होने के लिए आपको एक ही समय में विफल होने के लिए प्राथमिक और स्टैंडबाय दोनों की आवश्यकता होगी।

इस पद्धति का नुकसान सभी तुल्यकालिक विधियों के लिए समान है क्योंकि इस पद्धति के साथ प्रत्येक लेखन लेनदेन के लिए प्रतिक्रिया समय बढ़ जाता है। यह तब तक प्रतीक्षा करने की आवश्यकता के कारण है जब तक कि लेन-देन किए जाने की सभी पुष्टि नहीं हो जाती। सौभाग्य से, केवल-पढ़ने के लिए लेनदेन इससे प्रभावित नहीं होंगे लेकिन; केवल लेन-देन लिखें।

PostgreSQL प्रतिकृति के लिए उच्च उपलब्धता

कई प्रणालियों के लिए उच्च उपलब्धता एक आवश्यकता है, चाहे हम किसी भी तकनीक का उपयोग करें, और विभिन्न उपकरणों का उपयोग करके इसे प्राप्त करने के लिए अलग-अलग दृष्टिकोण हैं।

लोड संतुलन

लोड बैलेंसर ऐसे टूल हैं जिनका उपयोग आपके एप्लिकेशन से ट्रैफ़िक को प्रबंधित करने के लिए किया जा सकता है ताकि आपके डेटाबेस आर्किटेक्चर का अधिकतम लाभ उठाया जा सके। यह न केवल हमारे डेटाबेस के भार को संतुलित करने के लिए उपयोगी है, यह अनुप्रयोगों को उपलब्ध/स्वस्थ नोड्स पर पुनर्निर्देशित करने में भी मदद करता है और यहां तक ​​कि विभिन्न भूमिकाओं वाले पोर्ट भी निर्दिष्ट करता है।

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

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

PostgreSQL प्रतिकृति पर प्रदर्शन में सुधार

किसी भी प्रणाली में प्रदर्शन हमेशा महत्वपूर्ण होता है। सर्वोत्तम प्रतिक्रिया समय सुनिश्चित करने के लिए आपको उपलब्ध संसाधनों का अच्छा उपयोग करने की आवश्यकता होगी और ऐसा करने के विभिन्न तरीके हैं। डेटाबेस का प्रत्येक कनेक्शन संसाधनों की खपत करता है, इसलिए आपके PostgreSQL डेटाबेस पर प्रदर्शन को बेहतर बनाने का एक तरीका यह है कि आपके एप्लिकेशन और डेटाबेस सर्वर के बीच एक अच्छा कनेक्शन पूलर हो।

कनेक्शन पूलर

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

PgBouncer PostgreSQL सर्वर के रूप में कार्य करता है, इसलिए आपको बस अपने डेटाबेस तक पहुंचने की आवश्यकता है PgBouncer जानकारी (IP पता/होस्टनाम और पोर्ट) का उपयोग करके, और PgBouncer PostgreSQL सर्वर से एक कनेक्शन बनाएगा, या यह मौजूद होने पर इसका पुन:उपयोग करेगा।

जब PgBouncer एक कनेक्शन प्राप्त करता है, तो यह प्रमाणीकरण करता है, जो कॉन्फ़िगरेशन फ़ाइल में निर्दिष्ट विधि पर निर्भर करता है। PgBouncer उन सभी प्रमाणीकरण तंत्रों का समर्थन करता है जो PostgreSQL सर्वर समर्थन करता है। इसके बाद, PgBouncer एक ही उपयोगकर्ता नाम + डेटाबेस संयोजन के साथ कैश्ड कनेक्शन की जांच करता है। यदि कोई कैश्ड कनेक्शन पाया जाता है, तो यह क्लाइंट को कनेक्शन लौटाता है, यदि नहीं, तो यह एक नया कनेक्शन बनाता है। PgBouncer कॉन्फ़िगरेशन और सक्रिय कनेक्शनों की संख्या के आधार पर, यह संभव हो सकता है कि नया कनेक्शन तब तक कतारबद्ध हो जब तक कि इसे बनाया नहीं जा सकता, या यहां तक ​​कि निरस्त नहीं किया जा सकता।

इन सभी उल्लिखित अवधारणाओं के साथ, इस ब्लॉग के दूसरे भाग में, हम देखेंगे कि आप PostgreSQL में एक अच्छा प्रतिकृति वातावरण बनाने के लिए उन्हें कैसे संयोजित कर सकते हैं।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. रूबी में डेटटाइम का मिलीसेकंड रिज़ॉल्यूशन

  2. हॉट स्टैंडबाय डिप्लॉयमेंट में ट्रेड-ऑफ

  3. Postgres . का उपयोग करके एक बार में 3 तालिकाओं में डेटा डालें

  4. एसक्यूएल कॉलम के रूप में पंक्तियों को स्थानांतरित करें

  5. Oracle बल्क कलेक्ट के बराबर PostgreSQL