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(https://github.com/puppetlabs/puppetlabs-postgresql/) untuk menginstal PostgreSQL padapgVMit2ndq/barman(https://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 "https://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 = 'https://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_levelsetidaknya diarchivetingkatarchive_modekeonarchive_commandsehingga WAL dapat disalin padabackup- aturan di
pg_hba.confuntuk akses daribackup
Semua parameter ini dapat dengan mudah diatur melalui puppetlabs/postgresql modul. Selain itu, di server Barman, kita membutuhkan:
- string koneksi PostgreSQL
- sebuah
.pgpassfile 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 example@sqldat.com',
}
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 example@sqldat.com:/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):
example@sqldat.com:~$ sudo -iu postgres example@sqldat.com:~$ ssh-keygen example@sqldat.com:~$ 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 example@sqldat.com:~$ sudo -iu barman example@sqldat.com:~$ echo "ssh-rsa ..." >> .ssh/authorized_keys |
Demikian pula, kami menyalin kunci publik barman pengguna ke authorized_keys file postgres pengguna di pg :
example@sqldat.com:~$ cat .ssh/id_rsa.pub ssh-rsa ... example@sqldat.com:~$ logout example@sqldat.com:~$ logout $ vagrant ssh pg example@sqldat.com:~$ sudo -iu postgres example@sqldat.com:~$ echo "ssh-rsa ..." >> .ssh/authorized_keys |
Pada titik ini, kami membuat koneksi pertama di kedua arah antara dua server:
example@sqldat.com:$ ssh example@sqldat.com192.168.56.222 example@sqldat.com:$ ssh example@sqldat.com192.168.56.221 |
Kita dapat menjalankan barman check untuk memverifikasi bahwa Barman bekerja dengan benar:
example@sqldat.com:~$ 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:
example@sqldat.com:$ 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 checkjika 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 example@sqldat.com',
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 example@sqldat.com:/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.