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

Barman Cloud - Phần 1:WAL Archive

Mở đầu

Có bao nhiêu người dùng Barman hiện tại đã nghĩ đến việc lưu các bản sao lưu ở một điểm đến từ xa trên đám mây? Có bao nhiêu người đã nghĩ đến việc lấy bản sao lưu đó trực tiếp từ chính máy chủ PostgreSQL?

Chà, kể từ Barman 2.10 điều này hiện có thể thực hiện được!
Làm thế nào?
Hãy cùng nhau khám phá điều đó trong các bài viết sau.

Yêu cầu

Hai bài viết sau đây là phần giới thiệu thiết thực về barman-cloud-wal-archive mới và barman-cloud-backup các công cụ được thêm vào barman-cli gói.
Phần đầu tiên sẽ bao gồm barman-cloud-wal-archive trong khi lệnh thứ hai sẽ bao gồm barman-cloud-backup lệnh.
Người đọc cần có kiến ​​thức cơ bản về các phương pháp lưu trữ và sao lưu PostgreSQL WAL và Barman. Bạn cũng nên biết về các công nghệ đám mây cho các giải pháp lưu trữ như Amazon S3.

Lưu trữ WAL

Barman đã hoạt động như một kho lưu trữ WAL từ xa trong nhiều năm và gói Barman CLI đã được thiết kế để mở rộng độ tin cậy và mạnh mẽ của kho lưu trữ ở phía PostgreSQL. Thực tế barman-cli cung cấp các tập lệnh như barman-wal-restore cho phép một nút chờ khôi phục các tệp WAL một cách thông minh và an toàn từ kho lưu trữ Barman thông qua restore_command trong postgresql.auto.conf tệp (hoặc recovery.conf tệp cho đến khi PostgreSQL 12) và barman-wal-archive để lưu trữ các tệp WAL từ một nút chính vào Barman thông qua archive_command tham số được định cấu hình trong postgresql.conf tệp.

Kho lưu trữ Cloud WAL

Nhờ phản hồi của người dùng, các nhà phát triển Barman đã giới thiệu hai công cụ mới trong phiên bản 2.10 :

  • barman-cloud-wal-archive
  • barman-cloud-backup

Phiên bản 2.11 sẽ bao gồm hai công cụ bổ sung để khôi phục, được gọi là barman-cloud-wal-restorebarman-cloud-restore .
Bài đăng này hoàn toàn dành riêng cho barman-cloud-wal-archive , có thể lưu trữ tệp WAL trên đám mây, cho phép lưu trữ nhiều tầng với Barman và mở rộng chính sách lưu giữ bản sao lưu.
Thật vậy, barman-cloud-wal-archive có thể được sử dụng như một hook-script định cấu hình pre_archive_retry_script trong Barman, để sao chép tệp WAL trong bộ lưu trữ đám mây đã định cấu hình, tăng khả năng dự phòng của tệp lưu trữ và giúp bạn có thể chọn chính sách lưu giữ lâu hơn chính sách của Barman.

Đó không phải là tất cả!

barman-cloud-wal-archive có thể thay thế barman-wal-archive trong archive_command , để lưu trữ trực tiếp các tệp WAL trên đám mây, thay vì sao chép chúng vào máy chủ Barman. Bằng cách này, ngay cả một cụm PostgreSQL không có máy chủ sao lưu chuyên dụng riêng cũng có thể dựa vào dịch vụ lưu trữ từ xa để lưu trữ các tệp WAL.

Nó hoạt động như thế nào?

Các hướng dẫn sau chỉ để cài đặt và định cấu hình barman-cloud-wal-archive dưới dạng archive_command trong PostgreSQL.
Trước tiên, hãy quyết định nơi lưu trữ các tệp WAL. Trong bài viết này, chúng tôi sẽ sử dụng Amazon S3, đây là công nghệ duy nhất được hỗ trợ. Mặc dù các công nghệ khác hỗ trợ API giống S3 (Google Cloud, DigitalOcean, Microsoft Azure, v.v.) có thể hoạt động với thư viện boto3, chúng vẫn chưa được thử nghiệm.

Yêu cầu

  1. barman-cli 2.10 (hoặc cao hơn)
  2. Tài khoản Amazon AWS
  3. awscli
  4. Nhóm S3
  5. Một phiên bản PostgreSQL

Trong bài viết này, chúng tôi sẽ kiểm tra Barman CLI trong một máy ảo có Debian Buster PostgreSQL 12 đã được thiết lập và đang chạy.

Cài đặt

    1. Cài đặt kho lưu trữ Công cộng 2ndQuadrant
    2. Cài đặt gói barman-cli
      [email protected]:~# apt update
      [email protected]:~# apt install barman-cli
    3. Cài đặt awscli
      [email protected]:~# apt install awscli

    Cấu hình và thiết lập

    Hãy đọc hướng dẫn sử dụng:

    [email protected]:~$ man barman-cloud-wal-archive
    [...]
    SYNOPSIS
        barman-cloud-wal-archive [OPTIONS] DESTINATION_URL SERVER_NAME WAL_PATH
    [...]
    POSITIONAL ARGUMENTS
    
        DESTINATION_URL
        URL  of the cloud destination, such as a bucket in AWS S3.
        For example: s3://BUCKET_NAME/path/to/folder (where BUCKET_NAME is the bucket you have created in AWS).
    
        SERVER_NAME
        the name of the server as configured in Barman.
    
        WAL_PATH
        the value of the `%p' keyword (according to `archive_command').
    [...]
    

    Vì vậy, để sử dụng đúng cách, chúng ta chỉ cần định cấu hình thông tin đăng nhập AWS với awscli công cụ làm postgres người dùng, sao chép Khóa truy cập và Khóa bí mật đã tạo trước đó trong phần IAM trong bảng điều khiển AWS:

    [email protected]:~$ aws configure --profile barman-cloud
    AWS Access Key ID [None]: AKI*****************
    AWS Secret Access Key [None]: ****************************************
    Default region name [None]: eu-west-1
    Default output format [None]: json
    

    Đảm bảo có sẵn nhóm S3 trên AWS. Tôi đã chọn gọi nó là barman-s3-test để làm rõ điều đó.
    Bây giờ chúng ta có thể kiểm tra barman-cloud-wal-archive lệnh:

    [email protected]:~$ barman-cloud-wal-archive -t -P barman-cloud s3://barman-s3-test/ pg12 /var/lib/postgresql/12/main/pg_wal/000000010000000000000001
    [email protected]:~$ echo $?
    0
    

    Trạng thái thoát xác nhận rằng lệnh đã thành công. Bây giờ chúng ta có thể thêm dòng sau vào cuối tệp cấu hình PostgreSQL và khởi động lại phiên bản:
    archive_mode = on

    [email protected]:~# systemctl restart [email protected]
    

    Vì dữ liệu của chúng tôi sẽ được sao chép trong bộ lưu trữ từ xa, ngoài tầm kiểm soát của chúng tôi, nên điều quan trọng là chúng tôi phải lưu trữ chúng ở dạng nén được mã hóa . barman-cloud-wal-archive lệnh hỗ trợ hai phương pháp khác nhau để nén:

    [email protected]:~$ barman-cloud-wal-archive --help
    [...]
        -z, --gzip            gzip-compress the WAL while uploading to the cloud
        -j, --bzip2           bzip2-compress the WAL while uploading to the cloud
        -e ENCRYPTION, --encryption ENCRYPTION
                              Enable server-side encryption for the transfer.
                              Allowed values: 'AES256', 'aws:kms'
    [...]
    

    Tùy chọn mã hóa sẽ chỉ thông báo cho nhóm S3 sử dụng phương pháp nào để lưu trữ dữ liệu được mã hóa. Dữ liệu được mã hóa không thể được đọc bởi bất kỳ người dùng AWS nào khác ngoài chủ sở hữu của nhóm. Đám mây Barman không mã hóa bất kỳ đối tượng nào trước khi gửi đến S3, nó chỉ yêu cầu nhóm lưu trữ chúng được mã hóa nếu S3 đã được định cấu hình đúng cách. Tuy nhiên, mọi kết nối tới S3 đều được thiết lập an toàn qua https .

    Hãy thêm dòng sau vào cuối postgresql.conf tệp:

    archive_command = 'barman-cloud-wal-archive -P barman-cloud -e AES256 -j s3://barman-s3-test/ pg12 %p'

    Lần này, chỉ cần tải lại cấu hình là đủ để áp dụng các thay đổi mới:

    [email protected]:~$ psql -c “SELECT pg_reload_conf()”
    

    Để kiểm tra xem archive_command mới có hoạt động hay không, PostgreSQL phải tạo ra các tệp WAL để lưu trữ, do đó chúng tôi phải tạo một số lưu lượng truy cập với sự trợ giúp của pgbench công cụ:

    [email protected]:~$ createdb pg_bench_db
    [email protected]:~$ pgbench -i -s10 pg_bench_db
    
    [some irrelevant output here]
    
    [email protected]:~$ pgbench -c 10 -j 2 -T 30 pg_bench_db
    starting vacuum...end.
    transaction type: <builtin: TPC-B (sort of)>
    scaling factor: 10
    query mode: simple
    number of clients: 10
    number of threads: 2
    duration: 30 s
    number of transactions actually processed: 84501
    latency average = 3.552 ms
    tps = 2815.224687 (including connections establishing)
    tps = 2815.427535 (excluding connections establishing)
    

    Tại thời điểm này, chúng ta sẽ thấy các tệp WAL được lưu trữ trong nhóm S3. Hãy kiểm tra nó, xây dựng đường dẫn đích với tên máy chủ và thư mục đích WAL:

    [email protected]:~$ aws s3 --profile barman-cloud ls s3://barman-s3-test/pg12/wals/
                            PRE 0000000100000000/
    

    Hãy xem bên trong thư mục 0000000100000000:

    [email protected]:~$ aws s3 --profile barman-cloud ls s3://barman-s3-test/pg12/wals/0000000100000000/
    2020-01-08 08:20:54    1624168 000000010000000000000001.bz2
    2020-01-08 08:21:00     293422 000000010000000000000002.bz2
    2020-01-08 08:21:06     301934 000000010000000000000003.bz2
    2020-01-08 08:21:11     295648 000000010000000000000004.bz2
    2020-01-08 08:21:16     293675 000000010000000000000005.bz2
    2020-01-08 08:21:21     299348 000000010000000000000006.bz2
    2020-01-08 08:21:27     551249 000000010000000000000007.bz2
    2020-01-08 08:21:33     976523 000000010000000000000008.bz2
    2020-01-08 08:21:37    4542104 000000010000000000000009.bz2
    2020-01-08 08:21:46    5052693 00000001000000000000000A.bz2
    

    Tuyệt vời!

    Các tệp WAL đang được nén trước khi được tải lên bộ chứa S3 và được lưu trữ mã hóa, giúp chúng tôi tiết kiệm dung lượng (và tiền bạc) và tăng mức độ bảo mật cho dữ liệu của chúng tôi.

    Kết luận

    barman-cloud-wal-archive là những gì người dùng đã chờ đợi từ lâu.

    Nếu bạn là một trong những người đã sử dụng pre_archive_retry_script để triển khai tập lệnh tùy chỉnh để tải tệp WAL lên bộ chứa S3, sau đó tập lệnh này có thể được sử dụng như một sự thay thế tốt hơn vì nó được phát triển và duy trì bởi các nhà phát triển Barman, đồng thời được kiểm tra và phân phối bởi hệ thống Phân phối liên tục 2ndQuadrant.

    Trong trường hợp bạn chưa nghĩ đến, điều này sẽ mở ra các chính sách lưu giữ mới có thể lâu hơn cho lưu trữ trên đám mây so với các chính sách cục bộ của Barman, tăng tuổi của đối tượng trên đám mây, đồng thời tiết kiệm dung lượng trên bộ lưu trữ cục bộ, bằng cách thiết lập đúng chính sách lưu giữ lâu hơn trong cấu hình nhóm S3.

    Nếu không, nó có thể được sử dụng như chúng tôi đã làm trong bài viết này, để lưu trữ tệp WAL trực tiếp từ máy chủ PostgreSQL. Mặc dù điều này loại bỏ một bước trung gian, nhưng RPO tăng so với phương pháp phát trực tuyến, vì PostgreSQL sẽ chỉ lưu trữ tệp WAL sau khi đã đóng nó. Do đó, trong trường hợp có sự cố trên nút PostgreSQL, chúng tôi có thể mất một số thay đổi. Khi có thể, chúng tôi khuyên bạn nên triển khai phương pháp này cùng với việc truyền trực tuyến tới máy chủ Barman để đạt được RPO =0 (với tính năng phát trực tuyến đồng bộ).

    Giờ đây, chúng tôi đã có một hệ thống lưu trữ liên tục, chúng tôi có thể thực hiện sao lưu đám mây đầu tiên của mình sử dụng barman-cloud-backup công cụ.

    Hẹn gặp lại các bạn ở phần 2 của bài viết.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. psycopg2 tương đương với mysqldb.escape_string?

  2. Cách truy vấn mảng jsonb bằng toán tử IN

  3. Cách thoát ký tự dấu chấm hỏi (?) Với Spring JpaRepository

  4. ver.2 LỖI PyGreSQL:from _pg import * ImportError:DLL load failed:Không tìm thấy mô-đun được chỉ định

  5. HikariCP - kết nối không khả dụng