V první části tohoto článku jsme nakonfigurovali Vagrant tak, aby spouštěl dva virtuální stroje Ubuntu 14.04 Trusty Tahr, respektive nazvané pg
a backup
. V této druhé části se podíváme na to, jak použít Puppet k nastavení a konfiguraci serveru PostgreSQL na pg
a zálohujte jej přes Barman ze backup
box.
Loutka:konfigurace
Po definování strojů podle předchozího článku musíme specifikovat požadované moduly Puppet, které librarian-puppet
bude spravovat za nás.
Jsou vyžadovány dva moduly:
puppetlabs/postgresql
(http://github.com/puppetlabs/puppetlabs-postgresql/) k instalaci PostgreSQL napg
VMit2ndq/barman
(http://github.com/2ndquadrant-it/puppet-barman) k instalaci Barmana nabackup
Oba moduly budou instalovány z Puppet Forge. Pro puppetlabs/postgresql
modulu, budeme muset v tuto chvíli používat maximálně verzi 4.2.0, protože nejnovější verze (4.3.0) porušuje postgres_password
parametr, který použijeme později (viz tento požadavek na stažení). Vytvořme soubor s názvem Puppetfile
obsahující tento obsah v adresáři projektu:
forge "http://forgeapi.puppetlabs.com" mod "puppetlabs/postgresql", "<4.3.0" mod "it2ndq/barman" |
Nyní můžeme nainstalovat moduly Puppet a jejich závislosti spuštěním:
$ librarian-puppet install --verbose |
Ačkoli to není nezbytné, je vhodnější použít možnost --verbose
pokaždé librarian-puppet
se používá. Bez něj je příkaz velmi tichý a je užitečné mít předem podrobnosti o tom, co dělá. Například bez použití --verbose
, můžete zjistit, že jste promarnili drahocenný čas čekáním na vyřešení konfliktu závislostí, ale o mnoho minut později uvidíte chybu.
Po úspěšném dokončení příkazu se zobrazí modules
adresář obsahující barman
a postgresql
moduly a jejich závislosti (apt
, concat
, stdlib
) bude vytvořen v našem pracovním adresáři. Navíc librarian-puppet
vytvoří Puppetfile.lock
k identifikaci závislostí a verzí nainstalovaných modulů a jejich připnutí, aby se zabránilo budoucím aktualizacím. Tímto způsobem následná librarian-puppet install
běhy vždy nainstalují stejnou verzi modulů místo možných upgradů (v případě, že je upgrade vyžadován, librarian-puppet update
udělá ten trik).
Nyní můžeme Vagrantovi říci, že k poskytování serverů používáme manifest Puppet. Změníme Vagrantfile
takto:
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 |
S řádky, které jsme právě přidali, jsme dali Vagrantu pokyny k poskytování virtuálních počítačů pomocí manifests/site.pp
jako hlavní manifest a moduly obsažené v modules
adresář. Toto je konečná verze našeho Vagrantfile
.
Nyní musíme vytvořit manifests
adresář:
$ mkdir manifests |
a napište do něj první verzi site.pp
. Začneme velmi základním nastavením:
node backup { class { 'barman': manage_package_repo => true, } } node pg {} |
Nyní můžeme spustit stroje a vidět to na backup
existuje server Barman s výchozí konfigurací (a žádný PostgreSQL na pg
dosud). Pojďme se přihlásit do backup
:
$ vagrant ssh backup |
a podívejte se na /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 |
Dalším krokem je spuštění instance PostgreSQL na pg
. Musíme si být vědomi parametrů vyžadovaných Barmanem na PostgreSQL serveru, takže musíme nastavit:
wal_level
alespoň varchive
úroveňarchive_mode
doon
archive_command
aby bylo možné WAL zkopírovat nabackup
- pravidlo v
pg_hba.conf
pro přístup zebackup
Všechny tyto parametry lze snadno nastavit pomocí puppetlabs/postgresql
modul. Kromě toho na serveru Barman potřebujeme:
- připojovací řetězec PostgreSQL
- a
.pgpass
soubor pro ověření - příkaz SSH
- pro provedení výměny klíčů SSH
it2ndq/barman
vygeneruje soukromý/veřejný klíčový pár v ~barman/.ssh
. Automatická výměna klíčů mezi servery však vyžaduje přítomnost Puppet Mastera, což přesahuje cíle tohoto tutoriálu (bude součástí příštího dílu, který se zaměří na nastavení Puppet Master a barman::autoconfigure
class) – proto bude tento poslední krok proveden ručně.
Upravujeme site.pp
soubor takto:
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', } } |
Po změně manifestu musí být ustanovení znovu spuštěno:
$ vagrant provision |
Se spuštěnými stroji můžeme pokračovat ve výměně klíčů. Přihlásíme se na pg
:
$ vagrant ssh pg |
a vytvoříme klíčový pár pro postgres
uživatele pomocí ssh-keygen
, po zobrazení výzvy ponechte všechna pole prázdná (takže vždy stiskněte enter):
[email protected]:~$ sudo -iu postgres [email protected]:~$ ssh-keygen [email protected]:~$ cat .ssh/id_rsa.pub |
Poslední příkaz vydává dlouhý alfanumerický řetězec, který je třeba připojit k ~barman/.ssh/authorized_keys
soubor na backup
.
$ vagrant ssh backup [email protected]:~$ sudo -iu barman [email protected]:~$ echo "ssh-rsa ..." >> .ssh/authorized_keys |
Podobně zkopírujeme veřejný klíč barman
uživatele do authorized_keys
soubor postgres
uživatele na 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 |
V tomto okamžiku vytvoříme první spojení v obou směrech mezi dvěma servery:
[email protected]:$ ssh [email protected] [email protected]:$ ssh [email protected] |
Můžeme spustit barman check
pro ověření, že Barman funguje správně:
[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) |
Na každém řádku by mělo být „OK“. Nyní pro provedení zálohy jednoduše spusťte:
[email protected]:$ barman backup test-server |
Realistická konfigurace
Dosud používaná konfigurace Barmana je velmi jednoduchá, ale do site.pp
můžete snadno přidat několik parametrů a využívat všechny funkce Barmana, jako jsou zásady uchovávání a nové přírůstkové zálohování dostupné v Barman 1.4.0.
Tento tutoriál uzavíráme realistickým případem použití s následujícími požadavky:
- zálohování každou noc v 1:00
- možnost provedení bodového zotavení do libovolného okamžiku posledního týdne
- vždy mít k dispozici alespoň jednu zálohu
- nahlášení chyby prostřednictvím
barman check
v případě, že je nejnovější záloha starší než týden - povolení přírůstkového zálohování za účelem úspory místa na disku
Používáme file
Puppet zdroj k vytvoření .pgpass
soubor s parametry připojení a cron
zdroj pro generování úlohy, která se bude spouštět každou noc. Nakonec upravíme barman::server
přidat požadované parametry Barman.
Konečný výsledek je:
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'; } } |
Závěr
S 51 řádky manifestu Puppet se nám podařilo nakonfigurovat pár PostgreSQL/Barman serverů s nastavením podobným těm, které bychom mohli chtít na produkčním serveru. Spojili jsme výhody serveru Barman pro zpracování záloh s infrastrukturou spravovanou Puppet, opakovaně použitelnou a verzovatelnou.
V dalším a posledním příspěvku v této sérii článků se podíváme na to, jak používat Puppet Master k exportu prostředků mezi různými stroji, což umožňuje virtuálním počítačům vyměňovat si parametry potřebné pro správné fungování prostřednictvím barman::autoconfigure
class usnadňující celý proces nastavení.