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:
[email protected]:~# apt [email protected]:~# apt install barman-cli-cloud
4. Instal awscli
paket:
[email protected]:~# apt install awscli
5. Konfigurasikan kredensial AWS dengan alat awscli sebagai pengguna postgres:
[email protected]:~$ 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
:
[email protected]:~$ 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:
[email protected]:~$ 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:
[email protected]:~$ 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:[email protected]:~$ cp /var/lib/postgresql/12/main/postgresql.conf /etc/postgresql/12/main/[email protected]:~$ cp /var/lib/postgresql /12/main/pg_hba.conf /etc/postgresql/12/main/[email protected]:~$ cp /var/lib/postgresql/12/main/pg_ident.conf /etc/postgresql/12/main/Kedua, buat
recovery.signal
berkas:[email protected]:~$ touch /var/lib/postgresql/12/main/recovery.signalKemudian, nonaktifkan
archive_command
untuk mencegah instance yang dipulihkan agar tidak menulis di bucket yang sama dengan instance asli:[email protected]:~$ 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-restore
direstore_command
:[email protected]:~$ echo \"restore_command ='barman-cloud-wal-restore --profile barman-cloud s3://barman-s3-test pg12 %f %p'\">> / etc/postgresql/12/main/[email protected]:~$ 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:
[email protected]:~# systemctl restart [email protected]Besar! Seperti yang dapat kita lihat dari log PostgreSQL, file WAL dipulihkan dari bucket S3 dan instance telah dimulai dengan benar:
[email protected]:~$ 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-archive
ataubarman-cloud-backup
diinstal melalui paket RPM/Apt dan Anda meningkatkan sistem Anda, Anda harus menginstalbarman-cli-cloud
kemasan. Hal ini disebabkan fakta bahwa, dengan rilis Barman 2.11, semua alat terkait cloud adalah bagian daribarman-cli-cloud
paket seperti yang dijelaskan di awal artikel.Versi Barman berikutnya mungkin meningkatkan kegunaan dan kemampuan otomatisasi dari perintah pemulihan, misalnya dengan menyiapkan
recovery.conf
ataurecovery.signal
file seperti yang dilakukan Barman sebenarnya.