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
- barman-cli 2.10 (atau lebih tinggi)
- Akun Amazon AWS
- awscli
- Ember S3
- 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
-
- Instal repositori Publik Kuadran ke-2
- Instal paket barman-cli
[email protected]:~# apt update [email protected]:~# apt install barman-cli
- 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 sebagaipostgres
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 mengujibarman-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.