pgBackRest अब मेंटेन नहीं किया जा रहा है
(github.com/pgbackrest)- PostgreSQL के लिए एक बैकअप·रिकवरी टूल के रूप में इसे बड़े पैमाने के environments तक scale होने के लिए डिज़ाइन किया गया था, लेकिन अब इसका maintenance बंद कर दिया गया है
- bug fix, PR review, issue response और नए feature development सभी बंद कर दिए गए हैं, और इसे अनियमित रूप से खींचते रहने के बजाय स्पष्ट रूप से रोकने का फैसला किया गया
- यह full·differential·incremental backup और block-level backup, बाधित काम को 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 validation जैसे integrity assurance mechanisms से लैस यह एक मजबूत टूल था, लेकिन आगे अगर कोई fork आता भी है तो उसे अलग से भरोसा बनाना होगा
maintenance समाप्ति और प्रोजेक्ट की स्थिति
- pgBackRest PostgreSQL के लिए एक बैकअप·रिकवरी टूल है, लेकिन अब इसका maintenance नहीं किया जा रहा है
- प्रोजेक्ट पर काम रोक दिया गया है, और आगे bug fix, PR review, issue response तथा नए feature development पर समय नहीं देने की बात कही गई है
- पहले की sponsorship और employment arrangements खत्म हो जाने के बाद भी maintenance जारी रखने की कोशिश की गई, लेकिन प्रोजेक्ट को जारी रखने लायक job opportunities और sponsorship नहीं मिल सकी
- maintenance को अनियमित या अधूरा जारी रखने के बजाय, इसे स्पष्ट रूप से समाप्त करना बेहतर माना गया
- भविष्य में कोई इसे fork कर सकता है, लेकिन उस स्थिति में उसे नया प्रोजेक्ट माना जाएगा और नए maintainer को अलग से भरोसा बनाना होगा
प्रोजेक्ट की मुख्य विशेषताएँ
- इसका लक्ष्य बड़े PostgreSQL environments तक scale होने वाली backup·recovery क्षमता देना है, और वर्तमान 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 बचाता है
- बाधित backup को resume किया जा सकता है, और manifest के checksum से तुलना करके पहले से copy की गई files की integrity फिर से verify की जाती है
- delta restore में backup में न मौजूद files को पहले हटाया जाता है और बाकी files के checksum मिलाए जाते हैं, ताकि matching files को वैसे ही रखा जाए और केवल ज़रूरी files ही restore हों
remote operation और repository design
- अपनी protocol layer के जरिए local और remote दोनों environments में backup, restore और archive operations किए जा सकते हैं, और remote connection के लिए TLS/SSH का उपयोग होता है
- यही protocol layer PostgreSQL query interface भी देती है, जिससे PostgreSQL में सीधे remote login किए बिना काम किया जा सकता है और security बढ़ती है
- multiple repositories support होने से तेज़ 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 segment repository तक पहुँचने का इंतज़ार किया जाता है
- सभी operations में file और directory level पर fsync का उपयोग करके durability सुनिश्चित की जाती है
- अगर PostgreSQL में page checksum enabled है, तो full backup में सभी files के page checksum validate किए जाते हैं, जबकि differential·incremental backup में केवल बदली हुई files को validate किया जाता है
- page checksum validation fail होने पर भी backup बंद नहीं होता, लेकिन किस page में failure हुआ उसकी 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 कई बार आता है तो उसे अपने आप deduplicate किया जाता है, और content अलग होने पर error दी जाती है
- asynchronous WAL push में दूसरा process transfer संभालता है और WAL segment को parallel compress करता है, इसलिए बहुत high write volume वाले database में यह खास तौर पर महत्वपूर्ण है
- asynchronous WAL get local में decompressed WAL queue बनाए रखता है, ताकि replay से पहले उन्हें तुरंत उपलब्ध कराया जा सके; high-latency connections या S3 जैसे storage में इसका फायदा खास तौर पर बड़ा है
- WAL push और get दोनों PostgreSQL version और system identifier की तुलना करके यह verify करते हैं कि database और repository सही pair हैं, जिससे WAL archive location गलत configure होने की संभावना काफी कम हो जाती है
operational flexibility और compatibility
- backup retention और archive expiration policies को full, differential और WAL unit में अलग-अलग configure किया जा सकता है, जिससे मनचाही अवधि को cover किया जा सकता है
- backup को PostgreSQL cluster format में जैसा है वैसा store किया जा सकता है, और compression बंद करके hard link enable करने पर repository snapshot पर PostgreSQL cluster को सीधे start भी किया जा सकता है
- यह तरीका पारंपरिक restore में अधिक समय लेने वाले terabyte-scale database के लिए फायदेमंद है
- tablespace का पूरा support है, और restore के समय हर tablespace को अलग location पर ले जाया जा सकता है या एक location पर bulk remap किया जा सकता है
- file और directory links भी support हैं, इसलिए restore के समय original location बनाए रखना, कुछ या सभी remap करना, या उन्हें सामान्य file·directory के रूप में restore करना संभव है
- PostgreSQL के 10 versions support किए जाते हैं, जिनमें वर्तमान में supported 5 versions और EOL हो चुके हाल के 5 versions शामिल हैं, ताकि upgrade के लिए पर्याप्त समय मिल सके
संदर्भ संसाधन और sponsorship स्थिति
- User guides
- Command reference
- Configuration reference
- वर्तमान sponsor Supabase है
- पिछले sponsors में Crunchy Data, Resonate शामिल थे
2 टिप्पणियां
इस संबंध में अपडेट किया गया है.
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 बनकर ही इसे आगे बढ़ाया जा सकेगा, यह साफ नहीं है