Berkat utilitas baru barman-cloud-restore dan barman-cloud-wal-restore diperkenalkan di Barman 2.11 , sekarang dimungkinkan untuk menjalankan pemulihan instance PostgreSQL menggunakan cadangan lengkap yang sebelumnya dijalankan menggunakan barman-cloud-wal-archive dan barman-cloud-backup perintah. Mari temukan bersama cara menerapkannya di artikel berikut.
Perlu dicatat bahwa di Barman 2.11, semua utilitas cloud untuk Barman sekarang berada dalam paket terpisah yang disebut barman-cli-cloud .
Persyaratan
1. barman-cli-cloud paket
2. Contoh PostgreSQL
3. Bucket AWS S3
4. Mesin virtual kedua tempat menjalankan pemulihan
Pada artikel ini, kita akan menguji barman-cli-cloud fungsionalitas dalam mesin virtual dengan Debian Buster dan PostgreSQL 12. Untuk mengikuti instruksi yang terdapat dalam artikel ini dengan benar, kami juga menganggap Anda memiliki:
- mengonfigurasi Postgres untuk mengarsipkan file WAL ke bucket S3 yang ada menggunakan
barman-cloud-wal-archive - menjalankan pencadangan dan mengirimkannya ke bucket S3 yang sama melalui
barman-cloud-backup
Anda dapat dengan mudah mencapai ini dengan mengikuti petunjuk yang terdapat dalam artikel blog sebelumnya:
- Barman Cloud – Bagian 1:Arsip WAL
- Barman Cloud – Bagian 2:Pencadangan Cloud
Siapkan server pemulihan
Hasilnya, kami memiliki ember S3 di AWS bernama barman-s3-test yang sudah berisi file WAL dan cadangan yang diarsipkan melalui barman-cloud-wal-archive dan barman-cloud-backup alat, sekarang kita perlu mengonfigurasi server dengan benar yang akan menjadi host untuk pemulihan instance PostgreSQL.
1. Instal PostgreSQL 12 dari repositori PGDG resmi
2. Instal repositori Publik Kuadran ke-2
3. Instal barman-cli-cloud paket:
example@sqldat.com:~# apt updateexample@sqldat.com:~# apt install barman-cli-cloud
4. Instal awscli paket:
example@sqldat.com:~# apt install awscli
5. Konfigurasikan kredensial AWS dengan alat awscli sebagai pengguna postgres:
example@sqldat.com:~$ aws configure --profile barman-cloudAWS Access Key ID [Tidak Ada]:AKI*****************Kunci Akses Rahasia AWS [Tidak Ada ]:****************************************Nama wilayah default [Tidak Ada]:eu -west-1Format keluaran default [Tidak Ada]:json
Jalankan prosedur pemulihan
Sekarang setelah server pemulihan dikonfigurasi dengan benar, kami siap untuk memulai prosedur pemulihan.
Barman 2.11 memperkenalkan barman-cloud-backup-list perintah yang memungkinkan Anda untuk mengambil informasi tentang cadangan yang dibuat dengan barman-cloud-backup :
example@sqldat.com:~$ barman-cloud-backup-list \ --profile barman-cloud \ s3://barman-s3-test pg12ID Cadangan Waktu Akhir Mulai Wal20200713T120856 13-07-2020 12:09:05 000000001000000000000000C
Kami sekarang siap untuk menjalankan pemulihan menggunakan barman-cloud-restore perintah:
example@sqldat.com:~$ barman-cloud-restore \ --profile barman-cloud \ s3://barman-s3-test \ pg12 20200713T120856 \ /var/lib/postgresql/12/main/Setelah pemulihan berakhir dengan sukses, kami dapat memeriksa isi direktori PGDATA:
contoh@sqldat.com:~$ ls /var/lib/postgresql/12/main/PG_VERSION global pg_hba.conf pg_multixact pg_serial pg_stat_tmp pg_twophase postgresql.auto.confbackup_label pg_commit_ts pg_ident.conf pg_subtransdy pg_snapify pg_s pg_replslot pg_stat pg_tblspc pg_xactSekarang, untuk memastikan bahwa proses pemulihan bekerja dengan benar, kita perlu memulai instance PostgreSQL yang dipulihkan dan memverifikasi bahwa semuanya berfungsi seperti yang diharapkan. Proses ini memerlukan beberapa langkah tambahan.
Pertama, karena kita menggunakan sistem Debian, kita perlu menyalin file yang berisi konfigurasi PostgreSQL di bawah
/etc/postgresql/12/main/direktori:example@sqldat.com:~$ cp /var/lib/postgresql/12/main/postgresql.conf /etc/postgresql/12/main/example@sqldat.com:~$ cp /var/lib/postgresql /12/main/pg_hba.conf /etc/postgresql/12/main/example@sqldat.com:~$ cp /var/lib/postgresql/12/main/pg_ident.conf /etc/postgresql/12/main/Kedua, buat
recovery.signalberkas:example@sqldat.com:~$ touch /var/lib/postgresql/12/main/recovery.signalKemudian, nonaktifkan
archive_commanduntuk mencegah instance yang dipulihkan agar tidak menulis di bucket yang sama dengan instance asli:example@sqldat.com:~$ echo \"archive_command ='cd .'\">> /etc/postgresql/12/main/postgresql.confSetelah itu, Anda perlu mengonfigurasi PostgreSQL untuk mengambil file WAL dari timeline terbaru yang tersedia dari bucket S3 dengan menggunakan
barman-cloud-wal-restoredirestore_command:example@sqldat.com:~$ echo \"restore_command ='barman-cloud-wal-restore --profile barman-cloud s3://barman-s3-test pg12 %f %p'\">> / etc/postgresql/12/main/postgresql.confexample@sqldat.com:~$ echo \"recovery_target_timeline ='latest'\">> /etc/postgresql/12/main/postgresql.confPENTING :Sebelum melanjutkan, pastikan instance PostgreSQL tidak berjalan, dan direktori tujuan (datadir default PostgreSQL) kosong.
Akhirnya, kami siap untuk memulai instance baru yang dipulihkan:
example@sqldat.com:~# systemctl restart example@sqldat.comBesar! Seperti yang dapat kita lihat dari log PostgreSQL, file WAL dipulihkan dari bucket S3 dan instance telah dimulai dengan benar:
example@sqldat.com:~$ less /var/log/postgresql/postgresql-12-main.log...2020-07-13 12:43:25.093 UTC [9458] LOG:memulai PostgreSQL 12.3 (Debian 12.3-1.pgdg100+1) pada x86_64-pc-linux-gnu, dikompilasi oleh gcc (Debian 8.3.0-6) 8.3.0, 64-bit2020-07-13 12:43:25.093 UTC [9458] LOG:mendengarkan pada alamat IPv4 "127.0.0.1", port 54322020-07-13 12:43:25.095 UTC [9458] LOG:mendengarkan pada soket Unix "/var/run/postgresql/.s.PGSQL.5432"07-2020- 13 12:43:25.111 UTC [9459] LOG:sistem database terputus; terakhir diketahui pada 13-07-2020 12:08:56 UTC2020-07-13 12:43:25.508 UTC [9459] LOG:memulai pemulihan arsip2020-07-13 12:43:26.010 UTC [9459] LOG:log yang dipulihkan file "00000001000000000000000C" dari arsip2020-07-13 12:43:26,052 UTC [9459] LOG:redo dimulai pada 0/C0000282020-07-13 12:43:26,054 UTC [9459] LOG:status pemulihan konsisten tercapai pada 0/C0001382020 -07-13 12:43:26,054 UTC [9458] LOG:sistem database siap menerima koneksi hanya baca2020-07-13 12:43:26.469 UTC [9459] LOG:file log yang dipulihkan "00000001000000000000000D" dari arsip2020-07- 13 12:43:26.823 UTC [9459] LOG:dilakukan ulang pada 0/D0001B02020-07-13 12:43:27.422 UTC [9459] LOG:memulihkan file log "00000001000000000000000D" dari arsip2020-07-13 12:43:27.592 UTC [9459] LOG:ID timeline baru yang dipilih:22020-07-13 12:43:27.644 UTC [9459] LOG:pemulihan arsip selesai2020-07-13 12:43:27.979 UTC [9458] LOG:sistem database siap untuk terima koneksiKesimpulan
Seperti biasa dengan rilis baru Barman, kami menyarankan semua orang memperbarui sistem mereka ke versi terbaru. Daftar lengkap perubahan dan perbaikan bug tersedia di sini.
Harap dicatat bahwa jika Anda sudah menggunakan
barman-cloud-wal-archiveataubarman-cloud-backupdiinstal melalui paket RPM/Apt dan Anda meningkatkan sistem Anda, Anda harus menginstalbarman-cli-cloudkemasan. Hal ini disebabkan fakta bahwa, dengan rilis Barman 2.11, semua alat terkait cloud adalah bagian daribarman-cli-cloudpaket seperti yang dijelaskan di awal artikel.Versi Barman berikutnya mungkin meningkatkan kegunaan dan kemampuan otomatisasi dari perintah pemulihan, misalnya dengan menyiapkan
recovery.confataurecovery.signalfile seperti yang dilakukan Barman sebenarnya.