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

Cách giảm thiểu RPO cho cơ sở dữ liệu PostgreSQL của bạn bằng cách sử dụng phục hồi tại thời điểm

Trong kế hoạch khôi phục sau thảm họa, Mục tiêu Điểm khôi phục (RPO) của bạn là một tham số khôi phục quan trọng cho biết bạn có thể mất bao nhiêu dữ liệu. RPO được liệt kê theo thời gian, từ giây đến ngày. Về mặt hiệu quả, RPO phụ thuộc trực tiếp vào hệ thống sao lưu của bạn. Nó đánh dấu tuổi dữ liệu sao lưu của bạn mà bạn phải khôi phục để tiếp tục hoạt động bình thường.

Nếu bạn thực hiện sao lưu hàng đêm lúc 10 giờ tối. và hệ thống cơ sở dữ liệu của bạn gặp sự cố không thể sửa chữa lúc 3 giờ chiều. vào ngày hôm sau, bạn sẽ mất mọi thứ đã được thay đổi kể từ lần sao lưu cuối cùng của bạn. RPO của bạn trong bối cảnh cụ thể này là bản sao lưu của ngày hôm trước, có nghĩa là bạn có thể đủ khả năng để mất những thay đổi đáng giá trong một ngày.

Sơ đồ dưới đây từ Sách trắng về Khôi phục sau thảm họa của chúng tôi minh họa khái niệm này.

Đối với RPO chặt chẽ hơn, một bản sao lưu có thể không đủ. Khi sao lưu cơ sở dữ liệu của bạn, bạn thực sự đang chụp nhanh dữ liệu tại một thời điểm nhất định. Vì vậy, khi bạn đang khôi phục một bản sao lưu, bạn sẽ bỏ lỡ những thay đổi đã xảy ra giữa lần sao lưu cuối cùng và lần thất bại.

Đây là nơi xuất hiện khái niệm Khôi phục thời gian trong thời gian ngắn (PITR).

PITR là gì?

Point In Time Recovery (PITR), như tên gọi, liên quan đến việc khôi phục cơ sở dữ liệu tại bất kỳ thời điểm nào trong quá khứ. Để có thể thực hiện việc này, chúng tôi sẽ cần khôi phục một bản sao lưu và sau đó áp dụng tất cả các thay đổi đã xảy ra sau bản sao lưu cho đến ngay trước khi xảy ra lỗi.

Đối với PostgreSQL, các thay đổi được lưu trữ trong nhật ký WAL (để biết thêm chi tiết về WAL và dữ liệu chúng lưu trữ, bạn có thể xem blog này).

Vì vậy, có hai điều chúng ta cần đảm bảo để có thể thực hiện PITR:Bản sao lưu và WAL (chúng ta cần thiết lập lưu trữ liên tục cho chúng).

Để thực hiện PITR, chúng tôi sẽ cần khôi phục bản sao lưu và sau đó áp dụng WAL.

Khi nào nó có thể hữu ích?

Bạn có thể sử dụng chiến lược này bất cứ khi nào bạn đang khôi phục từ sự cố khiến dữ liệu bị hỏng. Bạn cần lưu ý rằng bạn đang cố gắng giảm thiểu việc mất dữ liệu, nhưng có một số vấn đề có thể khiến dữ liệu không còn hữu ích sau đó.

Một số ví dụ về điều này có thể là sửa đổi dữ liệu ngoài kế hoạch (DML hoặc DDL), lỗi phương tiện hoặc bảo trì cơ sở dữ liệu (như nâng cấp) dẫn đến hỏng dữ liệu. Bạn sẽ không thể khôi phục các thay đổi dữ liệu đã xảy ra sau sự cố.

Giả sử một người dùng đã thực hiện sai một DML, làm cho dữ liệu của toàn bộ bảng bị thay đổi hoặc xóa sai. Bạn có thể thực hiện PITR của cơ sở dữ liệu ở một vị trí riêng và sau đó xuất nội dung của bảng. Sau đó, bạn có thể khôi phục bảng đó vào cơ sở dữ liệu hiện có, quay trở lại một cách hiệu quả về bản sao của bảng trước khi sự cố xảy ra.

Tất nhiên, không phải lúc nào cũng có thể khôi phục chỉ một phần cơ sở dữ liệu theo cách này, vì vậy trong trường hợp đó, bạn sẽ cần phải khôi phục tất cả cơ sở dữ liệu về một điểm nhất định và sẽ có một mất mát dữ liệu tối thiểu nhưng không thể tránh khỏi (bạn sẽ bỏ lỡ bất kỳ thay đổi nào đã xảy ra sau khi sự cố xảy ra).

Làm cách nào để sử dụng nó với ClusterControl?

Trong blog trước, chúng ta có thể thấy cách triển khai PITR theo cách thủ công, bây giờ hãy xem cách sử dụng ClusterControl để thực hiện tác vụ này.

Thời điểm kích hoạt khôi phục

Để bật tính năng PITR, chúng ta phải bật tính năng Lưu trữ WAL. Đối với điều này, chúng ta có thể vào ClusterControl -> Chọn PostgreSQL Cluster -> Node action -> Enable WAL Archiving, hoặc chỉ cần vào ClusterControl -> Chọn PostgreSQL Cluster -> Backup -> Settings và kích hoạt tùy chọn “Enable Point-In-Time Recovery (WAL Archiving) ”như chúng ta sẽ thấy trong hình ảnh sau đây.

Chúng ta phải ghi nhớ rằng để kích hoạt Lưu trữ WAL, chúng ta phải khởi động lại cơ sở dữ liệu của mình. ClusterControl cũng có thể làm điều này cho chúng tôi.

Ngoài các tùy chọn chung cho tất cả các bản sao lưu như “Thư mục sao lưu” và “Khoảng thời gian lưu giữ bản sao lưu”, tại đây chúng tôi cũng có thể chỉ định Khoảng thời gian lưu giữ WAL. Theo mặc định là 0, có nghĩa là mãi mãi.

Để xác nhận rằng chúng tôi đã bật tính năng Lưu trữ WAL, chúng tôi có thể chọn nút Chính trong ClusterControl -> Chọn Cụm PostgreSQL -> Nút và chúng ta sẽ thấy thông báo Đã bật Lưu trữ WAL, như chúng ta có thể thấy trong hình ảnh sau.

Tạo bản sao lưu tương thích với khôi phục tại chỗ

Khi bật tính năng Lưu trữ WAL, như chúng ta đã thấy ở bước trước, chúng ta có thể tạo bản sao lưu tương thích với PITR. Đối với điều này, hãy truy cập ClusterControl -> Chọn PostgreSQL Cluster -> Backup -> Create Backup.

Chúng tôi có thể tạo một bản sao lưu mới hoặc định cấu hình một bản sao lưu đã lên lịch. Đối với ví dụ của chúng tôi, chúng tôi sẽ tạo một bản sao lưu duy nhất ngay lập tức.

Ở đây chúng ta phải chọn phương thức “pg_basebackup”, tương thích với PITR, máy chủ mà từ đó bản sao lưu sẽ được lấy (để tương thích với PITR, nó phải là bản chính) và nơi chúng ta muốn lưu trữ bản sao lưu. Chúng tôi cũng có thể tải bản sao lưu của mình lên đám mây (AWS, Google hoặc Azure) bằng cách bật nút tương ứng.

Sau đó, chúng tôi chỉ định việc sử dụng nén, mã hóa và lưu giữ bản sao lưu của chúng tôi.

Trên phần sao lưu, chúng ta có thể thấy tiến trình của quá trình sao lưu và thông tin như phương pháp, kích thước, vị trí và hơn thế nữa.

Khôi phục điểm trong thời gian từ bản sao lưu

Sau khi sao lưu xong, chúng tôi có thể khôi phục nó bằng cách sử dụng tính năng ClusterControl PITR. Đối với điều này, trong phần sao lưu của chúng tôi (ClusterControl -> Chọn Cụm PostgreSQL -> Sao lưu), chúng tôi có thể chọn "Khôi phục bản sao lưu" hoặc trực tiếp "Khôi phục" trên bản sao lưu mà chúng tôi muốn khôi phục.

Tại đây, chúng tôi chọn bản sao lưu mà chúng tôi muốn khôi phục và từ thư mục nào.

Chúng tôi để tùy chọn “Khôi phục trên nút” được chọn và tiếp tục.

Bây giờ chúng ta phải chọn nơi để khôi phục bản sao lưu của mình và kích hoạt tùy chọn PITR. Bằng cách chỉ định thời gian, đó sẽ là thời gian cho đến khi chúng tôi phục hồi. Lưu ý rằng múi giờ UTC được sử dụng và dịch vụ PostgreSQL của chúng tôi trong bản chính sẽ được khởi động lại.

Chúng tôi có thể theo dõi tiến trình khôi phục của mình từ phần Hoạt động trong ClusterControl của chúng tôi.

Kết luận

PITR là một tính năng cần thiết để đáp ứng RPO chặt chẽ. Chúng ta cần thiết lập nó một cách chính xác để đảm bảo một kế hoạch khắc phục thảm họa chính xác. ClusterControl cung cấp một giao diện dễ sử dụng để giúp bạn triển khai PITR cho cơ sở dữ liệu PostgreSQL của mình.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hành tinh PostgreSQL trong Thiên hà Ansible

  2. Cách thanh lịch nhất để lưu trữ dấu thời gian với nanosec trong postgresql là gì?

  3. Số sê-ri trên mỗi nhóm hàng cho khóa ghép

  4. postgres đổi tên cơ sở dữ liệu không hoạt động

  5. PostgreSQL:Thời gian tạo bảng