PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Trạng thái hiện tại của quản lý sao lưu mã nguồn mở cho PostgreSQL

Có nhiều cách để giải quyết việc sao lưu một cụm PostgreSQL. Có một số bài báo và blog trình bày các công nghệ khác nhau mà chúng ta có thể lưu dữ liệu quý giá của mình trong PostgreSQL. Có các giải pháp sao lưu hợp lý, sao lưu vật lý ở cấp hệ điều hành, ở cấp hệ thống tệp, v.v. Ở đây trong blog này, chúng tôi sẽ không trình bày phần lý thuyết mà được đề cập đầy đủ bởi các blog và bài báo khác nhau cũng như tài liệu chính thức.

Blog này đang tập trung vào trạng thái của các công cụ và giải pháp khác nhau có sẵn và nỗ lực trình bày so sánh kỹ lưỡng dựa trên kinh nghiệm thực tế cuộc sống. Bài viết này không cố gắng quảng bá bất kỳ sản phẩm cụ thể nào, tôi thực sự thích tất cả các công cụ, giải pháp và công nghệ được mô tả trong blog này. Mục đích ở đây là ghi lại điểm mạnh, điểm yếu của họ và hướng dẫn người dùng cuối biết công cụ nào sẽ phù hợp nhất với môi trường, cơ sở hạ tầng và các yêu cầu cụ thể của họ. Đây là một bài viết hay mô tả các công cụ sao lưu cho PostgreSQL ở nhiều cấp độ khác nhau.

Tôi sẽ không mô tả cách sử dụng các công cụ khác nhau trong blog này, vì thông tin này được ghi lại trong blog trên và cả trong các tài liệu chính thức cũng như các tài nguyên khác trên mạng. Nhưng tôi sẽ mô tả những ưu và khuyết điểm khi tôi trải nghiệm chúng trong thực tế. Trong blog này, chúng tôi đang giải quyết độc quyền các bản sao lưu PostgreSQL vật lý dựa trên PITR cổ điển phụ thuộc vào:

  • pg_basebackup hoặc pg_start_backup () / pg_stop_backup
  • bản sao thực
  • lưu trữ WAL hoặc sao chép trực tuyến

Có một số sản phẩm và giải pháp tốt, một số là mã nguồn mở và miễn phí để sử dụng trong khi những sản phẩm khác là thương mại. Theo hiểu biết tốt nhất của tôi, đó là:

  • pgbarman của 2ndquadrant (miễn phí)
  • pgbackrest (miễn phí)
  • pg_probackup bởi Postgres Professional (miễn phí)
  • BART của EDB (thương mại)

Tôi không có cơ hội dùng thử BART vì nó chạy trên các phiên bản Linux mà tôi không sử dụng. Trong blog này, tôi sẽ bao gồm những suy nghĩ và ấn tượng của riêng tôi trong khi tương tác với các tác giả / cộng đồng / người bảo trì tương ứng của mỗi giải pháp vì đây là một khía cạnh rất quan trọng thường bị đánh giá thấp ngay từ đầu. Một chút thuật ngữ để hiểu rõ hơn về các thuật ngữ khác nhau trong từng công cụ:

Thuật ngữ \ Công cụ nhân viên phục vụ pgbackrest pg_probackup
tên cho vị trí trang web dự phòng danh mục kho lưu trữ danh mục
tên cho cụm máy chủ khổ thơ phiên bản

pgbarman

Pgbarman hay chỉ barman là công cụ lâu đời nhất trong số những công cụ đó. Bản phát hành mới nhất là 2.6 (được phát hành trong khi tôi có blog này đang hoạt động! Đó là một tin tuyệt vời).

Pgbarman hỗ trợ sao lưu cơ sở thông qua hai phương pháp:

  • pg_basebackup (backup_method =postgres)
  • rsync (backup_method =rsync)

và chuyển WAL qua:

  • Lưu trữ WAL
    • qua rsync
    • qua barman-wal-archive / put-wal
  • WAL thông qua sao chép trực tuyến với vị trí sao chép
    • Không đồng bộ
    • Đồng bộ

Điều này cung cấp cho chúng tôi 8 trong số các kết hợp hộp mà chúng tôi có thể sử dụng barman. Mỗi thứ đều có ưu và nhược điểm.

Sao lưu cơ sở qua pg_basebackup (backup_method =postgres)

Ưu điểm:

  • cách mới nhất / hiện đại
  • dựa trên công nghệ PostgreSQL cốt lõi đã được kiểm chứng
  • do các tài liệu chính thức đề xuất

Nhược điểm:

  • không có sao lưu gia tăng
  • không có sao lưu song song
  • không nén mạng
  • không có dữ liệu trùng lặp
  • không có giới hạn băng thông mạng

Sao lưu cơ sở qua rsync (backup_method =rsync)

Ưu điểm:

  • cũ và đã được kiểm chứng
  • Sao lưu gia tăng
  • sao chép dữ liệu
  • nén mạng
  • sao lưu song song
  • giới hạn băng thông mạng

Nhược điểm:

  • không phải là cách được khuyến nghị (bởi các tác giả)

Chuyển WAL qua lưu trữ WAL (qua rsync)

Ưu điểm:

  • đơn giản hơn để thiết lập

Nhược điểm:

  • Không có RPO =0 (không mất dữ liệu)
  • không có cách nào để khôi phục sau các lỗi mạng lâu dài và liên tục

Chuyển WAL qua lưu trữ WAL (qua barman-wal-archive / put-wal)

Ưu điểm:

  • cách mới nhất và được đề xuất (được giới thiệu trong 2.6)
  • đáng tin cậy / an toàn hơn rsync

Nhược điểm:

  • Không có RPO =0 (không mất dữ liệu)
  • vẫn không có cách nào để khôi phục sau các lỗi mạng lâu dài và liên tục

Truyền WAL qua truyền trực tuyến WAL với vị trí sao chép (qua pg_receivewal)

Ưu điểm:

  • hiện đại hơn (và được khuyến nghị)
  • RPO =0 (không mất dữ liệu) ở chế độ đồng bộ

Nhược điểm:

  • luôn được kết hợp với vị trí sao chép. Có thể phát triển trong trường hợp mạng bị lỗi

Vì vậy, trong khi pg_basebackup (phương thức postgres) có vẻ như là tương lai cho pgbarman, trên thực tế, tất cả các tính năng ưa thích đều đi kèm với phương thức rsync. Vì vậy, hãy để chúng tôi liệt kê tất cả các tính năng của Barman chi tiết hơn:

  • Hoạt động từ xa (sao lưu / khôi phục)
  • Sao lưu tăng dần. Một trong những tính năng tuyệt vời của barman, các bản sao lưu gia tăng dựa trên sự so sánh cấp độ tệp của các tệp cơ sở dữ liệu với các bản sao lưu cuối cùng trong danh mục. Trong thuật ngữ barman đề cập đến một khái niệm khác:Theo thuật ngữ barman, một bản sao lưu khác biệt là bản sao lưu cuối cùng + những thay đổi riêng lẻ từ bản sao lưu cuối cùng. Các tài liệu của Barman nói rằng họ cung cấp các bản sao lưu khác biệt thông qua WAL. Các bản sao lưu gia tăng Barman hoạt động ở cấp độ tệp, có nghĩa là nếu một tệp được thay đổi, toàn bộ tệp sẽ được chuyển. Điều này giống như pgbackrest và không giống như một số dịch vụ khác như pg_probackup hoặc BART hỗ trợ sao lưu chênh lệch / gia tăng mức khối. Sao lưu gia tăng Barman được chỉ định qua: reuse_backup =liên kết hoặc sao chép. Bằng cách xác định "bản sao", chúng tôi giảm thời gian sao lưu vì chỉ các tệp đã thay đổi được chuyển và sao lưu nhưng vẫn không giảm dung lượng vì các tệp không thay đổi được sao chép từ bản sao lưu trước đó. Bằng cách xác định “liên kết” thì các tệp không thay đổi được liên kết cứng (không được sao chép) từ bản sao lưu cuối cùng. Bằng cách này, chúng tôi đạt được cả giảm thời gian và giảm không gian. Tôi không muốn gây thêm nhầm lẫn về vấn đề này, nhưng trên thực tế, các bản sao lưu gia tăng barman có thể so sánh trực tiếp với các bản sao lưu gia tăng pgbackrest, vì barman xử lý (thông qua liên kết hoặc bản sao) một bản sao lưu gia tăng hiệu quả như một bản sao lưu đầy đủ. Vì vậy, trong cả hai hệ thống, một bản sao lưu gia tăng xử lý các tệp đã được thay đổi kể từ lần sao lưu cuối cùng. Tuy nhiên, liên quan đến các bản sao lưu khác biệt, nó có nghĩa khác nhau trong mỗi hệ thống nói trên, như chúng ta sẽ thấy bên dưới.
  • Sao lưu từ chế độ chờ. Barman cung cấp tùy chọn để thực hiện phần lớn các hoạt động sao lưu cơ sở từ chế độ chờ, do đó giải phóng phần mềm chính khỏi tải IO được thêm vào. Tuy nhiên, lưu ý rằng WAL vẫn phải đến từ cơ sở chính. Không thành vấn đề nếu bạn sử dụng archive_command hoặc truyền trực tuyến WAL qua các khe tạo bản sao, bạn chưa thể (kể từ khi viết bài này với barman đang ở phiên bản 2.6) tải tác vụ này sang chế độ chờ.
  • công việc song song để sao lưu và phục hồi
  • Một tập hợp các cài đặt lưu giữ phong phú và toàn diện dựa trên:
    • Dự phòng (số lượng bản sao lưu cần giữ lại)
    • Cửa sổ khôi phục (nên giữ lại các bản sao lưu trong quá khứ như thế nào)
    Theo tôi từ góc độ người dùng, điều trên là tuyệt vời. Người dùng có thể xác định reuse_backup =link và một cửa sổ khôi phục và để barman (công việc cron của nó) giải quyết phần còn lại. Không có bản sao lưu khác / incr / đầy đủ, vv phải lo lắng về hoặc lên lịch hoặc quản lý. Hệ thống (nhân viên phục vụ) chỉ làm điều đúng một cách minh bạch.
  • Lập trình các tập lệnh hook sự kiện trước / sau của riêng bạn.
  • Ánh xạ lại vùng bảng

Đó là những điểm mạnh nhất của barman. Và thực sự thì con số này gần như nhiều hơn mức trung bình mà DBA yêu cầu từ một công cụ sao lưu và phục hồi. Tuy nhiên, có một số điểm có thể tốt hơn:

  • Danh sách gửi thư không hoạt động nhiều và những người bảo trì hiếm khi viết hoặc trả lời câu hỏi
  • Không có tính năng tiếp tục sao lưu không thành công / bị gián đoạn
  • Các khe sao chép hoặc việc sử dụng rsync / barman-wal-archive để lưu trữ không được tha thứ trong trường hợp mạng không thành công hoặc các lỗi khác của trang web sao lưu. Trong cả hai trường hợp, nếu sự cố mất mạng đủ lâu và những thay đổi trong DB có giá trị nhiều tệp WAL thì tệp chính sẽ bị “không còn dung lượng trên thiết bị” và cuối cùng sẽ bị sập. (không phải là một điều tốt). Điều hứa hẹn ở đây là barman hiện cung cấp một cách thay thế (sang rsync) để chuyển WAL để bảo vệ bổ sung chống lại ví dụ:Tính năng khai thác không gian pg_wal có thể được triển khai trong tương lai, cùng với lý lịch sao lưu sẽ thực sự khiến người thợ sửa xe trở nên hoàn hảo, ít nhất là đối với tôi.

pgbackrest

Pgbackrest là xu hướng hiện tại trong số các công cụ sao lưu mã nguồn mở, chủ yếu là do tính hiệu quả của nó để đối phó với khối lượng dữ liệu rất lớn và sự cẩn thận của người tạo ra nó trong việc xác nhận các bản sao lưu thông qua tổng kiểm tra. Kể từ khi viết bài này, nó là trên phiên bản v2.09 và tài liệu được tìm thấy ở đây. Hướng dẫn Sử dụng có thể hơi lỗi thời nhưng phần còn lại của tài liệu rất cập nhật và chính xác. Pgbackrest dựa vào việc lưu trữ WAL bằng cách sử dụng archive_command của chính nó và cơ chế truyền tệp của riêng nó, tốt hơn và an toàn hơn rsync. Vì vậy, pgbackrest là khá thuận lợi vì nó không cung cấp cho tập hợp các lựa chọn lớn hơn mà barman cung cấp. Vì không có chế độ đồng bộ liên quan, pgbackrest tự nhiên không đảm bảo RPO =0 (không mất dữ liệu). Hãy để chúng tôi mô tả các khái niệm của pgbackrest:

  • Một bản sao lưu có thể là:
    • Đầy đủ. Bản sao lưu đầy đủ sẽ sao chép toàn bộ cụm cơ sở dữ liệu.
    • Khác biệt (diff). Một bản sao lưu khác biệt chỉ sao chép các tệp đã được thay đổi kể từ lần sao lưu đầy đủ cuối cùng. Để khôi phục thành công, cả bản sao lưu khác biệt và bản sao lưu đầy đủ trước đó phải hợp lệ.
    • Tăng dần (incr). Một bản sao lưu gia tăng chỉ sao chép các tệp đã được thay đổi kể từ lần sao lưu cuối cùng (có thể là một bản sao lưu đầy đủ, một bản sao lưu khác biệt hoặc thậm chí một bản sao lưu gia tăng). Tương tự như sao lưu khác biệt, để khôi phục thành công, tất cả các bản sao lưu bắt buộc trước đó (bao gồm bản sao lưu này, bản sao lưu mới nhất và bản đầy đủ trước đó) phải hợp lệ.
  • Một đoạn thơ là định nghĩa của tất cả các tham số bắt buộc của một cụm PostgreSQL. Một máy chủ PostgreSQL bình thường có phần riêng của nó, trong khi các máy chủ sao lưu sẽ có một phần cho mỗi cụm PostgreSQL mà chúng sao lưu.
  • Cấu hình là nơi lưu giữ thông tin về khổ thơ (thường là /etc/pgbackrest.conf)
  • Kho lưu trữ là nơi pgbackrest giữ WAL và các bản sao lưu

Người dùng được khuyến khích làm theo tài liệu như chính tài liệu gợi ý, từ trên xuống dưới. Các tính năng quan trọng nhất của pgbackrest là:

  • Sao lưu và khôi phục song song
  • Không cần quyền truy cập SQL trực tiếp vào máy chủ PostgreSQL
  • Hoạt động cục bộ / từ xa
  • Giữ chân dựa trên:
    • lưu giữ bản sao lưu đầy đủ (số lượng bản sao lưu đầy đủ cần giữ lại)
    • lưu giữ bản sao lưu khác biệt (số lượng bản sao lưu khác biệt cần giữ lại)
    Các bản sao lưu gia tăng không có khả năng lưu giữ riêng và sẽ hết hạn ngay sau khi bản sao lưu trước đó hết hạn. Vì vậy, người dùng có thể xác định lịch trình để sao lưu toàn bộ và một loạt các bản sao lưu khác nhau giữa chúng.
  • Sao lưu từ chế độ chờ. Một số tệp vẫn cần đến từ tệp chính nhưng việc sao chép hàng loạt diễn ra ở chế độ chờ. WAL vẫn phải bắt nguồn từ chính.
  • Tính toàn vẹn của bản sao lưu. Những người đứng sau pgbackrest cực kỳ cẩn thận khi nói đến tính toàn vẹn của các bản sao lưu. Mỗi tệp được tổng kiểm tra tại thời điểm sao lưu và cũng được kiểm tra sau khi khôi phục để đảm bảo rằng không có lỗi phần cứng hoặc phần mềm có vấn đề nào có thể dẫn đến khôi phục bị lỗi. Ngoài ra, nếu tổng kiểm tra cấp độ trang được bật trên cụm PostgreSQL thì chúng cũng được tính cho từng tệp. Ngoài ra, tổng kiểm tra được tính cho mọi tệp WAL.
  • Nếu tính năng nén bị tắt và các liên kết cứng được bật, bạn có thể hiển thị cụm trực tiếp từ danh mục. Điều này cực kỳ quan trọng đối với cơ sở dữ liệu lớn nhiều TB.
  • Tiếp tục trở lại không thành công / bị gián đoạn. Rất hữu ích trong trường hợp mạng không đáng tin cậy.
  • Khôi phục Delta:Khôi phục cực nhanh cho cơ sở dữ liệu lớn mà không cần làm sạch toàn bộ cụm.
  • Đẩy WAL không đồng bộ &song song đến máy chủ dự phòng. Đây là một trong những điểm mạnh nhất của pgbackrest. Trình lưu trữ PostgreSQL chỉ sao chép vào bộ đệm thông qua lưu trữ đẩy và công việc nặng nhọc của việc chuyển và xử lý diễn ra trong một quy trình pgbackrest riêng biệt. Điều này cho phép chuyển WAL lớn mà vẫn đảm bảo thời gian phản hồi PostgreSQL thấp.
  • Ánh xạ lại vùng bảng
  • Hỗ trợ Amazon S3
  • Hỗ trợ kích thước hàng đợi WAL tối đa. Khi trang web sao lưu gặp sự cố hoặc mạng không thành công, việc sử dụng tùy chọn này sẽ giống như việc lưu trữ thành công, cho phép PostgreSQL xóa WAL ngăn chặn việc lấp đầy pg_wal và do đó lưu máy chủ pgsql khỏi một PANIC tiềm năng.

Vì vậy, pgbackrest thông minh về tính năng đặt rất nhiều trọng tâm khi nói đến xác thực và hiệu suất dữ liệu, không có gì ngạc nhiên khi nó được sử dụng bởi các cài đặt PostgreSQL lớn nhất và bận rộn nhất. Tuy nhiên, có một điều có thể được cải thiện:

  • Sẽ thực sự hữu ích nếu có tùy chọn “tự do” hơn khi có liên quan đến việc lưu giữ, tức là cung cấp một cách để khai báo chỉ định một số khoảng thời gian lưu giữ và sau đó để pgbackrest xử lý các bản sao lưu đầy đủ / diff / incr nếu cần.
Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thức

pg_probackup

Pg_proback là một công cụ đầy hứa hẹn khác để sao lưu. Nó ban đầu dựa trên pg_arman. Sự nhấn mạnh của nó là về hiệu suất của bản sao lưu. Nó dựa trên danh mục và các phiên bản, rất giống với phần còn lại của các công cụ, vì vậy chúng tôi có. Các tính năng chính của nó bao gồm:

  • Hỗ trợ cấp độ sao lưu phong phú từ:
    • Bản sao lưu đầy đủ
    • Gia tăng của ba loại:
      • Sao lưu PAGE. Thay đổi cấp độ được tìm thấy thông qua quét WAL. Yêu cầu toàn quyền truy cập vào chuỗi WAL không bị gián đoạn kể từ lần sao lưu trước.
      • Sao lưu DELTA. Chỉ các trang đã thay đổi được sao chép vào bản sao lưu. Độc lập với lưu trữ WAL, đặt một số tải nhất định lên máy chủ.
      • Sao lưu PTRACK. Yêu cầu bản vá lõi pgsql đặc biệt. Hoạt động bằng cách duy trì một bitmap ngay sau khi các trang được sửa đổi. Sao lưu thực sự nhanh chóng với tải tối thiểu trên máy chủ.
  • Các bản sao lưu cũng có thể được chia thành:
    • Sao lưu tự động. Không có yêu cầu nào về WAL bên ngoài bản sao lưu. Không có PITR.
    • Lưu trữ các bản sao lưu. Những thứ này dựa vào tính năng lưu trữ liên tục và hỗ trợ PITR.
  • mô hình đa luồng (trái ngược với barman, pgbackrest và tất nhiên là bản thân PostgreSQL tuân theo mô hình đa xử lý)
  • Dữ liệu nhất quán và xác thực theo yêu cầu mà không cần khôi phục
  • Sao lưu từ chế độ chờ mà không cần truy cập vào thiết bị chính.
  • Đặc tả chính sách lưu giữ rõ ràng trong đó dự phòng có thể được sử dụng theo kiểu AND cùng với cửa sổ. Việc hợp nhất các bản sao lưu (thông qua hợp nhất) được hỗ trợ bằng cách chuyển đổi các bản sao lưu gia tăng trước đó thành đầy đủ như một cách để giải phóng dung lượng và cung cấp một phương pháp để xoay vòng sao lưu suôn sẻ.

Vì vậy, pg_probackup cung cấp một tập hợp các tính năng tuyệt vời với sự nhấn mạnh vào hiệu suất, điều gì đó sẽ mang lại lợi ích cho các cài đặt lớn. Tuy nhiên, vẫn còn thiếu một số thứ, đó là:

  • Không có bản phát hành chính thức nào hỗ trợ sao lưu từ xa. Điều này có nghĩa là pg_probackup phải chạy trên cùng một máy chủ lưu trữ như cụm pgsql. (Có một chi nhánh nhà phát triển giải quyết việc sao lưu từ một trang web từ xa cũng như lưu trữ vào một máy chủ sao lưu từ xa)
  • Không hỗ trợ cho một bản tiếp tục sao lưu không thành công.

Chúng ta có thể tóm tắt các đoạn văn trên bằng một ma trận tính năng như bên dưới.

Các bản sao lưu
Tính năng \ Công cụ pgbarman pgbackrest pg_probackup
Không mất dữ liệu KHÔNG KHÔNG
Thao tác từ xa KHÔNG
bản sao tệp pg_basebackup hoặc

rsync

pgbackrest qua ssh pg_probackup
WAL thông qua lưu trữ
Phương pháp lưu trữ WAL rsync,

barman-wal-archive

pgbackrest archive-push pg_probackup archive-push
Lưu trữ WAL không đồng bộ KHÔNG KHÔNG
WAL qua phát trực tuyến KHÔNG CÓ (chỉ dành cho tự chủ)
Phát trực tuyến đồng bộ KHÔNG KHÔNG
sao lưu từ chế độ chờ
WALs từ chế độ chờ KHÔNG KHÔNG
sao lưu độc quyền từ chế độ chờ KHÔNG KHÔNG
các bản sao lưu khác (từ bản đầy đủ cuối cùng) CÓ (thông qua hợp nhất)
incr (từ bản sao lưu cuối cùng)

(tương tự như trên)

xoay vòng sao lưu trong suốt KHÔNG
so sánh dựa trên tệp KHÔNG
thay đổi cấp khối KHÔNG KHÔNG
sao lưu / khôi phục song song

(thông qua chủ đề)

Tiếp tục sao lưu không thành công KHÔNG KHÔNG
Khả năng phục hồi khi lỗi mạng / trang khôi phục (liên quan đến pg_wal) KHÔNG KHÔNG
ánh xạ lại không gian bảng
tỷ lệ giữ chân dựa trên Dự phòng HOẶC Cửa sổ Dự phòng đầy đủ và / hoặc chênh lệch Dự phòng VÀ Cửa sổ
Trợ giúp từ cộng đồng / người bảo trì / tác giả Kém Tuyệt vời Rất tốt

ClusterControl

ClusterControl cung cấp chức năng tạo bản sao lưu ngay lập tức hoặc lên lịch cho một bản sao lưu và tự động hóa tác vụ theo cách đơn giản và nhanh chóng.

Chúng ta có thể chọn giữa hai phương pháp sao lưu, pgdump (logic) và pg_basebackup (nhị phân). Chúng tôi cũng có thể chỉ định nơi lưu trữ các bản sao lưu (trên máy chủ cơ sở dữ liệu, trên máy chủ ClusterControl hoặc trong đám mây), mức độ nén và mã hóa.

Ngoài ra, với ClusterControl, chúng tôi có thể sử dụng tính năng Khôi phục điểm trong thời gian và xác minh sao lưu để xác thực bản sao lưu đã tạo.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xóa các hàng trùng lặp (không xóa tất cả các hàng trùng lặp)

  2. Tổng quan về PostgreSQL Query Caching &Load Balancing

  3. Cách cài đặt PostgreSQL 12 trên Ubuntu 20.04 / 18.04 / 16.04

  4. Cách được khuyến nghị nhất để lưu trữ thời gian trong PostgreSQL bằng Java là gì?

  5. XMLTABLE trong PostgreSQL