PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Barman Cloud – Bagian 1:Arsip WAL

Pembukaan

Berapa banyak pengguna Barman saat ini yang berpikir untuk menyimpan cadangan di tujuan jarak jauh di cloud? Berapa banyak yang berpikir untuk mengambil cadangan itu langsung dari server PostgreSQL itu sendiri?

Nah, sejak Barman 2.10 sekarang ini mungkin!
Bagaimana caranya?
Mari kita temukan bersama dalam artikel berikut.

Persyaratan

Dua artikel berikut dimaksudkan sebagai pengantar praktis untuk barman-cloud-wal-archive yang baru dan barman-cloud-backup alat ditambahkan di barman-cli package.
Bagian pertama akan membahas barman-cloud-wal-archive perintah sementara yang kedua akan mencakup barman-cloud-backup perintah.
Pembaca memerlukan pengetahuan dasar tentang metode pengarsipan dan pencadangan PostgreSQL WAL, dan Barman. Anda juga disarankan untuk mengetahui teknologi cloud untuk solusi penyimpanan seperti Amazon S3.

Arsip WAL

Barman telah bertindak sebagai arsip WAL jarak jauh selama bertahun-tahun, dan paket CLI Barman telah dirancang untuk meningkatkan keandalan dan ketahanan pengarsipan di sisi PostgreSQL. Sebenarnya barman-cli menyediakan skrip seperti barman-wal-restore memungkinkan node siaga untuk secara cerdas dan aman memulihkan file WAL dari arsip Barman melalui restore_command parameter di postgresql.auto.conf file (atau recovery.conf file hingga PostgreSQL 12), dan barman-wal-archive untuk mengarsipkan file WAL dari node master ke Barman melalui archive_command parameter yang dikonfigurasi di postgresql.conf berkas.

Arsip Cloud WAL

Berkat umpan balik pengguna, pengembang Barman telah memperkenalkan dua alat baru di versi 2.10 :

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

Versi 2.11 akan menyertakan dua alat tambahan untuk pemulihan, yang disebut barman-cloud-wal-restore dan barman-cloud-restore .
Pos ini sepenuhnya didedikasikan untuk barman-cloud-wal-archive , yang dapat menyimpan file WAL di cloud, mengaktifkan pengarsipan multi-tingkat dengan Barman, dan memperluas kebijakan penyimpanan cadangan.
Memang, barman-cloud-wal-archive dapat digunakan sebagai skrip kait yang mengonfigurasi pre_archive_retry_script di Barman, untuk menyalin file WAL di penyimpanan cloud yang dikonfigurasi, meningkatkan redundansi arsip, dan memungkinkan untuk memilih kebijakan penyimpanan yang lebih lama daripada kebijakan Barman.

Bukan itu saja!

barman-cloud-wal-archive dapat menggantikan barman-wal-archive perintah di archive_command parameter, untuk langsung mengarsipkan file WAL di cloud, alih-alih menyalinnya ke server Barman. Dengan cara ini, bahkan cluster PostgreSQL yang tidak memiliki server cadangan khusus yang terpisah dapat mengandalkan layanan penyimpanan jarak jauh untuk mengarsipkan file WAL.

Bagaimana cara kerjanya?

Petunjuk berikut hanya untuk menginstal dan mengkonfigurasi barman-cloud-wal-archive sebagai archive_command di PostgreSQL.
Pertama, tentukan tempat untuk mengarsipkan file WAL. Dalam artikel ini kita akan menggunakan Amazon S3, yang saat ini merupakan satu-satunya teknologi yang didukung. Meskipun teknologi lain yang mendukung API mirip S3 (Google Cloud, DigitalOcean, Microsoft Azure, dll.) dapat bekerja dengan pustaka boto3, mereka belum diuji.

Persyaratan

  1. barman-cli 2.10 (atau lebih tinggi)
  2. Akun Amazon AWS
  3. awscli
  4. Ember S3
  5. Contoh PostgreSQL

Pada artikel ini kita akan menguji Barman CLI dalam mesin virtual dengan Debian Buster dan PostgreSQL 12 yang sudah aktif dan berjalan.

Pemasangan

    1. Instal repositori Publik Kuadran ke-2
    2. Instal paket barman-cli
      [email protected]:~# apt update
      [email protected]:~# apt install barman-cli
    3. Instal awscli
      [email protected]:~# apt install awscli

    Konfigurasi dan penyiapan

    Mari baca manualnya:

    [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').
    [...]
    

    Jadi, untuk menggunakannya dengan benar, kita hanya perlu mengonfigurasi kredensial AWS dengan awscli alat sebagai postgres pengguna, menyalin Kunci Akses dan Kunci Rahasia yang sebelumnya dibuat di bagian IAM di konsol 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
    

    Pastikan untuk memiliki bucket S3 yang tersedia di AWS. Saya memilih untuk menyebutnya barman-s3-test untuk memperjelasnya.
    Sekarang kita dapat menguji barman-cloud-wal-archive perintah:

    [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
    

    Status keluar mengonfirmasi bahwa perintah berhasil. Kita sekarang dapat menambahkan baris berikut di bagian bawah file konfigurasi PostgreSQL dan memulai ulang instance:
    archive_mode = on

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

    Karena data kami akan disalin dalam penyimpanan jarak jauh, di luar kendali kami, penting bagi kami untuk menyimpannya dikompresi dan dienkripsi . barman-cloud-wal-archive perintah mendukung dua metode berbeda untuk kompresi:

    [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'
    [...]
    

    Opsi enkripsi hanya akan memberi tahu ember S3 metode mana yang digunakan untuk menyimpan data yang dienkripsi. Data terenkripsi tidak dapat dibaca oleh pengguna AWS lain selain pemilik bucket. Awan energik tidak mengenkripsi objek apa pun sebelum mengirimnya ke S3, itu hanya meminta ember untuk menyimpannya dienkripsi jika S3 telah dikonfigurasi dengan benar. Namun, koneksi apa pun ke S3 dibuat dengan aman melalui https .

    Mari tambahkan baris berikut di bagian bawah postgresql.conf berkas:

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

    Kali ini, hanya memuat ulang konfigurasi sudah cukup untuk menerapkan perubahan baru:

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

    Untuk menguji apakah archive_command baru berfungsi, PostgreSQL harus menghasilkan file WAL untuk diarsipkan, oleh karena itu kita harus membuat beberapa lalu lintas dengan bantuan pgbench alat:

    [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)
    

    Pada titik ini kita akan melihat file WAL diarsipkan di ember S3. Mari kita periksa, membangun jalur target dengan nama server dan direktori tujuan WAL:

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

    Mari kita lihat ke dalam direktori 00000000100000000:

    [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
    

    Hebat!

    File WAL sedang dikompresi sebelum diunggah ke bucket S3 dan disimpan terenkripsi, menghemat ruang (dan uang) kami dan meningkatkan tingkat keamanan data kami.

    Kesimpulan

    barman-cloud-wal-archive perintah adalah apa yang pengguna telah menunggu untuk waktu yang lama.

    Jika Anda salah satu dari mereka yang telah menggunakan pre_archive_retry_script untuk mengimplementasikan skrip kustom untuk mengunggah file WAL ke bucket S3, maka skrip ini dapat digunakan sebagai pengganti yang lebih baik karena dikembangkan dan dikelola oleh pengembang Barman, serta diuji dan dikirimkan oleh sistem Pengiriman Berkelanjutan Kuadran Kedua.

    Jika Anda belum memikirkannya, ini membuka kebijakan retensi baru yang bisa lebih lama untuk penyimpanan cloud daripada yang lokal Barman, meningkatkan usia objek di cloud, sambil menghemat ruang di penyimpanan lokal, dengan mengatur dengan benar kebijakan retensi yang lebih lama dalam konfigurasi bucket S3.

    Jika tidak, ini dapat digunakan seperti yang kami lakukan di artikel ini, untuk mengarsipkan file WAL langsung dari server PostgreSQL. Meskipun ini menghilangkan langkah perantara, RPO meningkat dibandingkan dengan metode streaming, karena PostgreSQL akan mengarsipkan file WAL hanya setelah ditutup. Oleh karena itu jika terjadi masalah pada node PostgreSQL, kami dapat kehilangan beberapa perubahan. Jika memungkinkan, sebaiknya terapkan metode ini bersama dengan streaming ke server Barman untuk mencapai RPO=0 (dengan streaming sinkron).

    Sekarang kami memiliki sistem pengarsipan berkelanjutan, kami dapat mengambil cadangan cloud pertama kami menggunakan barman-cloud-backup alat.

    Sampai jumpa di bagian kedua artikel.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Panduan untuk Pgpool untuk PostgreSQL:Bagian Kedua

  2. Apa yang dibutuhkan JavaScript ini?

  3. Masalah dengan perintah COPY postgresql dengan Rails di server yang berbeda

  4. PostgreSql 'PDOException' dengan pesan 'tidak dapat menemukan driver'

  5. Apa cara paling elegan untuk menyimpan cap waktu dengan nanosec di postgresql?