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

Menggunakan Barman untuk Pemulihan Bencana PostgreSQL

Pasti ada banyak alat canggih yang tersedia sebagai opsi pencadangan dan pemulihan untuk PostgreSQL secara umum; Barman, PgBackRest, BART adalah beberapa nama dalam konteks ini. Apa yang menarik perhatian kami adalah bahwa Barman adalah alat yang mengejar dengan cepat penyebaran produksi dan tren pasar.

Baik itu penyebaran berbasis buruh pelabuhan, perlu menyimpan cadangan di penyimpanan cloud yang berbeda atau kebutuhan arsitektur pemulihan bencana yang sangat dapat disesuaikan - Barman adalah pesaing yang sangat kuat dalam semua kasus tersebut.

Blog ini mengeksplorasi Barman dengan beberapa asumsi tentang penerapan, namun dalam kasus apa pun ini tidak boleh dianggap hanya set fitur yang mungkin. Barman jauh melampaui apa yang dapat kami tangkap di blog ini dan harus dieksplorasi lebih lanjut jika 'pencadangan dan pemulihan instance PostgreSQL' dipertimbangkan.

Asumsi Penerapan DR Siap 

RPO=0 umumnya dikenakan biaya - penerapan server siaga sinkron sering kali memenuhinya, tetapi kemudian hal itu cukup sering memengaruhi TPS server utama.

Seperti PostgreSQL, Barman memberikan banyak opsi penerapan untuk memenuhi kebutuhan Anda dalam hal RPO vs kinerja. Pikirkan kesederhanaan penerapan, RPO=0 atau hampir nol dampak kinerja; Barman cocok untuk semuanya.

Kami mempertimbangkan penerapan berikut untuk menetapkan solusi pemulihan bencana untuk arsitektur pencadangan dan pemulihan kami.

Gambar 1:Penerapan PostgreSQL dengan Barman

Ada dua situs (seperti pada umumnya untuk situs pemulihan bencana) - Situs-X dan Situs-Y.

Di Site-X ada:

  • Satu server 'pgServer' menghosting pgServer instance server PostgreSQL, dan satu pengguna OS 'postgres' 
    • Instance PostgreSQL juga menjadi host peran pengguna super 'bmuser'
  • Satu server 'bServer' yang menghosting binari Barman dan pengguna OS 'bmuser'

Di Site-Y ada:

  • Satu server 'geobServer' yang menghosting binari Barman dan pengguna OS 'bmuser'

Ada beberapa jenis koneksi yang terlibat dalam penyiapan ini.

  • Antara 'bServer' dan 'pgServer':
    • Konektivitas bidang manajemen dari Barman ke Instans PostgreSQL
    • konektivitas rsync untuk melakukan pencadangan basis aktual dari Barman ke Instans PostgreSQL
    • Pengarsipan WAL menggunakan barman-wal-archive dari Instance PostgreSQL ke Barman
    • Streaming WAL menggunakan pg_receivexlog di Barman
  • Antara 'bServer' dan 'geobserver':
    • Sinkronisasi antar server Barman untuk menyediakan geo-replikasi

Konektivitas Pertama 

Kebutuhan konektivitas utama antar server adalah melalui ssh. Untuk membuatnya menggunakan kunci ssh tanpa kata sandi. Mari buat kunci ssh dan tukarkan.

Di pgServer:

[email protected]$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y 2>&1 >/dev/null

[email protected]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

[email protected]$ ssh [email protected] "chmod 600 ~/.ssh/authorized_keys"

Di bServer:

[email protected]$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y 2>&1 >/dev/null

[email protected]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

[email protected]$ ssh [email protected] "chmod 600 ~/.ssh/authorized_keys"

Di geobServer:

[email protected]$ ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa <<<y 2>&1 >/dev/null

[email protected]$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

[email protected]$ ssh [email protected] "chmod 600 ~/.ssh/authorized_keys"

Konfigurasi Instance PostgreSQL 

Ada dua hal utama yang kita perlukan untuk menyusun kembali instance postgres - Direktori dasar dan log WAL / Transaksi yang dihasilkan setelahnya. Server energik dengan cerdas melacaknya. Yang kami butuhkan adalah memastikan bahwa umpan yang tepat dibuat agar Barman dapat mengumpulkan artefak ini.

Tambahkan baris berikut ke postgresql.conf:

listen_addresses = '172.25.130.180'     #as per above deployment assumption

wal_level = replica                     #or higher 

archive_mode = on

archive_command = 'barman-wal-archive -U bmuser bserver pgserver %p'

Perintah arsip memastikan bahwa ketika WAL akan diarsipkan oleh instance postgres, utilitas barman-wal-arsip mengirimkannya ke Server Barman. Perlu dicatat bahwa paket barman-cli karenanya harus tersedia di 'pgServer'. Ada pilihan lain untuk menggunakan rsync jika kita tidak ingin menggunakan utilitas barman-wal-archive.

Tambahkan yang berikut ke pg_hba.conf:

host     all                    all     172.25.130.186/32     md5

host     replication            all     172.25.130.186/32     md5

Pada dasarnya memungkinkan replikasi dan koneksi normal dari 'bmserver' ke instance postgres ini.

Sekarang cukup mulai ulang instance dan buat peran pengguna super yang disebut bmuser:

[email protected]$ pg_ctl restart

[email protected]$ createuser -s -P bmuser 

Jika diperlukan, kita dapat menghindari penggunaan bmuser sebagai pengguna super juga; yang akan membutuhkan hak istimewa yang diberikan kepada pengguna ini. Untuk contoh di atas, kami juga menggunakan bmuser sebagai kata sandi. Tapi itu saja, sejauh konfigurasi instance PostgreSQL diperlukan.

Konfigurasi Barman 

Barman memiliki tiga komponen dasar dalam konfigurasinya:

  • Konfigurasi global 
  • Konfigurasi tingkat server 
  • Pengguna yang akan menjalankan bartender 

 Dalam kasus kami, karena Barman diinstal menggunakan rpm, kami memiliki file konfigurasi global yang disimpan di:

/etc/barman.conf

Kami ingin menyimpan konfigurasi tingkat server di direktori home bmuser, maka file konfigurasi global kami memiliki konten berikut:

[barman]

barman_user = bmuser

configuration_files_directory = /home/bmuser/barman.d

barman_home = /home/bmuser

barman_lock_directory = /home/bmuser/run

log_file = /home/bmuser/barman.log

log_level = INFO

Konfigurasi Server Barman Utama 

Dalam penerapan di atas, kami memutuskan untuk menyimpan server Barman utama di pusat data/situs yang sama tempat instance PostgreSQL disimpan. Manfaat yang sama adalah lebih sedikit lag dan pemulihan lebih cepat jika diperlukan. Tak perlu dikatakan, lebih sedikit komputasi dan/atau kebutuhan bandwidth jaringan diperlukan di server PostgreSQL juga.

Untuk membiarkan Barman mengelola instance PostgreSQL di pgServer, kita perlu menambahkan file konfigurasi (kita beri nama pgserver.conf) dengan konten berikut:

[pgserver]

description =  "Example pgserver configuration"

ssh_command = ssh [email protected]

conninfo = host=pgserver user=bmuser dbname=postgres

backup_method = rsync

reuse_backup = link

backup_options = concurrent_backup

parallel_jobs = 2

archiver = on

archiver_batch_size = 50

path_prefix = "/usr/pgsql-12/bin"



streaming_conninfo = host=pgserver user=bmuser dbname=postgres

streaming_archiver=on

create_slot = auto

Dan file .pgpass yang berisi kredensial untuk bmuser dalam instance PostgreSQL:

echo 'pgserver:5432:*:bmuser:bmuser' > ~/.pgpass 

Untuk lebih memahami item konfigurasi penting:

  • ssh_command :Digunakan untuk membuat koneksi di mana rsync akan dilakukan 
  • koneksi :String koneksi untuk memungkinkan Barman membuat koneksi dengan server postgres
  • reuse_backup :Untuk mengizinkan pencadangan tambahan dengan penyimpanan lebih sedikit 
  • metode_cadangan :metode untuk mengambil cadangan direktori dasar
  • path_prefix :lokasi penyimpanan biner pg_receivexlog 
  • streaming_conninfo :String koneksi yang digunakan untuk streaming WAL 
  • buat_slot :Untuk memastikan slot dibuat oleh instance postgres 

Konfigurasi Server Pasif Barman 

Konfigurasi situs geo-replikasi cukup sederhana. Yang dibutuhkan hanyalah informasi koneksi ssh di mana situs simpul pasif ini akan melakukan replikasi.

Yang menarik adalah bahwa simpul pasif seperti itu dapat bekerja dalam mode campuran; dengan kata lain - mereka dapat bertindak sebagai server Barman aktif untuk melakukan pencadangan untuk situs PostgreSQL dan secara paralel bertindak sebagai situs replikasi/berjenjang untuk server Barman lainnya.

Karena, dalam kasus kami, instance Barman (di Situs-Y) ini hanya perlu node pasif, yang kami butuhkan hanyalah membuat file /home/bmuser/barman.d/pgserver.conf dengan konfigurasi berikut:

[pgserver]

description =  "Geo-replication or sync for pgserver"

primary_ssh_command = ssh [email protected]

Dengan asumsi bahwa kunci telah dipertukarkan dan konfigurasi global pada node ini dilakukan seperti yang disebutkan sebelumnya - kita cukup banyak menyelesaikan konfigurasi.

Dan Inilah Pencadangan dan Pemulihan Pertama Kami 

Pada server pastikan bahwa proses latar belakang untuk menerima WAL telah dipicu; dan kemudian periksa konfigurasi server:

[email protected]$ barman cron

[email protected]$ barman check pgserver

Pemeriksaan harus OK untuk semua sublangkah. Jika tidak, lihat /home/bmuser/barman.log.

Terbitkan perintah pencadangan pada Barman untuk memastikan ada DATA dasar di mana WAL dapat diterapkan:

[email protected]$ barman backup pgserver

Pada 'geobmserver' pastikan bahwa replikasi dilakukan dengan menjalankan perintah berikut:

[email protected]$ barman cron 

[email protected]$ barman list-backup pgserver

Cron harus dimasukkan ke dalam file crontab (jika tidak ada). Demi kesederhanaan, saya belum menunjukkannya di sini. Perintah terakhir akan menunjukkan bahwa folder cadangan telah dibuat di geobmserver juga.

Sekarang pada instance Postgres, mari kita buat beberapa data dummy:

[email protected]$ psql -U postgres -c "CREATE TABLE dummy_data( i INTEGER);"

[email protected]$ psql -U postgres -c "insert into dummy_data values ( generate_series (1, 1000000 ));"

Replikasi WAL dari instance PostgreSQL dapat dilihat menggunakan perintah di bawah ini:

[email protected]$ psql -U postgres -c "SELECT * from pg_stat_replication ;”

Untuk membuat ulang instance di Site-Y, pertama-tama pastikan bahwa catatan WAL dialihkan. atau contoh ini, untuk membuat pemulihan yang bersih:

[email protected]$ barman switch-xlog --force --archive pgserver

Di Situs-X, mari kita tampilkan instance PostgreSQL mandiri untuk memeriksa apakah pencadangan itu waras:

[email protected]$ barman cron 

barman recover --get-wal pgserver latest /tmp/data

Sekarang, edit file postgresql.conf dan postgresql.auto.conf sesuai kebutuhan. Berikut ini jelaskan perubahan yang dilakukan untuk contoh ini:

  • postgresql.conf :listen_addresses berkomentar agar default ke localhost
  • postgresql.auto.conf :menghapus sudo bmuser dari restore_command 

Tampilkan DATA ini di /tmp/data dan periksa keberadaan catatan Anda.

Kesimpulan

Ini hanyalah puncak gunung es. Barman jauh lebih dalam dari ini karena fungsionalitas yang disediakannya - mis. bertindak sebagai standby yang disinkronkan, skrip pengait dan sebagainya. Tak perlu dikatakan, dokumentasi secara keseluruhan harus dieksplorasi untuk mengonfigurasinya sesuai kebutuhan lingkungan produksi Anda.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana kata kunci IMMUTABLE, STABLE, dan VOLATILE memengaruhi perilaku fungsi?

  2. Format Angka dengan Koma di PostgreSQL

  3. Tambahkan Hari ke Tanggal di PostgreSQL

  4. Perilaku NOT LIKE dengan nilai NULL

  5. BUAT BAHASA plpython3u – PostgreSQL 9.6