pgBackRest ไม่ได้รับการบำรุงรักษาอีกต่อไป
(github.com/pgbackrest)- เป็นเครื่องมือสำรองและกู้คืนข้อมูลสำหรับ PostgreSQL ที่ออกแบบมาให้ขยายไปใช้ในสภาพแวดล้อมขนาดใหญ่ได้ แต่ตอนนี้ได้ยุติการบำรุงรักษาแล้ว
- การแก้บั๊ก, การรีวิว PR, การตอบสนองต่อ issue และการพัฒนาฟีเจอร์ใหม่ทั้งหมดได้หยุดลง และเลือกที่จะหยุดอย่างชัดเจนแทนการฝืนดูแลต่อแบบไม่สม่ำเสมอ
- รองรับการสำรองข้อมูลแบบ full, differential, incremental และ block-level backup, การทำงานต่อจากงานที่หยุดค้างไว้, และ delta restore เพื่อให้บันทึกและกู้คืนเฉพาะส่วนที่เปลี่ยนแปลงได้
- มี protocol layer ที่ครอบคลุมทั้งสภาพแวดล้อมแบบ local และ remote รวมถึง multiple repositories และขยายขอบเขตการใช้งานผ่านการเชื่อมต่อ TLS·SSH และ object store ที่เข้ากันได้กับ S3·Azure·GCS
- เป็นเครื่องมือที่มีกลไกประกันความถูกต้องสมบูรณ์ของข้อมูลอย่างกว้างขวาง เช่น checksum, การรอ WAL segment, fsync, การตรวจสอบ page checksum แต่ต่อจากนี้แม้จะมี fork เกิดขึ้นก็จำเป็นต้องสร้างความน่าเชื่อถือขึ้นมาใหม่แยกต่างหาก
การยุติการบำรุงรักษาและสถานะของโครงการ
- pgBackRest เป็นเครื่องมือสำรองและกู้คืนข้อมูลสำหรับ PostgreSQL แต่ในตอนนี้ไม่ได้รับการบำรุงรักษาอีกต่อไป
- โครงการได้หยุดการทำงานแล้ว และระบุว่าจะไม่ใช้เวลาไปกับการแก้บั๊ก, รีวิว PR, ตอบสนองต่อ issue หรือพัฒนาฟีเจอร์ใหม่อีกต่อไป
- แม้จะพยายามดูแลต่อหลังจากการสนับสนุนและรูปแบบการจ้างงานเดิมสิ้นสุดลง แต่ก็ไม่สามารถหามาได้เพียงพอทั้ง โอกาสด้านงาน และ การสนับสนุนจากสปอนเซอร์ สำหรับการดูแลโครงการต่อ
- มองว่าการยุติอย่างชัดเจนนั้นดีกว่าการดูแลต่อไปแบบไม่สม่ำเสมอหรือไม่สมบูรณ์
- ในอนาคตอาจมีคน fork ได้ แต่ในกรณีนั้นจะถือเป็นโครงการใหม่ และผู้ดูแลใหม่จะต้องสร้างความน่าเชื่อถือขึ้นมาเองแยกต่างหาก
ฟีเจอร์หลักของโครงการ
- มุ่งเป้าไปที่การสำรองและกู้คืนข้อมูลที่ขยายไปได้ถึงสภาพแวดล้อม PostgreSQL ขนาดใหญ่ และเวอร์ชันเสถียรปัจจุบันคือ v2.58.0
- ออกแบบมาให้ลดต้นทุนด้านการบีบอัดซึ่งมักเป็นคอขวดระหว่างการสำรองข้อมูล โดยใช้การประมวลผลแบบขนานและวิธีบีบอัดอย่าง lz4, zstd
- รองรับการสำรองข้อมูลแบบ full, differential, incremental และไม่ใช่แค่ระดับไฟล์ แต่ยังมี block-level backup เพื่อคัดลอกเฉพาะส่วนที่เปลี่ยนแปลงและประหยัดพื้นที่จัดเก็บ
- สามารถทำการสำรองข้อมูลต่อจากที่หยุดค้างไว้ได้ และตรวจสอบความถูกต้องของไฟล์ที่คัดลอกไปแล้วอีกครั้งโดยเทียบกับ checksum ใน manifest
- ใน delta restore จะลบไฟล์ที่ไม่มีอยู่ในแบ็กอัปออกก่อน จากนั้นเทียบ checksum ของไฟล์ที่เหลือ โดยคงไฟล์ที่ตรงกันไว้ และกู้คืนเฉพาะไฟล์ที่จำเป็น
การทำงานระยะไกลและการออกแบบ repository
- ผ่าน protocol layer ของตัวเอง สามารถทำงานสำรองข้อมูล กู้คืน และ archive ได้ทั้งในสภาพแวดล้อม local และ remote โดยใช้ TLS/SSH สำหรับการเชื่อมต่อระยะไกล
- protocol layer เดียวกันนี้ยังมีอินเทอร์เฟซสำหรับ query PostgreSQL ทำให้สามารถทำงานได้โดยไม่ต้องเชื่อมต่อระยะไกลเข้าสู่ PostgreSQL โดยตรง จึงช่วยเพิ่มความปลอดภัย
- รองรับ multiple repositories ทำให้สามารถมีทั้งที่เก็บข้อมูล local สำหรับการกู้คืนอย่างรวดเร็ว และที่เก็บข้อมูล remote สำหรับการเก็บระยะยาวและเพิ่มความซ้ำซ้อน
- repository ยังสามารถอยู่บน object store ที่เข้ากันได้กับ S3, Azure, GCS ได้ จึงขยายทั้งความจุและระยะเวลาการเก็บรักษาได้มาก
- สามารถเข้ารหัส repository เองได้ จึงปกป้องข้อมูลสำรองได้ไม่ว่าจะเก็บไว้ที่ใด
วิธีรับประกันความถูกต้องสมบูรณ์และความสอดคล้อง
- คำนวณ checksum สำหรับทุกไฟล์ของแบ็กอัป และตรวจสอบซ้ำอีกครั้งตอน restore หรือ verify
- หลังคัดลอกไฟล์เสร็จ จะรอจนกว่า WAL segment ทั้งหมดที่จำเป็นสำหรับทำให้แบ็กอัปอยู่ในสถานะสอดคล้องกันจะมาถึง repository
- ใช้ fsync ในระดับไฟล์และไดเรกทอรีสำหรับทุกงานเพื่อให้มั่นใจในความคงทนของข้อมูล
- หาก PostgreSQL เปิดใช้ page checksum จะตรวจสอบ page checksum ของทุกไฟล์ในการสำรองแบบ full และตรวจสอบเฉพาะไฟล์ที่เปลี่ยนแปลงในการสำรองแบบ differential·incremental
- แม้การตรวจสอบ page checksum จะล้มเหลว แบ็กอัปก็จะไม่หยุด แต่จะทิ้งคำเตือนไว้ว่าหน้าใดล้มเหลว เพื่อให้ค้นหา page-level corruption ได้ตั้งแต่เนิ่น ๆ ก่อนที่แบ็กอัปที่ยังใช้ได้จะหมดอายุ
การจัดการ WAL และการปรับแต่งประสิทธิภาพการกู้คืน
- มีคำสั่งเฉพาะสำหรับ WAL push/get และทั้งสองแบบรองรับการประมวลผลขนานกับการทำงานแบบ asynchronous เพื่อให้ออกแบบมาให้กระทบเวลาตอบสนองของ PostgreSQL ให้น้อยที่สุด
- WAL push จะลบข้อมูลซ้ำโดยอัตโนมัติเมื่อมี WAL segment เดียวกันเข้ามาหลายครั้ง และหากเนื้อหาแตกต่างกันจะเกิดข้อผิดพลาด
- asynchronous WAL push ให้โปรเซสอื่นรับหน้าที่ส่งและบีบอัด WAL segment แบบขนาน จึงมีความสำคัญอย่างยิ่งกับฐานข้อมูลที่มีปริมาณการเขียนสูงมาก
- asynchronous WAL get จะเก็บ WAL queue ที่คลายการบีบอัดแล้ว ไว้ในเครื่อง เพื่อให้ส่งต่อได้ทันที قبل replay และมีประโยชน์มากเป็นพิเศษกับการเชื่อมต่อที่มี latency สูงหรือ storage อย่าง S3
- ทั้ง WAL push และ get จะเปรียบเทียบเวอร์ชันของ PostgreSQL และ system identifier เพื่อตรวจสอบว่าฐานข้อมูลกับ repository ตรงกันหรือไม่ จึงช่วยลดโอกาสในการตั้งค่าตำแหน่ง WAL archive ผิดอย่างมาก
ความยืดหยุ่นในการใช้งานและความเข้ากันได้
- สามารถตั้งนโยบาย backup retention และ archive expiration แยกตามหน่วย full, differential และ WAL ได้ จึงครอบคลุมช่วงเวลาที่ต้องการได้
- สามารถจัดเก็บแบ็กอัปในรูปแบบ PostgreSQL cluster เดิมได้ และหากปิดการบีบอัดพร้อมเปิด hard link ก็สามารถบูต PostgreSQL cluster ขึ้นได้โดยตรงบน snapshot ของ repository
- วิธีนี้เหมาะกับ ฐานข้อมูลระดับเทราไบต์ ที่การ restore แบบดั้งเดิมใช้เวลานาน
- รองรับ tablespace อย่างสมบูรณ์ และระหว่าง restore สามารถย้ายแต่ละ tablespace ไปยังตำแหน่งอื่น หรือ remap ทั้งหมดไปยังตำแหน่งเดียวได้
- รองรับลิงก์ของไฟล์และไดเรกทอรีด้วย ทำให้ระหว่าง restore สามารถคงตำแหน่งเดิม, remap บางส่วนหรือทั้งหมด, หรือกู้คืนโดยแปลงเป็นไฟล์และไดเรกทอรีปกติได้
- รองรับ PostgreSQL 10 เวอร์ชัน โดยครอบคลุมทั้ง 5 เวอร์ชันที่ยังรองรับอยู่ในปัจจุบันและ 5 เวอร์ชันล่าสุดที่ EOL แล้ว เพื่อเผื่อเวลาในการอัปเกรดได้อย่างเพียงพอ
แหล่งข้อมูลอ้างอิงและสถานะผู้สนับสนุน
- User guides
- Command reference
- Configuration reference
- ผู้สนับสนุนปัจจุบันคือ Supabase
- ผู้สนับสนุนในอดีตได้แก่ Crunchy Data, Resonate
2 ความคิดเห็น
มีการอัปเดตเกี่ยวกับเรื่องนี้แล้ว
ความคิดเห็นจาก Hacker News
แม้จะเคยมีการสนับสนุนจากบริษัท แต่ก็ยังต้องทุ่มเวลาช่วงกลางคืนและวันหยุดสุดสัปดาห์ลงไปด้วย และหลังจาก Crunchy Data ถูกขายไป เขาก็ยังคงดูแลต่อพร้อมกับพยายามหาตำแหน่งงานที่จะทำสิ่งนี้ต่อได้ แต่ก็ไม่สำเร็จ
เพื่อเลี้ยงชีพ เขาจำเป็นต้องมองหาโอกาสที่กว้างขึ้น ซึ่งนั่นหมายความว่าเขาไม่สามารถสละเวลาที่จำเป็นสำหรับการบำรุงรักษา แก้บั๊ก รีวิว PR และตอบสนอง issue ได้อีกต่อไป จึงตั้งใจจะ archive repository
คู่มืออยู่ที่ https://github.com/freakynit/postgre-backup-and-restore-guide และขอขอบคุณมากจริงๆ สำหรับเวลาและความพยายามทั้งหมดที่ทุ่มเทมา
แถมยังมีหลายคนที่เผาเงินไปกับโทเค็น ทำให้ทั้งเงินสำรองและเวลาก็ลดลงไปพร้อมกัน
ถ้านี่เป็นเครื่องมือระดับโปรดักชันที่มอบคุณค่าจริงในสภาพแวดล้อมเชิงพาณิชย์ ไม่ใช่แค่โปรเจกต์งานอดิเรก ก็ย่อมมีโอกาสที่บริษัทแสวงหากำไรจะเข้ามาเติมช่องว่างนี้
แต่ผู้ใช้งานก็ต้องกลายเป็นลูกค้าและจ่ายเงินจริง การส่ง bug report กับคำบ่นไปให้ผู้ดูแลที่ทำงานฟรีอยู่เรื่อยๆ นั้นไม่ยั่งยืน
เราต้องการแนวทางใหม่สำหรับ ความยั่งยืนทางการเงินของ FOSS และดูเหมือนว่าการบริจาคอย่างเดียวคงไม่พอ
ไม่ว่าจะเป็นร้านในชุมชนหรือโปรเจกต์โอเพนซอร์สก็เหมือนกัน
แต่สิทธิ์ลิขสิทธิ์อาจกระจายอยู่ในหมู่ผู้มีส่วนร่วมหลายคน จึงอาจต้องจัดการเรื่องสิทธิ์ตามว่ามี ACL หรือไม่และอยู่ภายใต้เขตอำนาจใด รวมถึงอาจต้องมีข้อตกลงเรื่องการแบ่งรายได้ด้วย
ตอนมีการสนับสนุนจากบริษัททุกอย่างยังเดินต่อได้ แต่พอบริษัทถูกขายและเจ้าของใหม่เปลี่ยนลำดับความสำคัญ เครื่องมือโครงสร้างพื้นฐานที่มี 3.8k ดาว ตัวนี้ก็เริ่มสั่นคลอนทันที ผู้ใช้หลายคนอาจไม่เคยรู้เลยว่าแหล่งทุนของเครื่องมือสำรองข้อมูลที่ตัวเองใช้ขึ้นอยู่กับกลยุทธ์ M&A ของคนอื่น
เพราะแบบนั้นฉันเองก็เริ่มค่อยๆ ย้ายไปใช้ไฟล์ที่ติดตามด้วย SQLite และ git มากขึ้น
เนื่องจากแม้แต่ managed Postgres stack ก็ยังวางอยู่บนเครื่องมือหลายตัวที่ดูแลโดยผู้คนซึ่งเราไม่รู้สถานะทางการเงินของพวกเขา
แต่ภาพใหญ่เรื่องโครงสร้างเงินทุนที่เปราะบางนั้นก็ยังเป็นประเด็นจริง
และในจังหวะเดียวกันก็ควรกลับไปดูโปรเจกต์ที่เราไม่อยากเสียไป แล้วตั้งค่าการสนับสนุนไว้ตั้งแต่ตอนนี้
ทุกคนบอกว่าเสียใจ แต่ถ้าเสียใจจริง ก็ควรถามตัวเองก่อนว่า เสียใจถึงขั้นพร้อมบริจาคไหม
โดยเฉพาะตรงที่มันไม่ได้จริงจังแค่เรื่อง backup แต่ยังรวมถึง การกู้คืนและการตรวจสอบความถูกต้อง ด้วย ซึ่งหาได้ยากมาก และฉันเองก็เคยเจอประสบการณ์แย่หนักในที่ทำงานเพราะละเลยเรื่องนี้
รายละเอียดอยู่ที่ 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
ทุกคืนเราจะสร้าง nightly DB ที่กู้คืนจาก Barman แล้วเอาไปใช้ทั้งสำหรับฝึกอบรมผู้ใช้และทดสอบด้วย เพื่อยืนยันอย่างต่อเนื่องว่า backup ไม่ได้เสียจริงๆ และหลายปีก็ยังไม่มีปัญหา
หลังจากเงียบไปหลายปี ตอนนี้ฉันกลับมาทำฝั่ง managed Postgres อีกครั้ง และหวังว่านอกจาก delta backup ที่ wal-g มีผ่านการเปรียบเทียบบล็อกของตัวเองแล้ว มันจะรองรับ pg17 incremental backup ด้วย
แล้วก็ควรใช้ daemon mode จริงๆ
น่าเสียดายที่เครื่องมือคู่แข่งหายไป แต่พื้นที่นี้ยังมีอะไรให้พัฒนาอีกมาก และเวลาที่ Postgres อยากรันบนระบบที่ไม่มี overcommit นั้น C มีข้อได้เปรียบเหนือ Golang อยู่เหมือนกัน
ตอนประเมินเมื่อราว 9 ปีก่อน ฝั่งนี้ดึงดูดใจกว่า pgBackRest เพราะคุณสมบัติ streaming PITR
งั้นตอนนี้ทางเลือกที่ใกล้ที่สุดคือ wal-g, barman หรือ databasus กันแน่
ถึงจะพูดว่าตัวเองแค่เล่นบท DBA แต่จริงๆ แล้วการเลือกนี่สำคัญมาก
เผื่อเป็นข้อมูล ฉันทำงานเป็น DBRE
เอกสารที่เกี่ยวข้องคือ 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 ก็ดูน่าสนใจ แต่ฉันยังไม่ได้ลองพิสูจน์ด้วยตัวเอง
ยิ่งทำให้เรื่องนี้น่าเสียดายมากขึ้น และการหาทางเลือกที่ เทียบเท่าด้านฟังก์ชันการทำงาน กับเครื่องมือที่ยอดเยี่ยมนี้คงไม่ง่าย
ถ้าเป็นไปได้ก็หวังว่านี่จะเป็นการตัดสินใจที่ย้อนกลับได้ ไม่เช่นนั้นก็น่าจะมีทางให้โปรเจกต์ PostgreSQL รับมันเข้าไปใน contrib
ผู้เขียนเองก็คงอยากให้คนยังใช้มันต่อไป มากกว่าจะรีบทิ้งมันก่อนเวลาที่มันใช้งานไม่ได้จริงๆ
ไม่แน่ใจว่าจะต้อง fork หรือว่ายังสามารถเข้าไปเป็น contributor ใน repository เดิมแล้วรับช่วงต่อได้