pgbackrest/pgbackrest
(github.com/pgbackrest)- PostgreSQL के लिए एक backup·restore tool के रूप में डिज़ाइन किया गया था, जिसे बड़े पैमाने के environments तक scale किया जा सके, लेकिन अब यह maintenance समाप्त स्थिति में है
- bug fix, PR review, issue response और नए feature development सभी बंद कर दिए गए हैं, और इसे अनियमित रूप से खींचते रहने के बजाय स्पष्ट रूप से रोकने का निर्णय लिया गया है
- यह full·differential·incremental backup, block-level backup, interrupted jobs को resume करना, और delta restore को support करता है, जिससे केवल बदले हुए हिस्सों को store·restore किया जा सकता है
- local·remote environments को कवर करने वाली protocol layer और multiple repositories के साथ, TLS·SSH connections तथा S3·Azure·GCS compatible object store के जरिए इसका operational scope बढ़ाया गया था
- checksum, WAL segment wait, fsync, page checksum verification जैसे integrity assurance mechanisms व्यापक रूप से मौजूद थे, लेकिन आगे यदि कोई fork आता भी है तो उसे अलग से भरोसा बनाना होगा
maintenance समाप्ति और project status
- pgBackRest PostgreSQL के लिए एक backup·restore tool है, लेकिन अब इसका maintenance नहीं किया जा रहा है
- project पर काम रोक दिया गया है, और आगे bug fix, PR review, issue response, तथा नए feature development पर समय नहीं लगाया जाएगा
- पहले की sponsorship और employment व्यवस्था समाप्त होने के बाद भी maintenance जारी रखने की कोशिश की गई, लेकिन project को जारी रखने लायक job opportunities और sponsorship नहीं मिल सकी
- maintenance को अनियमित या अधूरा जारी रखने के बजाय, इसे स्पष्ट रूप से समाप्त करना बेहतर माना गया
- आगे कोई इसे fork कर सकता है, लेकिन उस स्थिति में उसे नया project माना जाएगा, और नए maintainer को अलग से भरोसा बनाना होगा
project की मुख्य features
- इसका लक्ष्य large-scale PostgreSQL environments तक scale होने वाला backup·restore था, और वर्तमान stable version v2.58.0 है
- parallel processing और lz4, zstd जैसे compression methods का उपयोग कर backup के दौरान bottleneck बनने वाली compression cost को कम करने के लिए इसे डिज़ाइन किया गया था
- यह full, differential, incremental backup को support करता है, और file-level के साथ-साथ block-level backup के जरिए केवल बदले हुए हिस्सों को copy कर storage space बचाता है
- interrupted backup को resume किया जा सकता है, और manifest के checksum से तुलना करके पहले से copied files की integrity फिर से verify की जाती है
- delta restore में backup में मौजूद न होने वाली files को पहले हटाया जाता है, फिर बाकी files के checksum मिलाए जाते हैं; जो files match करती हैं उन्हें वैसे ही छोड़ा जाता है और केवल ज़रूरी files restore की जाती हैं
remote operation और repository design
- अपनी protocol layer के जरिए local और remote दोनों environments में backup, restore, archive operations किए जा सकते हैं, और remote connections के लिए TLS/SSH का उपयोग होता है
- यही protocol layer PostgreSQL query interface भी देती है, जिससे PostgreSQL में सीधे remote login किए बिना काम किया जा सकता है और security बेहतर होती है
- multiple repositories support होने से, fast recovery के लिए local repository और long-term retention·redundancy के लिए remote repository साथ में रखी जा सकती हैं
- repositories को S3, Azure, GCS compatible object store में भी रखा जा सकता है, जिससे capacity और retention period काफ़ी बढ़ाया जा सकता है
- repository को खुद encrypt किया जा सकता है, इसलिए backup data जहाँ भी store हो, उसे सुरक्षित रखा जा सकता है
integrity और consistency सुनिश्चित करने के तरीके
- backup की सभी files के लिए checksum calculate किया जाता है, और restore या verify के समय फिर से जाँचा जाता है
- file copy पूरी होने के बाद, backup को consistent state में लाने के लिए आवश्यक सभी WAL segments repository तक पहुँचने का इंतज़ार किया जाता है
- सभी operations में file और directory level पर fsync का उपयोग कर durability सुनिश्चित की जाती है
- अगर PostgreSQL में page checksum enabled है, तो full backup में सभी files के page checksum verify किए जाते हैं, जबकि differential·incremental backup में केवल बदली हुई files verify की जाती हैं
- page checksum verification fail होने पर भी backup रोका नहीं जाता, लेकिन कौन-से pages fail हुए इसकी warning छोड़ी जाती है, ताकि valid backup expire होने से पहले page-level corruption को जल्दी पकड़ा जा सके
WAL handling और recovery performance optimization
- WAL push/get के लिए dedicated commands दिए गए हैं, और दोनों parallel processing तथा asynchronous execution support करते हैं ताकि PostgreSQL response time को यथासंभव तेज रखा जा सके
- WAL push में अगर वही WAL segment कई बार आता है तो duplication अपने-आप हटा दी जाती है, और content अलग होने पर error उत्पन्न होती है
- asynchronous WAL push में दूसरा process transfer संभालता है और WAL segments को parallel compress करता है, इसलिए बहुत high-write databases में यह खास तौर पर महत्वपूर्ण है
- asynchronous WAL get local में decompressed WAL queue बनाए रखता है ताकि replay से पहले तुरंत supply किया जा सके; high-latency connections या S3 जैसे storage में इसका फ़ायदा और बढ़ जाता है
- WAL push और get दोनों PostgreSQL version और system identifier की तुलना कर यह verify करते हैं कि database और repository सही pair हैं, जिससे WAL archive location की गलत configuration की संभावना काफ़ी कम होती है
operational flexibility और compatibility
- backup retention और archive expiration policies को full, differential, WAL units के हिसाब से अलग-अलग set किया जा सकता है, जिससे मनचाही अवधि को cover किया जा सके
- backup को PostgreSQL cluster format में ही store किया जा सकता है, और compression बंद करके hard link enable करने पर repository snapshot पर सीधे PostgreSQL cluster चलाया भी जा सकता है
- यह तरीका पारंपरिक restore में अधिक समय लेने वाले terabyte-scale database के लिए फ़ायदेमंद है
- tablespace पूरी तरह support होता है, और restore के समय हर tablespace को अलग location पर move किया जा सकता है या एक location पर bulk remap किया जा सकता है
- file और directory links भी support होते हैं, इसलिए restore के दौरान original locations बनाए रखना, कुछ या सभी remap करना, या उन्हें सामान्य file·directory के रूप में restore करना संभव है
- यह PostgreSQL के 10 versions support करता है, जिनमें अभी supported 5 versions और EOL हो चुके हालिया 5 versions शामिल हैं, ताकि upgrade के लिए पर्याप्त समय मिल सके
reference resources और sponsorship status
- User guides
- Command reference
- Configuration reference
- वर्तमान sponsor Supabase है
- पिछले sponsors में Crunchy Data, Resonate शामिल थे
1 टिप्पणियां
Hacker News की रायें
कंपनी sponsorship भी थी, लेकिन रातों और weekends तक इसमें लगाते रहे, और Crunchy Data के बिकने के बाद भी इसे maintain करते हुए इस काम को आगे जारी रखने वाली भूमिका खोजी, लेकिन बात नहीं बनी
आजीविका के लिए अब उन्हें बड़े अवसर देखने होंगे, और तब maintenance, bug fixes, PR review, और issue response के लिए ज़रूरी समय वे नहीं दे पाएँगे, इसलिए repository को archive करने का उनका इरादा है
guide यहाँ है: https://github.com/freakynit/postgre-backup-and-restore-guide, और अब तक लगाए गए समय और मेहनत के लिए सच में आभार
ऊपर से बहुत से लोगों ने tokens पर पैसा जला दिया है, इसलिए उनके पास extra funds और समय दोनों कम हो गए हैं
अगर यह hobby project से आगे बढ़कर commercial environment में वास्तविक value देने वाला product-grade tool था, तो इस खाली जगह को भरने के लिए किसी for-profit company के आने का मौका भी ज़रूर है
लेकिन users को customer बनकर वास्तव में पैसा देना होगा; मुफ्त maintainers को लगातार bug reports और शिकायतें भेजते रहना sustainable नहीं है
FOSS की financial sustainability के लिए नए हल चाहिए, सिर्फ donations काफी नहीं लगते
चाहे local shop हो या open source project, बात एक जैसी है
हालाँकि अलग-अलग contributors के copyrights जुड़े हो सकते हैं, इसलिए ACL है या नहीं और jurisdiction क्या है, उसके हिसाब से rights clear करने पड़ सकते हैं, और revenue sharing जैसे समझौते भी करने पड़ सकते हैं
corporate sponsorship के समय सब चल रहा था, लेकिन कंपनी बिकते ही और नए मालिक की priorities बदलते ही 3.8k-star infra tool तुरंत अस्थिर हो गया, और users को पता भी नहीं था कि मेरे backup tool की funding किसी और की M&A strategy पर टिकी थी
इसी वजह से मैं भी धीरे-धीरे SQLite और git से track होने वाली files की तरफ जा रहा हूँ
managed Postgres stacks भी आखिरकार कई ऐसे tools के ऊपर खड़े हैं जिन्हें ऐसे लोग maintain कर रहे हैं जिनकी funding स्थिति हमें पता नहीं होती
लेकिन funding structure के नाज़ुक होने वाली बड़ी बात अब भी सही है
और इसी बहाने उन dependency projects को भी देख लेना चाहिए जिन्हें आप खोना नहीं चाहते, और अभी से sponsorship सेट कर देनी चाहिए
सब कहते हैं कि वे दुखी हैं, लेकिन अगर सच में दुख है तो पहले यह पूछना चाहिए कि क्या वे donate करने जितने दुखी हैं
खासकर यह बात दुर्लभ थी कि यह सिर्फ backup ही नहीं बल्कि restore और verification को भी गंभीरता से लेता था, और इसे हल्के में लेने की वजह से मुझे नौकरी में बड़ा नुकसान झेलना पड़ा था
पूरी कहानी यहाँ है: https://blog.dijit.sh/that-time-my-manager-spend-1m-on-a-backup-server/
इसलिए यह काफ़ी बड़ा नुकसान लगता है
WAL-G और Barman के मुकाबले यह कैसा है, यह जानना चाहता हूँ
https://github.com/wal-g/wal-g
https://github.com/EnterpriseDB/barman
हर रात हम Barman से restore किया हुआ nightly DB बनाते हैं और उसे user training/testing में भी चलाते हैं, ताकि backup वास्तव में टूटा हुआ तो नहीं है यह लगातार verify होता रहे, और कई सालों से कोई समस्या नहीं आई
कुछ साल inactive रहने के बाद मैं फिर managed Postgres की तरफ लौटा हूँ, और आशा है कि wal-g, अपने block-comparison based delta backup के अलावा, pg17 incremental backup को भी support करे
और daemon mode का इस्तेमाल करना वाकई अच्छा रहता है
competing tool का गायब होना दुखद है, लेकिन इस क्षेत्र में अभी भी बहुत सुधार की गुंजाइश है, और जब Postgres बिना overcommit वाले system पर चलना चाहता है, तब C, Golang से कुछ मामलों में बेहतर हो सकता है
लगभग 9 साल पहले जब हमने समीक्षा की थी, तब streaming PITR characteristics की वजह से यह pgBackRest से ज़्यादा आकर्षक लगा था
तो अब सबसे नज़दीकी विकल्प wal-g है, barman है, या databasus, यह जानना चाहता हूँ
मैं मज़ाक में कहता हूँ कि बस DBA होने का नाटक कर रहा हूँ, लेकिन असल में यह चुनाव काफ़ी अहम है
संदर्भ के लिए, मैं DBRE हूँ
संबंधित docs: https://docs.pgbarman.org/release/3.18.0/user_guide/hook_scripts.html#hook-scripts-using-barman-cloud-scripts-as-hooks-in-barman
https://github.com/aiven-open/pghoard भी अच्छा लगता है, लेकिन मैंने अभी खुद verify नहीं किया है
इसलिए यह और भी अफसोसजनक है, और इस शानदार tool के साथ feature parity हासिल करना आसान नहीं होगा
अगर संभव हो तो अच्छा होगा कि यह फैसला reversible हो, और नहीं तो PostgreSQL project इसे contrib के रूप में absorb कर ले
शायद लेखक भी यही चाहेंगे कि लोग इसे तुरंत छोड़ने के बजाय तब तक इस्तेमाल करते रहें जब तक यह सच में काम करना बंद न कर दे
fork की ज़रूरत होगी या मौजूदा repository में contributor बनकर ही इसे आगे बढ़ाया जा सकेगा, यह साफ नहीं है