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

Mengotomatiskan Barman dengan Wayang:it2ndq/barman (bagian dua)

Di bagian pertama artikel ini, kami mengonfigurasi Vagrant untuk menjalankan dua mesin virtual Ubuntu 14.04 Trusty Tahr, masing-masing disebut pg dan backup . Di bagian kedua ini kita akan melihat bagaimana menggunakan Wayang untuk mengatur dan mengkonfigurasi server PostgreSQL di pg dan cadangkan melalui Barman dari backup kotak.

Boneka:konfigurasi

Setelah mendefinisikan mesin sesuai artikel sebelumnya, kita perlu menentukan modul Wayang yang diperlukan yang librarian-puppet akan mengatur untuk kita.

Diperlukan dua modul:

  1. puppetlabs/postgresql (http://github.com/puppetlabs/puppetlabs-postgresql/) untuk menginstal PostgreSQL pada pg VM
  2. it2ndq/barman (http://github.com/2ndquadrant-it/puppet-barman) untuk menginstal Barman di backup

Kedua modul akan diinstal dari Puppet Forge. Untuk puppetlabs/postgresql modul, kita harus menggunakan versi 4.2.0 paling banyak saat ini, karena versi terbaru (4.3.0) melanggar postgres_password parameter yang akan kita gunakan nanti (lihat permintaan tarik ini). Mari kita buat file bernama Puppetfile berisi konten ini di direktori proyek:

forge "http://forgeapi.puppetlabs.com"
mod "puppetlabs/postgresql", "<4.3.0"
mod "it2ndq/barman"

Sekarang kita dapat menginstal modul Wayang dan dependensinya dengan menjalankan:

$ librarian-puppet install --verbose

Meskipun tidak penting, lebih baik menggunakan opsi --verbose setiap kali librarian-puppet digunakan. Tanpanya, perintahnya sangat sunyi dan berguna untuk memiliki detail tentang apa yang dilakukannya terlebih dahulu. Misalnya, tanpa menggunakan --verbose , Anda mungkin mengetahui bahwa Anda telah membuang waktu berharga menunggu konflik ketergantungan diselesaikan, hanya untuk melihat kesalahan beberapa menit kemudian.

Setelah berhasil menyelesaikan perintah, sebuah modules direktori yang berisi barman dan postgresql modul dan dependensinya (apt , concat , stdlib ) akan dibuat di direktori kerja kami. Selain itu, librarian-puppet akan membuat Puppetfile.lock file untuk mengidentifikasi dependensi dan versi modul yang diinstal, menyematkannya untuk mencegah pembaruan di masa mendatang. Dengan cara ini, librarian-puppet install subsequent run akan selalu menginstal versi modul yang sama alih-alih kemungkinan peningkatan (jika peningkatan diperlukan, librarian-puppet update akan melakukan trik).

Sekarang kami dapat memberi tahu Vagrant bahwa kami menggunakan manifes Wayang untuk menyediakan server. Kami mengubah Vagrantfile sebagai berikut:

Vagrant.configure("2") do |config|
  {
    :pg => {
      :ip      => '192.168.56.221',
      :box     => 'ubuntu/trusty64'
    },
    :backup => {
      :ip      => '192.168.56.222',
      :box     => 'ubuntu/trusty64'
    }
  }.each do |name,cfg|
    config.vm.define name do |local|
      local.vm.box = cfg[:box]
      local.vm.hostname = name.to_s + '.local.lan'
      local.vm.network :private_network, ip: cfg[:ip]
      family = 'ubuntu'
      bootstrap_url = 'http://raw.github.com/hashicorp/puppet-bootstrap/master/' + family + '.sh'

      # Run puppet-bootstrap only once
      local.vm.provision :shell, :inline => <<-eos
        if [ ! -e /tmp/.bash.provision.done ]; then
          curl -L #{bootstrap_url} | bash
          touch /tmp/.bash.provision.done
        fi
      eos

      # Provision with Puppet
      local.vm.provision :puppet do |puppet|
        puppet.manifests_path = "manifests"
        puppet.module_path = [".", "modules"]
        puppet.manifest_file = "site.pp"
        puppet.options = [
         '--verbose',
        ]
      end
    end
  end
end

Dengan baris yang baru saja kami tambahkan, kami telah memberi Vagrant petunjuk untuk menyediakan VM menggunakan manifests/site.pp sebagai manifes utama dan modul yang disertakan dalam modules direktori. Ini adalah versi terakhir dari Vagrantfile kami .

Sekarang kita harus membuat manifests direktori:

$ mkdir manifests

dan tulis di dalamnya versi pertama site.pp . Kita akan mulai dengan penyiapan yang sangat mendasar:

node backup {
  class { 'barman':
    manage_package_repo => true,
  }
}
node pg {}

Sekarang kita dapat memulai mesin dan melihatnya di backup ada server Barman dengan konfigurasi default (dan tidak ada PostgreSQL di pg belum). Mari masuk ke backup :

$ vagrant ssh backup

dan lihat /etc/barman.conf :

# Main configuration file for Barman (Backup and Recovery Manager for PostgreSQL)
# Further information on the Barman project at www.pgbarman.org
# IMPORTANT: Please do not edit this file as it is managed by Puppet!
# Global options

[barman]
barman_home = /var/lib/barman
barman_user = barman
log_file = /var/log/barman/barman.log
compression = gzip
backup_options = exclusive_backup
minimum_redundancy = 0
retention_policy =
retention_policy_mode = auto
wal_retention_policy = main
configuration_files_directory = /etc/barman.conf.d

Langkah selanjutnya adalah menjalankan instance PostgreSQL di pg . Kita harus mengetahui parameter yang dibutuhkan oleh Barman di server PostgreSQL, jadi kita perlu mengatur:

  • wal_level setidaknya di archive tingkat
  • archive_mode ke on
  • archive_command sehingga WAL dapat disalin pada backup
  • aturan di pg_hba.conf untuk akses dari backup

Semua parameter ini dapat dengan mudah diatur melalui puppetlabs/postgresql modul. Selain itu, di server Barman, kita membutuhkan:

  • string koneksi PostgreSQL
  • sebuah .pgpass file untuk otentikasi
  • perintah SSH
  • untuk melakukan pertukaran kunci SSH

it2ndq/barman menghasilkan pasangan kunci privat/publik di ~barman/.ssh . Namun, secara otomatis bertukar kunci antara server memerlukan kehadiran Wayang Master yang berada di luar tujuan dari tutorial ini (itu akan menjadi bagian dari angsuran berikutnya, yang akan fokus pada setup dari Wayang Master dan barman::autoconfigure class) – oleh karena itu langkah terakhir ini akan dilakukan secara manual.

Kami mengedit site.pp file sebagai berikut:

node backup {
  class { 'barman':
    manage_package_repo => true,
  }
  barman::server {'test-server':
    conninfo     => 'user=postgres host=192.168.56.221',
    ssh_command  => 'ssh [email protected]',
  }
  file { '/var/lib/barman/.pgpass':
    ensure  => 'present',
    owner   => 'barman',
    group   => 'barman',
    mode    => 0600,
    content => '192.168.56.221:5432:*:postgres:insecure_password',
  }
}

node pg {
  class { 'postgresql::server':
    listen_addresses     => '*',
    postgres_password    => 'insecure_password',
    pg_hba_conf_defaults => false,
  }
  postgresql::server::pg_hba_rule {'Local access':
    type        => 'local',
    database    => 'all',
    user        => 'all',
    auth_method => 'peer',
  }
  postgresql::server::pg_hba_rule {'Barman access':
    type        => 'host',
    database    => 'all',
    user        => 'postgres',
    address     => '192.168.56.222/32',
    auth_method => 'md5',
  }
  postgresql::server::config_entry {
    'wal_level'       : value => 'archive';
    'archive_mode'    : value => 'on';
    'archive_command' : value => 'rsync -a %p [email protected]:/var/lib/barman/test-server/incoming/%f';
  }
  class { 'postgresql::server::contrib':
    package_ensure => 'present',
  }
}

Setelah mengubah manifes, ketentuan harus dijalankan kembali:

$ vagrant provision

Dengan mesin berjalan, kita dapat melanjutkan dengan pertukaran kunci. Kami masuk ke pg :

$ vagrant ssh pg

dan kita membuat keypair untuk postgres pengguna, menggunakan ssh-keygen , biarkan setiap bidang kosong saat diminta (jadi selalu tekan enter):

[email protected]:~$ sudo -iu postgres
[email protected]:~$ ssh-keygen
[email protected]:~$ cat .ssh/id_rsa.pub

Perintah terakhir mengeluarkan string alfanumerik panjang yang harus ditambahkan ke ~barman/.ssh/authorized_keys file di backup .

$ vagrant ssh backup
[email protected]:~$ sudo -iu barman
[email protected]:~$ echo "ssh-rsa ..." >> .ssh/authorized_keys

Demikian pula, kami menyalin kunci publik barman pengguna ke authorized_keys file postgres pengguna di pg :

[email protected]:~$ cat .ssh/id_rsa.pub
ssh-rsa ...
[email protected]:~$ logout
[email protected]:~$ logout
$ vagrant ssh pg
[email protected]:~$ sudo -iu postgres
[email protected]:~$ echo "ssh-rsa ..." >> .ssh/authorized_keys

Pada titik ini, kami membuat koneksi pertama di kedua arah antara dua server:

[email protected]:$ ssh [email protected]
[email protected]:$ ssh [email protected]

Kita dapat menjalankan barman check untuk memverifikasi bahwa Barman bekerja dengan benar:

[email protected]:~$ barman check all
Server test-server:
        ssh: OK
        PostgreSQL: OK
        archive_mode: OK
        archive_command: OK
        directories: OK
        retention policy settings: OK
        backup maximum age: OK (no last_backup_maximum_age provided)
        compression settings: OK
        minimum redundancy requirements: OK (have 0 backups, expected at least 0)

Setiap baris harus membaca "OK". Sekarang, untuk melakukan pencadangan, jalankan saja:

[email protected]:$ barman backup test-server

Konfigurasi realistis

Konfigurasi Barman yang digunakan sejauh ini sangat sederhana, tetapi Anda dapat dengan mudah menambahkan beberapa parameter ke site.pp dan manfaatkan semua fitur Barman, seperti kebijakan penyimpanan dan cadangan tambahan baru yang tersedia di Barman 1.4.0.

Kami menyimpulkan tutorial ini dengan kasus penggunaan yang realistis, dengan persyaratan berikut:

  • cadangan setiap malam pukul 01:00
  • kemungkinan melakukan Pemulihan Titik Dalam Waktu ke momen mana pun dalam minggu terakhir
  • selalu memiliki setidaknya satu cadangan yang tersedia
  • melaporkan kesalahan melalui barman check jika cadangan terbaru lebih dari seminggu
  • mengaktifkan pencadangan tambahan untuk menghemat ruang disk

Kami menggunakan file Wayang sumber daya untuk membuat .pgpass file dengan parameter koneksi dan cron sumber daya untuk menghasilkan pekerjaan untuk dijalankan setiap malam. Terakhir, kita edit barman::server untuk menambahkan parameter Barman yang diperlukan.

Hasil akhirnya adalah:

node backup {
  class { 'barman':
    manage_package_repo => true,
  }
  barman::server {'test-server':
    conninfo                => 'user=postgres host=192.168.56.221',
    ssh_command             => 'ssh [email protected]',
    retention_policy        => 'RECOVERY WINDOW OF 1 WEEK',
    minimum_redundancy      => 1,
    last_backup_maximum_age => '1 WEEK',
    reuse_backup            => 'link',
  }
  file { '/var/lib/barman/.pgpass':
    ensure  => 'present',
    owner   => 'barman',
    group   => 'barman',
    mode    => 0600,
    content => '192.168.56.221:5432:*:postgres:insecure_password',
  }
  cron { 'barman backup test-server':
    command => '/usr/bin/barman backup test-server',
    user    => 'barman',
    hour    => 1,
    minute  => 0,
  }
}
node pg {
  class { 'postgresql::server':
    listen_addresses  => '*',
    postgres_password => 'insecure_password',
    pg_hba_conf_defaults => false,
  }
  postgresql::server::pg_hba_rule {'Local access':
    type        => 'local',
    database    => 'all',
    user        => 'all',
    auth_method => 'peer',
  }
  postgresql::server::pg_hba_rule {'Barman access':
    type        => 'host',
    database    => 'all',
    user        => 'postgres',
    address     => '192.168.56.222/32',
    auth_method => 'md5',
  }
  postgresql::server::config_entry {
    'wal_level'       : value => 'archive';
    'archive_mode'    : value => 'on';
    'archive_command' : value => 'rsync -a %p [email protected]:/var/lib/barman/test-server/incoming/%f';
  }
}

Kesimpulan

Dengan 51 baris manifes Wayang, kami berhasil mengonfigurasi sepasang server PostgreSQL/Barman dengan pengaturan yang serupa dengan yang mungkin kami inginkan di server produksi. Kami telah menggabungkan keuntungan memiliki server Barman untuk menangani pencadangan dengan memiliki infrastruktur yang dikelola oleh Wayang, dapat digunakan kembali, dan dapat versi.

Dalam posting berikutnya dan terakhir dalam rangkaian artikel ini kita akan melihat bagaimana menggunakan Wayang Guru untuk mengekspor sumber daya antara mesin yang berbeda, sehingga memungkinkan VM untuk bertukar parameter yang diperlukan untuk fungsi yang benar melalui barman::autoconfigure kelas membuat seluruh proses penyiapan lebih mudah.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa Nama Batasan Default di PostgreSQL?

  2. Permintaan PostgreSQL untuk menghitung/mengelompokkan berdasarkan hari dan menampilkan hari tanpa data

  3. Dapatkan Id dari INSERT bersyarat

  4. Django:izin ditolak ketika mencoba mengakses basis data setelah pemulihan (migrasi)

  5. Rails + Postgres drop error:database sedang diakses oleh pengguna lain