PostgreSQL एक अद्भुत परियोजना है और यह एक अद्भुत दर से विकसित होती है। हम ब्लॉग पोस्ट की एक श्रृंखला के साथ PostgreSQL में इसके सभी संस्करणों में दोष सहिष्णुता क्षमताओं के विकास पर ध्यान केंद्रित करेंगे। यह श्रृंखला की दूसरी पोस्ट है और हम प्रतिकृति और पोस्टग्रेएसक्यूएल की गलती सहनशीलता और निर्भरता पर इसके महत्व के बारे में बात करेंगे।
यदि आप शुरुआत से विकास की प्रगति देखना चाहते हैं, तो कृपया श्रृंखला की पहली ब्लॉग पोस्ट देखें:PostgreSQL में दोष सहिष्णुता का विकास
PostgreSQL प्रतिकृति
डेटाबेस प्रतिकृति वह शब्द है जिसका उपयोग हम उस तकनीक का वर्णन करने के लिए करते हैं जिसका उपयोग प्रतिलिपि . बनाए रखने के लिए किया जाता है रिमोट . पर डेटा के एक सेट का प्रणाली। चल रहे सिस्टम की विश्वसनीय प्रतिलिपि रखना अतिरेक की सबसे बड़ी चिंताओं में से एक है और हम सभी को अपने डेटा की रखरखाव योग्य, उपयोग में आसान और स्थिर प्रतियां पसंद हैं।
आइए बुनियादी वास्तुकला को देखें। आमतौर पर, अलग-अलग डेटाबेस सर्वरों को नोड्स . के रूप में संदर्भित किया जाता है . प्रतिकृति में शामिल डेटाबेस सर्वर के पूरे समूह को क्लस्टर . के रूप में जाना जाता है . एक डेटाबेस सर्वर जो उपयोगकर्ता को परिवर्तन करने की अनुमति देता है उसे मास्टर . के रूप में जाना जाता है या प्राथमिक , या परिवर्तनों के स्रोत के रूप में वर्णित किया जा सकता है। एक डेटाबेस सर्वर जो केवल केवल पढ़ने के लिए पहुंच की अनुमति देता है जिसे हॉट स्टैंडबाय . के रूप में जाना जाता है . (हॉट स्टैंडबाय शब्द को स्टैंडबाय मोड शीर्षक के तहत विस्तृत रूप से समझाया गया है। )
प्रतिकृति का मुख्य पहलू यह है कि डेटा परिवर्तन मास्टर पर कैप्चर किए जाते हैं, और फिर अन्य नोड्स में स्थानांतरित किए जाते हैं। कुछ मामलों में, एक नोड अन्य नोड्स को डेटा परिवर्तन भेज सकता है, जो एक प्रक्रिया है जिसे कैस्केडिंग के रूप में जाना जाता है या रिले . इस प्रकार, मास्टर एक भेजने वाला नोड है लेकिन सभी भेजने वाले नोड्स को मास्टर होने की आवश्यकता नहीं है। प्रतिकृति को अक्सर इस आधार पर वर्गीकृत किया जाता है कि क्या एक से अधिक मास्टर नोड की अनुमति है, इस स्थिति में इसे मल्टीमास्टर प्रतिकृति के रूप में जाना जाएगा। ।
आइए देखें कि PostgreSQL समय के साथ प्रतिकृति को कैसे संभाल रहा है और प्रतिकृति की शर्तों के अनुसार दोष सहिष्णुता के लिए अत्याधुनिक क्या है।
PostgreSQL प्रतिकृति इतिहास
ऐतिहासिक रूप से (वर्ष 2000-2005 के आसपास), पोस्टग्रेज केवल सिंगल नोड फॉल्ट टॉलरेंस/रिकवरी में केंद्रित है जो ज्यादातर वाल, ट्रांजेक्शन लॉग द्वारा हासिल किया जाता है। दोष सहिष्णुता आंशिक रूप से MVCC (बहु-संस्करण समवर्ती प्रणाली) द्वारा नियंत्रित की जाती है, लेकिन यह मुख्य रूप से एक अनुकूलन है।
पोस्टग्रेएसक्यूएल में राइट-फॉरवर्ड लॉगिंग सबसे बड़ी गलती सहनशीलता विधि थी और अभी भी है। मूल रूप से, केवल WAL फ़ाइलें हैं जहाँ आप सब कुछ लिखते हैं और उन्हें फिर से चलाकर विफलता के मामले में ठीक हो सकते हैं। यह सिंगल नोड आर्किटेक्चर के लिए पर्याप्त था और कई नोड्स के साथ फॉल्ट टॉलरेंस प्राप्त करने के लिए प्रतिकृति को सबसे अच्छा समाधान माना जाता है।
Postgres समुदाय लंबे समय से यह मानता था कि प्रतिकृति एक ऐसी चीज है जो Postgres को प्रदान नहीं करनी चाहिए और बाहरी उपकरणों द्वारा नियंत्रित की जानी चाहिए, यही कारण है कि Slony और Londiste जैसे उपकरण मौजूद हो गए। (हम श्रृंखला के अगले ब्लॉग पोस्ट में ट्रिगर-आधारित प्रतिकृति समाधान शामिल करेंगे।)
अंततः यह स्पष्ट हो गया कि, एक सर्वर सहनशीलता पर्याप्त नहीं है और अधिक लोगों ने हार्डवेयर की उचित गलती सहनशीलता और स्विचिंग के उचित तरीके की मांग की, अंतर्निहित पोस्टग्रेस में कुछ। यह तब है जब भौतिक (तब भौतिक स्ट्रीमिंग) प्रतिकृति जीवन में आई।
हम बाद में पोस्ट में सभी प्रतिकृति विधियों के माध्यम से जाएंगे, लेकिन आइए प्रमुख रिलीज द्वारा PostgreSQL प्रतिकृति इतिहास की कालानुक्रमिक घटनाओं को देखें:
- PostgreSQL 7.x (~2000)
- प्रतिकृति कोर पोस्टग्रेज का हिस्सा नहीं होना चाहिए
- लोंडिस्ट - स्लोनी (ट्रिगर आधारित तार्किक प्रतिकृति)
- PostgreSQL 8.0 (2005)
- प्वाइंट-इन-टाइम रिकवरी (WAL)
- PostgreSQL 9.0 (2010)
- स्ट्रीमिंग प्रतिकृति (भौतिक)
- PostgreSQL 9.4 (2014)
- लॉजिकल डिकोडिंग (चेंजसेट एक्सट्रैक्शन)
भौतिक प्रतिकृति
पोस्टग्रेएसक्यूएल ने अधिकांश रिलेशनल डेटाबेस के साथ मूल प्रतिकृति की आवश्यकता को हल किया; वाल लिया और इसे नेटवर्क पर भेजना संभव बना दिया। फिर इन WAL फ़ाइलों को एक अलग पोस्टग्रेज़ इंस्टेंस में लागू किया जाता है जो केवल-पढ़ने के लिए चल रहा है।
केवल-पढ़ने के लिए स्टैंडबाय इंस्टेंस केवल परिवर्तन (WAL द्वारा) और केवल लिखने के संचालन को लागू करता है उसी वाल लॉग से फिर से आओ। यह मूल रूप से प्रतिकृति स्ट्रीमिंग . है तंत्र काम करता है। शुरुआत में, प्रतिकृति मूल रूप से सभी फाइलों को भेज रही थी –लॉग शिपिंग- , लेकिन बाद में इसे स्ट्रीमिंग के रूप में विकसित किया गया।
लॉग शिपिंग में, हम archive_command . के माध्यम से पूरी फाइलें भेज रहे थे . वहां तर्क बहुत आसान है:आप बस भेजें संग्रह और लॉग इसे कहीं पर - जैसे संपूर्ण 16MB WAL फ़ाइल - और फिर आप आवेदन करें इसे कहीं पर, और फिर आप लाने अगला वाला और लागू करें वह एक और यह वैसे ही चला जाता है। बाद में, यह PostgreSQL संस्करण 9.0 में libpq प्रोटोकॉल का उपयोग करके नेटवर्क पर स्ट्रीमिंग बन गया।
मौजूदा प्रतिकृति को अधिक उचित रूप से भौतिक स्ट्रीमिंग प्रतिकृति, . के रूप में जाना जाता है चूंकि हम एक नोड से दूसरे नोड में भौतिक परिवर्तनों की एक श्रृंखला स्ट्रीम कर रहे हैं। इसका मतलब है कि जब हम सम्मिलित करें तालिका में एक पंक्ति हम उत्पन्न करते हैं रिकॉर्ड बदलें सम्मिलित करें . के लिए साथ ही सभी अनुक्रमणिका प्रविष्टियां ।
जब हम VACUUM
एक तालिका जिसे हम परिवर्तन रिकॉर्ड भी बनाते हैं।
साथ ही, भौतिक स्ट्रीमिंग प्रतिकृति बाइट/ब्लॉक स्तर . पर सभी परिवर्तनों को रिकॉर्ड करती है , सब कुछ फिर से चलाने के अलावा कुछ भी करना बहुत कठिन बना देता है
Fig.1 भौतिक प्रतिकृति
Fig.1 दिखाता है कि भौतिक प्रतिकृति केवल दो नोड्स के साथ कैसे काम करती है। क्लाइंट मास्टर नोड पर क्वेरी निष्पादित करता है, परिवर्तन लेन-देन लॉग (WAL) में लिखे जाते हैं और स्टैंडबाय नोड पर नेटवर्क पर WAL पर कॉपी किए जाते हैं। स्टैंडबाय नोड पर पुनर्प्राप्ति प्रक्रिया तब WAL से परिवर्तनों को पढ़ती है और उन्हें क्रैश पुनर्प्राप्ति के दौरान डेटा फ़ाइलों पर लागू करती है। अगर स्टैंडबाय हॉट स्टैंडबाय में है मोड, क्लाइंट ऐसा होने पर नोड पर केवल-पढ़ने के लिए क्वेरी जारी कर सकते हैं।
नोट: भौतिक प्रतिकृति केवल मास्टर से स्टैंडबाय नोड तक नेटवर्क पर WAL फ़ाइलों को भेजने का संदर्भ देती है। फ़ाइलें scp, rsync, ftp जैसे विभिन्न प्रोटोकॉल द्वारा भेजी जा सकती हैं… अंतर भौतिक प्रतिकृति . के बीच और भौतिक स्ट्रीमिंग प्रतिकृति क्या स्ट्रीमिंग प्रतिकृति WAL फ़ाइलें भेजने के लिए एक आंतरिक प्रोटोकॉल का उपयोग करती है (प्रेषक और रिसीवर प्रक्रियाएं )
स्टैंडबाय मोड
एकाधिक नोड उच्च उपलब्धता प्रदान करते हैं। इस कारण से आधुनिक आर्किटेक्चर में आमतौर पर स्टैंडबाय नोड्स होते हैं। स्टैंडबाय नोड्स (गर्म और गर्म स्टैंडबाय) के लिए अलग-अलग तरीके हैं। नीचे दी गई सूची अलग-अलग स्टैंडबाय मोड के बीच बुनियादी अंतर बताती है, और मल्टी-मास्टर आर्किटेक्चर के मामले को भी दिखाती है।
गर्म स्टैंडबाय
तुरंत सक्रिय किया जा सकता है, लेकिन सक्रिय होने तक उपयोगी कार्य नहीं कर सकता। अगर हम लगातार WAL फाइलों की श्रृंखला को किसी अन्य मशीन को फीड करते हैं जो एक ही बेस बैकअप फाइल के साथ लोड की गई है, तो हमारे पास एक गर्म स्टैंडबाय सिस्टम है:किसी भी बिंदु पर हम दूसरी मशीन ला सकते हैं और इसकी लगभग वर्तमान प्रति होगी डेटाबेस। वार्म स्टैंडबाय केवल-पढ़ने के लिए प्रश्नों की अनुमति नहीं देता है, चित्र 2 केवल इस तथ्य का प्रतिनिधित्व करता है।
Fig.2 वार्म स्टैंडबाय
एक गर्म स्टैंडबाय का पुनर्प्राप्ति प्रदर्शन पर्याप्त रूप से अच्छा है कि स्टैंडबाय आमतौर पर सक्रिय होने के बाद पूर्ण उपलब्धता से केवल कुछ क्षण दूर होगा। परिणामस्वरूप, इसे वार्म स्टैंडबाय कॉन्फ़िगरेशन कहा जाता है जो उच्च उपलब्धता प्रदान करता है।
हॉट स्टैंडबाय
हॉट स्टैंडबाय शब्द का उपयोग सर्वर से कनेक्ट होने और केवल-पढ़ने के लिए क्वेरी चलाने की क्षमता का वर्णन करने के लिए किया जाता है, जबकि सर्वर संग्रह पुनर्प्राप्ति या स्टैंडबाय मोड में होता है। यह प्रतिकृति उद्देश्यों के लिए और बैकअप को वांछित स्थिति में बड़ी सटीकता के साथ पुनर्स्थापित करने के लिए दोनों के लिए उपयोगी है।
Fig.3 हॉट स्टैंडबाय
हॉट स्टैंडबाय शब्द सर्वर की क्षमता को रिकवरी से सामान्य ऑपरेशन तक ले जाने की क्षमता को भी संदर्भित करता है, जबकि उपयोगकर्ता क्वेरी चलाना जारी रखते हैं और/या अपने कनेक्शन को खुला रखते हैं। Fig.3 दिखाता है कि स्टैंडबाय मोड केवल-पढ़ने के लिए क्वेरी की अनुमति देता है।
मल्टी-मास्टर
सभी नोड्स पढ़ने/लिखने का काम कर सकते हैं। (हम श्रृंखला के अगले ब्लॉग पोस्ट में मल्टी-मास्टर आर्किटेक्चर को कवर करेंगे।)
वाल लेवल पैरामीटर
wal_level
सेट अप करने के बीच एक संबंध है postgresql.conf फ़ाइल में पैरामीटर और यह सेटिंग किसके लिए उपयुक्त है। मैंने PostgreSQL संस्करण 9.6 के लिए संबंध दिखाने के लिए एक तालिका बनाई।
विफलता और स्विचओवर
एकल-मास्टर प्रतिकृति में, यदि मास्टर की मृत्यु हो जाती है, तो स्टैंडबाय में से एक को उसका स्थान लेना चाहिए (पदोन्नति ) अन्यथा, हम नए लिखित लेनदेन स्वीकार नहीं कर पाएंगे। इस प्रकार, पद पदनाम, मास्टर और स्टैंडबाय, केवल ऐसी भूमिकाएँ हैं जो कोई भी नोड किसी बिंदु पर ले सकता है। मास्टर भूमिका को दूसरे नोड में ले जाने के लिए, हम स्विचओवर . नामक एक प्रक्रिया करते हैं ।
यदि मास्टर की मृत्यु हो जाती है और वह ठीक नहीं होता है, तो अधिक गंभीर भूमिका परिवर्तन को विफलता के रूप में जाना जाता है। . कई मायनों में, ये समान हो सकते हैं, लेकिन यह प्रत्येक घटना के लिए अलग-अलग शब्दों का उपयोग करने में मदद करता है। (फेलओवर और स्विचओवर की शर्तों को जानने से हमें अगले ब्लॉग पोस्ट में समयरेखा के मुद्दों को समझने में मदद मिलेगी।)
निष्कर्ष
इस ब्लॉग पोस्ट में हमने PostgreSQL प्रतिकृति और दोष सहिष्णुता और निर्भरता प्रदान करने के लिए इसके महत्व पर चर्चा की। हमने भौतिक स्ट्रीमिंग प्रतिकृति को कवर किया और PostgreSQL के लिए स्टैंडबाय मोड के बारे में बात की। हमने विफलता और स्विचओवर का उल्लेख किया। हम अगले ब्लॉग पोस्ट में PostgreSQL समयसीमा के साथ जारी रखेंगे।
संदर्भ
PostgreSQL दस्तावेज़ीकरण
PostgreSQL 5432 में तार्किक प्रतिकृति… पेट्र जेलिनेक द्वारा मीटयू प्रस्तुति
PostgreSQL 9 व्यवस्थापन कुकबुक - दूसरा संस्करण