प्रॉम्प्ट और संदर्भ
एक बड़े PostgreSQL क्लस्टर को फ़ुल-बैकअप विंडो को छोटा करने और स्टोरेज लागत को कम करने की आवश्यकता है। pg_basebackup का उपयोग करके एक इंक्रीमेंटल बेस-बैकअप चेन डिज़ाइन करें, जिसमें WAL डिपेंडेंसीज़, बैकअप मैनिफ़ेस्ट्स, pg_combinebackup, सत्यापन, रिटेंशन और रिकवरी ड्रिल्स की व्याख्या की गई हो।
PostgreSQL यह स्पष्ट करता है कि इंक्रीमेंटल बैकअप को सीधे रीस्टोर नहीं किया जा सकता: इसे सिंथेटिक फ़ुल बैकअप बनाने के लिए इसके आश्रित (dependent) पिछले बैकअप के साथ कंबाइन किया जाना चाहिए। टूल संबंधों की जाँच करता है लेकिन यह आपके लिए डिपेंडेंसीज़ को ट्रैक नहीं करता है और न ही यह साबित करता है कि प्रत्येक बैकअप सुरक्षित और अक्षुण्ण (intact) है। इंटरव्यू केवल एक बैकअप कमांड याद रखने का नहीं, बल्कि रिकवरेबिलिटी के प्रमाण का परीक्षण करता है।
इंटरव्यूअर क्या टेस्ट कर रहा है
फ़ुल, इंक्रीमेंटल, WAL और मैनिफ़ेस्ट की भूमिकाओं; संदर्भ बैकअप (reference backups), डिपेंडेंसी चेन्स और सिंथेटिक फ़ुल्स; pg_verifybackup, चेकसम, इम्यूटेबल ऑब्जेक्ट वर्ज़न्स और इंटीग्रिटी चेक्स; चेन टूटने, स्टैंडबाय बैकअप, रेप्लिकेशन-स्लॉट/WAL रिटेंशन, एन्क्रिप्शन और रिकवरी उद्देश्यों की व्याख्या। बैकअप-सक्सेस डैशबोर्ड के बजाय ड्रिल्स के माध्यम से RPO और RTO को सिद्ध करना।
पहले स्पष्ट करने योग्य प्रश्न
रिकवरी उद्देश्य
RPO, RTO, टारगेट टाइम पॉइंट्स, क्रॉस-रीजन रिकवरी, अनुमत PostgreSQL वर्ज़न परिवर्तन, और क्या क्लस्टर में कई टेबलस्पेसेस हैं, इसकी पुष्टि करें।
बैकअप वर्कलोड
फ़ुल बैकअप का आकार, दैनिक परिवर्तन की मात्रा, WAL दर, बैकअप विंडो, नेटवर्क बैंडविड्थ, ऑब्जेक्ट-स्टोर लाइफ़साइकल और कॉनकरेंसी सीमाओं की पुष्टि करें।
निरंतरता और अनुपालन (Consistency and compliance)
बैकअप एन्क्रिप्शन और की-रोटेशन, इम्यूटेबल रिटेंशन, डिलीशन अनुमतियाँ, मैनिफ़ेस्ट चेकसम एल्गोरिदम, ऑडिट रिकॉर्ड्स और ड्रिल फ़्रीक्वेंसी की पुष्टि करें।
30-सेकंड का उत्तर
"मैं एक सत्यापन योग्य फ़ुल बैकअप से शुरुआत करता हूँ, एक संदर्भ मैनिफ़ेस्ट से इंक्रीमेंटल जनरेट करता हूँ, और प्रत्येक मैनिफ़ेस्ट, डिपेंडेंसी रिकॉर्ड और निरंतर WAL सेगमेंट को बनाए रखता हूँ। एक इंक्रीमेंटल बैकअप सीधे रीस्टोर करने योग्य नहीं होता है: मैं चेन को pgcombinebackup के साथ क्रम में कंबाइन करता हूँ, फिर आवश्यक WAL लागू करता हूँ। ऑब्जेक्ट स्टोरेज इम्यूटेबल वर्ज़न्स और एन्क्रिप्शन का उपयोग करता है, जबकि pgverifybackup और सैंपल रीस्टोर सामग्री को मान्य करते हैं। यदि कोई डिपेंडेंसी अनुपलब्ध है, तो ऑटोमेशन उसके पूर्ववर्तियों (predecessors) के विलोपन को ब्लॉक कर देता है। बैकअप-सक्सेस दरों पर निर्भर रहने के बजाय वास्तविक आकार और विफलता ड्रिल्स RPO और RTO को साबित करते हैं।"
चरण-दर-चरण विस्तृत उत्तर
चरण 1: बैकअप चेन को मॉडल करना
फ़ुल बैकअप, प्रत्येक इंक्रीमेंटल का संदर्भ बैकअप, LSN रेंज, मैनिफ़ेस्ट, की (key) वर्ज़न और स्टोरेज URI रिकॉर्ड करें। प्रत्येक नोड अपनी पूर्व-आवश्यकताओं (prerequisites) को इंगित करता है; रिटेंशन सबसे पहले सबसे पुराने अभी भी पुनर्प्राप्त करने योग्य (recoverable) समय बिंदु की गणना करता है।
चरण 2: इंक्रीमेंटल्स जनरेट करना
pg_basebackup संदर्भ मैनिफ़ेस्ट का उपयोग करके एक इंक्रीमेंटल का अनुरोध कर सकता है; इंक्रीमेंटल में उस संदर्भ के बाद बदले गए ब्लॉक्स शामिल होते हैं। बैकअप अभी भी किसी एकल डेटाबेस ऑब्जेक्ट के बजाय संपूर्ण क्लस्टर को कवर करता है। रेप्लिकेशन कनेक्शन को REPLICATION विशेषाधिकार या सुपरयूज़र अधिकार और पर्याप्त walsenders की आवश्यकता होती है।
full_0 = pg_basebackup(full)
inc_1 = pg_basebackup(incremental, reference=full_0.manifest)
inc_2 = pg_basebackup(incremental, reference=inc_1.manifest)चरण 3: निरंतर WAL बनाए रखना
बेस बैकअप के दौरान उत्पन्न WAL उपलब्ध रहना चाहिए। stream विधि समानांतर में दूसरा रेप्लिकेशन कनेक्शन खोलती है; fetch विधि को ट्रांसफर पूरा होने तक आवश्यक WAL बनाए रखने के लिए wal_keep_size या आर्काइविंग की आवश्यकता होती है। रेप्लिकेशन स्लॉट समय से पहले हटाए जाने के जोखिम को कम करते हैं लेकिन डिस्क उपयोग बढ़ा सकते हैं, इसलिए सबसे पुराने आवश्यक LSN की निगरानी करें।
चरण 4: मैनिफ़ेस्ट्स और संबंधों को सत्यापित करना
pg_combinebackup इनपुट बैकअप के बीच कानूनी संबंधों की पुष्टि करता है लेकिन प्रत्येक बैकअप की अखंडता (integrity) की नहीं। प्रत्येक नोड के लिए pg_verifybackup और मैनिफ़ेस्ट चेकसम चलाएँ। किसी नोड को उसके ऑब्जेक्ट अपलोड और सत्यापन पूरा होने के बाद ही कैटलॉग में पंजीकृत करें।
चरण 5: रीस्टोर इनपुट तैयार करना
लक्षित समय बिंदु के लिए, एक सिंथेटिक फ़ुल तैयार करने के लिए फ़ुल बैकअप से लेकर लक्षित इंक्रीमेंटल तक क्रम में pg_combinebackup को इनवोक करें। यह बाद के कंबाइन ऑपरेशन के लिए सीड के रूप में कार्य कर सकता है लेकिन WAL को प्रतिस्थापित नहीं करता है। बैकअप-एंड LSN से लक्षित समय तक के WAL को रिकवरी डायरेक्टरी में रखें और रिकवरी टारगेट को कॉन्फ़िगर करें।
चरण 6: ब्रेक और रिटेंशन को संभालना
शेड्यूलर एक डिपेंडेंसी ग्राफ़ और सबसे पुराना रिकवरेबल समय बनाए रखता है। यदि कोई पूर्व-आवश्यकता अनुपलब्ध है, चेकसम सत्यापन विफल हो जाता है, या अपनी की (key) खो देता है, तो सभी वंशजों (descendants) को अनरिकवरेबल चिह्नित करें और पूर्व-आवश्यकता के स्वचालित विलोपन को ब्लॉक करें। चेन की लंबाई और RTO को सीमित करने के लिए समय-समय पर एक नया फ़ुल या सिंथेटिक फ़ुल बनाएँ।
चरण 7: RPO और RTO ड्रिल्स
आइसोलेशन में रैंडम समय बिंदुओं को रीस्टोर करें और सिस्टम कैटलॉग, टेबलस्पेसेस, WAL, एक्सटेंशन और एप्लिकेशन निरंतरता की जाँच करें। डाउनलोड किए गए बाइट्स, कंबाइन अवधि, WAL रीप्ले दर, पूर्णता समय और चेकसम रिकॉर्ड करें। ऑब्जेक्ट-स्टोर 404s, खराब मैनिफ़ेस्ट्स, की रिवोकेशन और प्राइमरी विफलता को इंजेक्ट करें।
मॉडल उत्तर
मैं बैकअप को एक डिपेंडेंसी ग्राफ़ के रूप में मानता हूँ: एक फ़ुल बैकअप रूट होता है, प्रत्येक इंक्रीमेंटल एक संदर्भ की ओर इंगित करता है, और WAL समय बिंदु को भरता है। प्रत्येक नोड एक मैनिफ़ेस्ट, चेकसम, LSN, की वर्ज़न और इम्यूटेबल ऑब्जेक्ट URI स्टोर करता है। रिकवरी pgcombinebackup के साथ चेन को क्रम में कंबाइन करती है, फिर निरंतर WAL को रीप्ले करती है; इसका संबंध परीक्षण pgverifybackup सामग्री जाँच को प्रतिस्थापित नहीं करता है। रिटेंशन ग्राफ़ का अनुसरण करता है, और मापे गए RPO/RTO गेट्स जारी होने से पहले ड्रिल्स टूटी हुई चेन्स, अनुपलब्ध WAL, की निरसन (revocation) और कई टेबलस्पेसेस को कवर करते हैं।
सामान्य गलतियाँ
- गलती: इंक्रीमेंटल को बूट करने योग्य (bootable) डायरेक्टरी के रूप में मानना। → यह क्यों विफल होता है: यह एक संदर्भ बैकअप पर निर्भर करता है। → समाधान: इसे सिंथेटिक फ़ुल में कंबाइन करें, फिर WAL लागू करें।
- गलती: केवल सफल pg_combinebackup रन पर भरोसा करना। → यह क्यों विफल होता है: यह साबित नहीं करता कि प्रत्येक इनपुट सुरक्षित और अक्षुण्ण है। → समाधान: प्रत्येक मैनिफ़ेस्ट/चेकसम को सत्यापित करें और सैंपल रीस्टोर करें।
- गलती: केवल आयु (age) के आधार पर फ़ुल बैकअप को बनाए रखना या हटाना। → यह क्यों विफल होता है: बाद के इंक्रीमेंटल्स अभी भी उन पर निर्भर हो सकते हैं। → समाधान: डिपेंडेंसी ग्राफ़ और सबसे पुराने रिकवरेबल समय का उपयोग करें।
- गलती: निरंतर WAL के बिना बैकअप सफलता की रिपोर्ट करना। → यह क्यों विफल होता है: लक्षित समय बिंदु को रीप्ले नहीं किया जा सकता है। → समाधान: आवश्यक LSN, आर्काइव लैग और स्लॉट उपयोग की निगरानी करें।
फ़ॉलो-अप प्रश्न और उत्तर
फ़ुल, सिंथेटिक फ़ुल और इंक्रीमेंटल में क्या अंतर है?
फ़ुल क्लस्टर फ़ाइलों की एक स्वतंत्र प्रतिलिपि है। इंक्रीमेंटल में किसी संदर्भ के बाद बदले गए ब्लॉक्स शामिल होते हैं। सिंथेटिक फ़ुल को चेन से पुनर्निर्मित किया जाता है और यह रीस्टोर इनपुट हो सकता है, लेकिन लक्षित समय के लिए बैकअप एंडपॉइंट के बाद भी WAL की आवश्यकता होती है।
इंक्रीमेंटल चेन को हमेशा के लिए विस्तारित क्यों नहीं किया जाता?
लंबी चेन्स डाउनलोड, कंबाइन, सत्यापन और विफलता की लागत बढ़ाती हैं, जिससे RTO बढ़ जाता है। परिवर्तन दर, स्टोरेज लागत और ड्रिल डेटा का उपयोग करके एक नया फ़ुल या सिंथेटिक फ़ुल डालें।
यदि कोई मैनिफ़ेस्ट गायब हो तो आप क्या करेंगे?
ऑटोमेशन के लिए नोड को अनुपलब्ध के रूप में चिह्नित करें; फ़ाइल नामों से कभी भी डिपेंडेंसीज़ का अनुमान न लगाएँ। यदि कोई विश्वसनीय प्रतिलिपि मैनिफ़ेस्ट को पुनर्स्थापित करती है, तो इसे फिर से पंजीकृत करने से पहले फ़ाइल चेकसम, LSNs और चेन संबंधों को सत्यापित करें।
आप कैसे साबित करते हैं कि एन्क्रिप्शन रिकवरी को ब्लॉक नहीं करेगा?
रोटेशन, निरसन (revocation), अनुमतियाँ और क्रॉस-रीजन KMS एक्सेस का परीक्षण करते हुए, वर्तमान और ऐतिहासिक कीज़ (keys) के साथ आइसोलेशन में नियमित रूप से सैंपल्स रीस्टोर करें। स्पष्ट रूप से अलर्ट करें और की अनुपलब्ध होने पर रिकवरेबिलिटी दावे से समय बिंदु को हटा दें।