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(https://github.com/puppetlabs/puppetlabs-postgresql/) k instalaci PostgreSQL napgVMit2ndq/barman(https://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 "https://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 = '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 |
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_levelalespoň varchiveúroveňarchive_modedoonarchive_commandaby bylo možné WAL zkopírovat nabackup- pravidlo v
pg_hba.confpro 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
.pgpasssoubor 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 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',
}
} |
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):
example@sqldat.com:~$ sudo -iu postgres example@sqldat.com:~$ ssh-keygen example@sqldat.com:~$ 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 example@sqldat.com:~$ sudo -iu barman example@sqldat.com:~$ echo "ssh-rsa ..." >> .ssh/authorized_keys |
Podobně zkopírujeme veřejný klíč barman uživatele do authorized_keys soubor postgres uživatele na 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 |
V tomto okamžiku vytvoříme první spojení v obou směrech mezi dvěma servery:
example@sqldat.com:$ ssh example@sqldat.com192.168.56.222 example@sqldat.com:$ ssh example@sqldat.com192.168.56.221 |
Můžeme spustit barman check pro ověření, že Barman funguje správně:
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) |
Na každém řádku by mělo být „OK“. Nyní pro provedení zálohy jednoduše spusťte:
example@sqldat.com:$ 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 checkv 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 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';
}
} |
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í.