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:
puppetlabs/postgresql
(http://github.com/puppetlabs/puppetlabs-postgresql/) untuk menginstal PostgreSQL padapg
VMit2ndq/barman
(http://github.com/2ndquadrant-it/puppet-barman) untuk menginstal Barman dibackup
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 diarchive
tingkatarchive_mode
keon
archive_command
sehingga WAL dapat disalin padabackup
- aturan di
pg_hba.conf
untuk akses daribackup
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.