3 คะแนน โดย GN⁺ 2 일 전 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เป็นเครื่องมือสำรองและกู้คืนข้อมูลสำหรับ PostgreSQL ที่ออกแบบมาให้ขยายสเกลได้ถึงสภาพแวดล้อมขนาดใหญ่ แต่ปัจจุบันอยู่ในสถานะยุติการบำรุงรักษาแล้ว
  • ได้หยุดทั้งการแก้ bug, การ review 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 แต่ปัจจุบันไม่ได้รับการบำรุงรักษาอีกต่อไป
  • โปรเจกต์ได้หยุดการทำงานแล้ว และประกาศว่าจะไม่ใช้เวลากับการแก้ bug, การ review PR, การตอบสนองต่อ issue หรือการพัฒนาฟีเจอร์ใหม่อีก
  • แม้จะพยายามดูแลต่อหลังจากรูปแบบการสนับสนุนและการจ้างงานเดิมสิ้นสุดลง แต่ก็ไม่สามารถจัดหา โอกาสทางอาชีพและสปอนเซอร์ชิปได้เพียงพอสำหรับการดูแลโปรเจกต์ต่อไป
  • มองว่าการยุติอย่างชัดเจนดีกว่าการดูแลต่อแบบไม่สม่ำเสมอหรือไม่สมบูรณ์
  • ในอนาคตอาจมีใคร fork ไปได้ แต่ในกรณีนั้นจะถือเป็นโปรเจกต์ใหม่ และผู้ดูแลใหม่จะต้องสร้างความน่าเชื่อถือขึ้นมาเอง

ฟีเจอร์หลักของโปรเจกต์

  • มุ่งเป้าไปที่การสำรองและกู้คืนข้อมูลที่ขยายสเกลได้ถึงสภาพแวดล้อม PostgreSQL ขนาดใหญ่ โดยเวอร์ชันเสถียรปัจจุบันคือ v2.58.0
  • ออกแบบมาเพื่อลดต้นทุนการบีบอัดซึ่งมักเป็นคอขวดระหว่างการสำรองข้อมูล โดยใช้การประมวลผลแบบขนานและวิธีบีบอัดอย่าง lz4 และ zstd
  • รองรับการสำรองข้อมูลแบบ full, differential, incremental และไม่ใช่แค่ระดับไฟล์ แต่ยังรองรับblock-level backupเพื่อคัดลอกเฉพาะส่วนที่เปลี่ยนแปลงและประหยัดพื้นที่จัดเก็บ
  • สามารถกลับมาทำงานสำรองข้อมูลที่หยุดค้างได้ต่อ และตรวจสอบความถูกต้องสมบูรณ์ของไฟล์ที่คัดลอกไปแล้วอีกครั้งโดยเทียบกับ checksum ใน manifest
  • ใน delta restore จะลบไฟล์ที่ไม่มีอยู่ในแบ็กอัปออกก่อน จากนั้นเปรียบเทียบ checksum ของไฟล์ที่เหลือ โดยไฟล์ที่ตรงกันจะคงไว้และกู้คืนเฉพาะไฟล์ที่จำเป็น

การทำงานระยะไกลและการออกแบบที่เก็บข้อมูล

  • ผ่านprotocol layerของตัวเอง สามารถทำงานสำรองข้อมูล กู้คืน และ archive ได้ทั้งในสภาพแวดล้อม local และ remote โดยการเชื่อมต่อระยะไกลใช้ TLS/SSH
  • protocol layer เดียวกันนี้ยังมีอินเทอร์เฟซสำหรับ query PostgreSQL ทำให้ทำงานได้โดยไม่ต้องเชื่อมต่อระยะไกลเข้า PostgreSQL โดยตรง จึงช่วยเพิ่มความปลอดภัย
  • รองรับmultiple repositories ทำให้มีทั้งที่เก็บข้อมูลแบบ local สำหรับการกู้คืนที่รวดเร็ว และที่เก็บข้อมูลแบบ remote สำหรับการเก็บระยะยาวและเพิ่มความซ้ำซ้อนร่วมกันได้
  • ที่เก็บข้อมูลยังสามารถอยู่บน S3, Azure, GCS compatible object store ได้ด้วย จึงขยายทั้งความจุและระยะเวลาการเก็บรักษาได้มาก
  • สามารถเข้ารหัสที่เก็บข้อมูลเองได้ ทำให้ปกป้องข้อมูลสำรองได้ไม่ว่าจะเก็บไว้ที่ใด

วิธีรับประกันความถูกต้องสมบูรณ์และความสอดคล้อง

  • คำนวณchecksumให้กับทุกไฟล์ในแบ็กอัป และตรวจสอบซ้ำตอน restore หรือ verify
  • หลังจากคัดลอกไฟล์เสร็จ จะรอจนกว่า WAL segment ทั้งหมดที่จำเป็นต่อการทำให้แบ็กอัปอยู่ในสถานะที่สอดคล้องกันจะมาถึงที่เก็บข้อมูล
  • ใช้ fsync ทั้งในระดับไฟล์และไดเรกทอรีในทุกงานเพื่อให้มั่นใจด้านความทนทาน
  • หากเปิดใช้ page checksum ใน PostgreSQL จะตรวจสอบ page checksum ของทุกไฟล์ใน full backup และตรวจสอบเฉพาะไฟล์ที่เปลี่ยนแปลงใน differential·incremental backup
  • แม้การตรวจสอบ page checksum จะล้มเหลว แบ็กอัปก็จะไม่หยุด แต่จะทิ้งคำเตือนว่าเพจใดล้มเหลว เพื่อให้ตรวจพบ page-level corruption ได้ตั้งแต่เนิ่น ๆ ก่อนที่แบ็กอัปที่ยังใช้งานได้จะหมดอายุ

การจัดการ WAL และการเพิ่มประสิทธิภาพการกู้คืน

  • มีคำสั่งเฉพาะสำหรับ WAL push/get และทั้งสองแบบรองรับการประมวลผลขนานและการทำงานแบบ asynchronous โดยออกแบบมาให้ตอบสนองต่อ PostgreSQL ได้เร็วที่สุด
  • WAL push จะกำจัดข้อมูลซ้ำโดยอัตโนมัติเมื่อมี WAL segment เดียวกันเข้ามาหลายครั้ง และจะเกิดข้อผิดพลาดหากเนื้อหาแตกต่างกัน
  • asynchronous WAL push ให้โปรเซสอื่นรับหน้าที่ส่งและบีบอัด WAL segment แบบขนาน จึงสำคัญอย่างยิ่งกับฐานข้อมูลที่มีปริมาณการเขียนสูงมาก
  • asynchronous WAL get จะเก็บ คิว WAL ที่ถูกแตกไฟล์บีบอัดแล้ว ไว้ในเครื่องเพื่อให้พร้อมส่งต่อก่อน replay ได้ทันที ซึ่งมีข้อดีมากเป็นพิเศษบนการเชื่อมต่อที่มี latency สูงหรือที่เก็บข้อมูลอย่าง S3
  • ทั้ง WAL push และ get จะเปรียบเทียบเวอร์ชัน PostgreSQL และ system identifier เพื่อตรวจสอบว่าฐานข้อมูลกับที่เก็บข้อมูลตรงกัน จึงลดโอกาสการตั้งค่าตำแหน่ง WAL archive ผิดพลาดได้มาก

ความยืดหยุ่นในการปฏิบัติการและความเข้ากันได้

  • สามารถตั้งค่านโยบาย backup retention และarchive expiration แยกตาม full, differential และ WAL เพื่อครอบคลุมช่วงเวลาที่ต้องการได้
  • สามารถเก็บแบ็กอัปในรูปแบบ PostgreSQL cluster ได้ตรง ๆ และหากปิดการบีบอัดพร้อมเปิด hard link ก็สามารถบูต PostgreSQL cluster ได้โดยตรงบน snapshot ของที่เก็บข้อมูล
  • วิธีนี้มีข้อได้เปรียบสำหรับฐานข้อมูลระดับเทราไบต์ที่ใช้เวลานานในการ restore แบบดั้งเดิม
  • รองรับ tablespace อย่างสมบูรณ์ และระหว่าง restore สามารถย้ายแต่ละ tablespace ไปตำแหน่งอื่นหรือ remap รวมไปยังตำแหน่งเดียวได้
  • รองรับลิงก์ของไฟล์และไดเรกทอรีด้วย ทำให้ตอน restore สามารถคงตำแหน่งเดิม remap บางส่วนหรือทั้งหมด หรือกู้คืนโดยแปลงเป็นไฟล์·ไดเรกทอรีปกติได้
  • รองรับ PostgreSQL 10 เวอร์ชัน ครอบคลุมทั้ง 5 เวอร์ชันที่ยังซัพพอร์ตอยู่และ 5 เวอร์ชันล่าสุดที่ EOL แล้ว เพื่อให้มีเวลาเพียงพอสำหรับการอัปเกรด

แหล่งข้อมูลอ้างอิงและสถานะผู้สนับสนุน

1 ความคิดเห็น

 
GN⁺ 2 일 전
ความคิดเห็นจาก Hacker News
  • จากโพสต์ที่ผู้เขียนลงใน LinkedIn จะเห็นได้ชัดว่าเขาทุ่มทั้งเวลาและความรักให้กับ pgBackRest มานาน 13 ปี และตอนนี้ก็ตัดสินใจ ยุติการดูแลรักษา แล้ว
    แม้จะเคยมีการสนับสนุนจากบริษัท แต่ก็ยังต้องทุ่มเวลาช่วงกลางคืนและวันหยุดสุดสัปดาห์ลงไปด้วย และหลังจาก Crunchy Data ถูกขายไป เขาก็ยังคงดูแลต่อพร้อมกับพยายามหาตำแหน่งงานที่จะทำสิ่งนี้ต่อได้ แต่ก็ไม่สำเร็จ
    เพื่อเลี้ยงชีพ เขาจำเป็นต้องมองหาโอกาสที่กว้างขึ้น ซึ่งนั่นหมายความว่าเขาไม่สามารถสละเวลาที่จำเป็นสำหรับการบำรุงรักษา แก้บั๊ก รีวิว PR และตอบสนอง issue ได้อีกต่อไป จึงตั้งใจจะ archive repository
  • ฉันเคยใช้ pgBackRest ในโปรเจกต์ส่วนตัวได้ดีมาก ถึงขั้นทำคู่มือสำรองและกู้คืน PostgreSQL สำหรับทั้ง local volume และ cloud storage เลย จึงรู้สึกเสียดายที่มันต้องจบลงแบบนี้
    คู่มืออยู่ที่ https://github.com/freakynit/postgre-backup-and-restore-guide และขอขอบคุณมากจริงๆ สำหรับเวลาและความพยายามทั้งหมดที่ทุ่มเทมา
    • ทุกวันนี้ดูเหมือนว่าความคาดหวังเรื่อง AI ก็เป็นอีกปัจจัยที่ทำให้นักพัฒนาต้องรับมือกับ deadline ที่ตึงขึ้นและมีเวลาน้อยลง
      แถมยังมีหลายคนที่เผาเงินไปกับโทเค็น ทำให้ทั้งเงินสำรองและเวลาก็ลดลงไปพร้อมกัน
    • อยากให้โปรเจกต์แบบนี้ไม่หายไปเพียงเพราะขาด การสนับสนุนด้านเงินทุน และรู้สึกว่าความยากลำบากของ OSS ในโลกความเป็นจริงนั้นหนักมาก
  • ในที่นี้ไม่ใช่ว่า โมเดลโอเพนซอร์ส ล้มเหลว แต่เป็นเพียงการที่ผู้เขียนหาแรงสนับสนุนทางการเงินต่อไปไม่ได้แล้วจึงต้องเปลี่ยนทิศทาง ซึ่งก็ดูสมเหตุสมผลดี
    ถ้านี่เป็นเครื่องมือระดับโปรดักชันที่มอบคุณค่าจริงในสภาพแวดล้อมเชิงพาณิชย์ ไม่ใช่แค่โปรเจกต์งานอดิเรก ก็ย่อมมีโอกาสที่บริษัทแสวงหากำไรจะเข้ามาเติมช่องว่างนี้
    แต่ผู้ใช้งานก็ต้องกลายเป็นลูกค้าและจ่ายเงินจริง การส่ง bug report กับคำบ่นไปให้ผู้ดูแลที่ทำงานฟรีอยู่เรื่อยๆ นั้นไม่ยั่งยืน
    เราต้องการแนวทางใหม่สำหรับ ความยั่งยืนทางการเงินของ FOSS และดูเหมือนว่าการบริจาคอย่างเดียวคงไม่พอ
    • ไม่ว่าระบบนิเวศแบบไหน ถ้าเราอยากให้มันอยู่รอด เราก็ควร สนับสนุนโดยตรง เอง
      ไม่ว่าจะเป็นร้านในชุมชนหรือโปรเจกต์โอเพนซอร์สก็เหมือนกัน
    • สงสัยว่าผู้เขียนเคยพิจารณาทำสิ่งนี้ให้เป็น ผลิตภัณฑ์แบบเสียเงิน หรือไม่
      แต่สิทธิ์ลิขสิทธิ์อาจกระจายอยู่ในหมู่ผู้มีส่วนร่วมหลายคน จึงอาจต้องจัดการเรื่องสิทธิ์ตามว่ามี ACL หรือไม่และอยู่ภายใต้เขตอำนาจใด รวมถึงอาจต้องมีข้อตกลงเรื่องการแบ่งรายได้ด้วย
  • สิ่งที่ผู้คนควรจับตามากกว่าคือฝั่ง การเข้าซื้อกิจการของ Crunchy Data
    ตอนมีการสนับสนุนจากบริษัททุกอย่างยังเดินต่อได้ แต่พอบริษัทถูกขายและเจ้าของใหม่เปลี่ยนลำดับความสำคัญ เครื่องมือโครงสร้างพื้นฐานที่มี 3.8k ดาว ตัวนี้ก็เริ่มสั่นคลอนทันที ผู้ใช้หลายคนอาจไม่เคยรู้เลยว่าแหล่งทุนของเครื่องมือสำรองข้อมูลที่ตัวเองใช้ขึ้นอยู่กับกลยุทธ์ M&A ของคนอื่น
    เพราะแบบนั้นฉันเองก็เริ่มค่อยๆ ย้ายไปใช้ไฟล์ที่ติดตามด้วย SQLite และ git มากขึ้น
    เนื่องจากแม้แต่ managed Postgres stack ก็ยังวางอยู่บนเครื่องมือหลายตัวที่ดูแลโดยผู้คนซึ่งเราไม่รู้สถานะทางการเงินของพวกเขา
    • มันไม่ได้หายไปแบบสมบูรณ์ และอย่างน้อยตอนนี้ก็ยังไม่ใช่สถานการณ์ที่ การสำรองข้อมูลจะหยุดทำงานทันที
      แต่ภาพใหญ่เรื่องโครงสร้างเงินทุนที่เปราะบางนั้นก็ยังเป็นประเด็นจริง
    • แต่ SQLite เองก็ไม่ได้ปลอดภัยจากความเสี่ยงแบบเดียวกันโดยสมบูรณ์ แล้วทำไมถึงมองว่าปลอดภัยกว่าก็ยังน่าสงสัย
  • ซอร์สก็ยังอยู่ ดังนั้นแทนที่จะบอกว่าเสียดายอย่างเดียว ก็ยังมีทางเลือกอย่าง fork เอง เพื่อดูแลต่อ หรือจ่ายเงินให้ใครสักคนมารับช่วงดูแล
    และในจังหวะเดียวกันก็ควรกลับไปดูโปรเจกต์ที่เราไม่อยากเสียไป แล้วตั้งค่าการสนับสนุนไว้ตั้งแต่ตอนนี้
    • คิดว่านี่เป็นท่าทีที่ถูกต้อง
      ทุกคนบอกว่าเสียใจ แต่ถ้าเสียใจจริง ก็ควรถามตัวเองก่อนว่า เสียใจถึงขั้นพร้อมบริจาคไหม
  • เท่าที่ฉันเห็นระบบนิเวศนี้มา pgBackRest คือโซลูชันที่ดีที่สุดในสาย PostgreSQL backup
    โดยเฉพาะตรงที่มันไม่ได้จริงจังแค่เรื่อง backup แต่ยังรวมถึง การกู้คืนและการตรวจสอบความถูกต้อง ด้วย ซึ่งหาได้ยากมาก และฉันเองก็เคยเจอประสบการณ์แย่หนักในที่ทำงานเพราะละเลยเรื่องนี้
    รายละเอียดอยู่ที่ https://blog.dijit.sh/that-time-my-manager-spend-1m-on-a-backup-server/
    เลยรู้สึกว่านี่เป็นความสูญเสียที่ค่อนข้างใหญ่
  • ค่อนข้างน่าตกใจ และฉันเคยมองว่านี่แทบจะเป็น เครื่องมือ backup/recovery หลักของ PG อยู่แล้ว
    เลยสงสัยว่าเมื่อเทียบกับ WAL-G หรือ Barman แล้วเป็นอย่างไร
    https://github.com/wal-g/wal-g
    https://github.com/EnterpriseDB/barman
    • ฉันอาจเทียบแบบแม่นๆ ไม่ได้ แต่เราใช้ Barman มานานและพอใจมาก
      ทุกคืนเราจะสร้าง nightly DB ที่กู้คืนจาก Barman แล้วเอาไปใช้ทั้งสำหรับฝึกอบรมผู้ใช้และทดสอบด้วย เพื่อยืนยันอย่างต่อเนื่องว่า backup ไม่ได้เสียจริงๆ และหลายปีก็ยังไม่มีปัญหา
    • ฉันเป็นหนึ่งใน ผู้ดูแล wal-g และมองว่าในแง่ฟีเจอร์มันเทียบกันได้สบาย
      หลังจากเงียบไปหลายปี ตอนนี้ฉันกลับมาทำฝั่ง managed Postgres อีกครั้ง และหวังว่านอกจาก delta backup ที่ wal-g มีผ่านการเปรียบเทียบบล็อกของตัวเองแล้ว มันจะรองรับ pg17 incremental backup ด้วย
      แล้วก็ควรใช้ daemon mode จริงๆ
      น่าเสียดายที่เครื่องมือคู่แข่งหายไป แต่พื้นที่นี้ยังมีอะไรให้พัฒนาอีกมาก และเวลาที่ Postgres อยากรันบนระบบที่ไม่มี overcommit นั้น C มีข้อได้เปรียบเหนือ Golang อยู่เหมือนกัน
    • แต่ก่อนเราใช้ WAL-E และตอนนี้ก็ใช้ผู้สืบทอดของมันคือ WAL-G อย่างพอใจ
      ตอนประเมินเมื่อราว 9 ปีก่อน ฝั่งนี้ดึงดูดใจกว่า pgBackRest เพราะคุณสมบัติ streaming PITR
    • เข้าใจได้ที่มองว่านี่เป็นเครื่องมือหลัก แต่ก็ทำให้นึกถึงสถานการณ์แบบ https://xkcd.com/2347/
  • ฉันใช้ pgBackRest กับ ฐานข้อมูล production ขนาด 2TB ได้อย่างน่าพอใจ และบังเอิญว่าสัปดาห์นี้กำลังจะเอาไปใช้กับ ฐานข้อมูล 8TB ด้วย
    งั้นตอนนี้ทางเลือกที่ใกล้ที่สุดคือ wal-g, barman หรือ databasus กันแน่
    ถึงจะพูดว่าตัวเองแค่เล่นบท DBA แต่จริงๆ แล้วการเลือกนี่สำคัญมาก
    • ฉันเคยใช้ Barman กับ ฐานข้อมูลระดับ 30TB+ และก็ไม่มีอะไรให้บ่นมากนัก
      เผื่อเป็นข้อมูล ฉันทำงานเป็น DBRE
    • ถ้าคุณกำลังสำรองข้อมูล Postgres production ระดับหลายเทราไบต์อยู่ นั่นไม่ใช่แค่ เล่นบท DBA แล้ว แต่ถือว่าคุณทำงานนี้จริงจังอยู่แล้ว
    • ถ้าคอนฟิกของคุณเก็บ backup ไว้บน cloud storage ทางเลือกที่ใกล้ที่สุดน่าจะเป็น Barman ที่เพิ่ม hook scripts เข้าไป
      เอกสารที่เกี่ยวข้องคือ 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 ก็ดูน่าสนใจ แต่ฉันยังไม่ได้ลองพิสูจน์ด้วยตัวเอง
    • สงสัยว่ามีใครเคยทำ backup โดยเอา standby ไว้บน ZFS หรือไฟล์ซิสเต็มอื่นที่ทำ snapshot ได้บ้างไหม
    • ฉันไม่เคยใช้ pgBackRest มาก่อนเลย แต่เพิ่งเริ่มเอามันไปใช้กับโปรเจกต์หนึ่งเมื่อ 2 ชั่วโมงก่อน พออ่าน README จบ ทุกอย่างก็อัปเดตไปแล้ว
  • pgBackRest เป็นหนึ่งในเทคโนโลยีสำรองข้อมูล PostgreSQL ที่อเนกประสงค์ที่สุด และจากประสบการณ์ของฉัน ผลิตภัณฑ์อื่นยังตามความสามารถของมันไม่ทัน
    ยิ่งทำให้เรื่องนี้น่าเสียดายมากขึ้น และการหาทางเลือกที่ เทียบเท่าด้านฟังก์ชันการทำงาน กับเครื่องมือที่ยอดเยี่ยมนี้คงไม่ง่าย
    ถ้าเป็นไปได้ก็หวังว่านี่จะเป็นการตัดสินใจที่ย้อนกลับได้ ไม่เช่นนั้นก็น่าจะมีทางให้โปรเจกต์ PostgreSQL รับมันเข้าไปใน contrib
  • ตอนนี้มันยัง ใช้งานต่อได้ ก็ใช้ต่อไปได้ตามปกติ
    ผู้เขียนเองก็คงอยากให้คนยังใช้มันต่อไป มากกว่าจะรีบทิ้งมันก่อนเวลาที่มันใช้งานไม่ได้จริงๆ
    • และเมื่อถึงตอนนั้นก็คงดีถ้ามีใครสักคนอาสาเป็น ผู้ดูแลคนใหม่
      ไม่แน่ใจว่าจะต้อง fork หรือว่ายังสามารถเข้าไปเป็น contributor ใน repository เดิมแล้วรับช่วงต่อได้