Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
BBaacckkuupp pprroovviissiioonniinngg 
wwiitthh bbaaccuullaa aanndd ppuuppppeett 
Dave Simons 
OSBConf 2014-09
DDaavvee SSiimmoonnss 
● LLiinnuuxx aanndd OOppeenn SSoouurrccee CCoonnssuullttaanntt @@ iinnuuiittss..eeuu 
● @@mmiioouuh...
IInnuuiittss..eeuu 
● OOppeenn ssoouurrccee ccoonnssuullttaannccyy ccoommppaannyy 
● SSyysstteemm aaddmmiinniissttrraattii...
BBaaccuullaa 
● NNeettwwoorrkkeedd bbaacckkuupp ssyysstteemm 
● WWrriitttteenn iinn CC++++ 
● RRuunnss oonn UUNNIIXX,, MMa...
ccoommppoonneennttss 
● DDiirreeccttoorr 
● SSttoorraaggee ddaaeemmoonn 
● FFiillee ddaaeemmoonn 
● CCaattaalloogg ((ddaat...
oovveerrvviieeww
CCllaassssiicc sseettuupp 
● IInnssttaallll//ccoonnfifigguurree ddiirreeccttoorr 
● IInnssttaallll//ccoonnfifigguurree cca...
WWhhaatt''ss wwrroonngg wwiitthh tthhaatt??
LLoottss ooff tthhiinnggss!! 
● TTiimmee ccoonnssuummiinngg 
● EErrrroorr pprroonnee 
● RReeppeettiittiivvee ((pprroonnoou...
PPuuppppeett 
● CCoonnfifigguurraattiioonn mmaannaaggeemmeenntt ttooooll 
● WWrriitttteenn iinn RRuubbyy 
● SSeerrvveerr--...
ccoommppoonneennttss 
● PPuuppppeett mmaasstteerr 
● PPuuppppeett aaggeenntt 
● PPuuppppeett aappppllyy 
● HHiieerraa 
● P...
oovveerrvviieeww
PPuuppppeett aappppllyy 
● SSuubbccoommmmaanndd 
● CCoommppiilleess ccaattaalloogg 
● EExxeeccuutteess ccaattaalloogg
hhiieerraa 
● DDaattaassttoorree 
● AAbbssttrraacctt ccooddee//ddaattaa 
● YYAAMMLL 
● AAddjjuussttaabbllee hhiieerraarrcc...
hhiieerraaddaattaa 
[simonsd@shinku][inuits]$ tree -L 2 hiera 
hiera/ 
├── common.yaml 
├── clients 
│ └── production 
│ └...
PPuuppppeett llaanngguuaaggee 
● RRuubbyy DDSSLL 
● RReessoouurrcceess 
• RReegguullaarr 
• VViirrttuuaall 
• eexxppoorrtt...
rreessoouurrccee ttyyppeess 
● CCrroonn 
● EExxeecc 
● FFiillee 
● GGrroouupp 
● UUsseerr 
● MMoouunntt 
● PPaacckkaaggee ...
PPuuppppeett ttrreeee 
[simonsd@shinku][inuits]$ tree -L 2 puppet/ 
puppet/ 
├── manifests 
│ ├── classes 
│ ├── defaults ...
llooaaddiinngg 
● MMaannuuaall iimmppoorrttss 
● AAuuttoollooaaddiinngg mmaaggiicc 
[simonsd@shinku][puppet]$ cat manifest...
mmoodduulleess 
[simonsd@shinku][puppet]$ tree example-module/ 
example-module/ 
├── manifests 
│ ├── init.pp 
├── templat...
bbaassiicc mmaanniiffeesstt 
[simonsd@shinku][puppet]$ cat modules/bacula/manifests/bconsole.pp 
class bacula::bconsole ( ...
bbaassiicc tteemmppllaattee 
[simonsd@shinku][puppet]$ cat modules/bacula/templates/bconsole.conf.erb 
### File managed wi...
VViirrttuuaall rreessoouurrcceess 
@file{'/tmp/foo': 
content => 'bar', 
tag => 'someproject', 
} 
realize File['/tmp/foo'...
eexxppoorrtteedd rreessoouurrcceess 
@@nagios_service{'check_bacula_fd-bacula-fd.prod.example.com': 
check_command => 'che...
ppuuppppeett--bbaaccuullaa mmoodduullee 
ttrreeee [simonsd@shinku][puppet]$ tree modules/bacula/ 
modules/bacula/ 
├── man...
ccoonnfifigguurree ddiirreeccttoorr 
[simonsd@shinku][puppet]$ cat manifests/classes/bacula-dir.pp 
class 'bacula-dir' { 
...
ccoonnfifigguurree ssttoorraaggee 
ddaaeemmoonn 
[simonsd@shinku][puppet]$ cat manifests/classes/bacula-sd.pp 
class 'bacu...
ccoonnfifigguurree fifillee ddaaeemmoonn 
[simonsd@shinku][puppet]$ cat manifests/classes/bacula-fd.pp 
class 'bacula-fd' ...
OOtthheerr ooppttiioonnss 
● CChheeff 
● AAnnssiibbllee 
● SSaalltt 
● CCffeennggiinnee 
● BBccffgg22 
● BBaarreeooss 
● R...
QQuueessttiioonnss??
Nächste SlideShare
Wird geladen in …5
×

Automating backup provisioning with Bacula and Puppet

2.234 Aufrufe

Veröffentlicht am

Automating backup provisioning with bacula and puppet

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

Automating backup provisioning with Bacula and Puppet

  1. 1. BBaacckkuupp pprroovviissiioonniinngg wwiitthh bbaaccuullaa aanndd ppuuppppeett Dave Simons OSBConf 2014-09
  2. 2. DDaavvee SSiimmoonnss ● LLiinnuuxx aanndd OOppeenn SSoouurrccee CCoonnssuullttaanntt @@ iinnuuiittss..eeuu ● @@mmiioouuhhppii ● ggiitthhuubb..ccoomm//ssiimmoonnssdd
  3. 3. IInnuuiittss..eeuu ● OOppeenn ssoouurrccee ccoonnssuullttaannccyy ccoommppaannyy ● SSyysstteemm aaddmmiinniissttrraattiioonn ● WWeebb ddeevveellooppmmeenntt ● SSoommee eemmbbeeddddeedd ddeevveellooppmmeenntt ● OOffifficceess iinn BBeellggiiuumm,, NNeetthheerrllaannddss,, UUkkrraaiinnee aanndd CCzzeecchh
  4. 4. BBaaccuullaa ● NNeettwwoorrkkeedd bbaacckkuupp ssyysstteemm ● WWrriitttteenn iinn CC++++ ● RRuunnss oonn UUNNIIXX,, MMaacc aanndd WWiinnddoowwss ● OOppeenn ssoouurrccee
  5. 5. ccoommppoonneennttss ● DDiirreeccttoorr ● SSttoorraaggee ddaaeemmoonn ● FFiillee ddaaeemmoonn ● CCaattaalloogg ((ddaattaabbaassee)) ● SSttoorraaggee bbaacckkeenndd ● FFiirreewwaallll ● IInntteerrffaaccee
  6. 6. oovveerrvviieeww
  7. 7. CCllaassssiicc sseettuupp ● IInnssttaallll//ccoonnfifigguurree ddiirreeccttoorr ● IInnssttaallll//ccoonnfifigguurree ccaattaalloogg ● IInnssttaallll//ccoonnfifigguurree ssttoorraaggee ddaaeemmoonn ● IInnssttaallll//ccoonnfifigguurree ssttoorraaggee bbaacckkeenndd ● IInnssttaallll//ccoonnfifigguurree fifillee ddaaeemmoonn 11 ● IInnssttaallll//ccoonnfifigguurree fifillee ddaaeemmoonn 22 ● IInnssttaallll//ccoonnfifigguurree fifillee ddaaeemmoonn NN
  8. 8. WWhhaatt''ss wwrroonngg wwiitthh tthhaatt??
  9. 9. LLoottss ooff tthhiinnggss!! ● TTiimmee ccoonnssuummiinngg ● EErrrroorr pprroonnee ● RReeppeettiittiivvee ((pprroonnoouunncceedd //bboohhrr--iinngg//))
  10. 10. PPuuppppeett ● CCoonnfifigguurraattiioonn mmaannaaggeemmeenntt ttooooll ● WWrriitttteenn iinn RRuubbyy ● SSeerrvveerr--cclliieenntt mmooddeell ● SSttaannddaalloonnee ● OOppeenn ssoouurrccee ● RRuunnss oonn UUNNIIXX,, MMaacc aanndd WWiinnddoowwss
  11. 11. ccoommppoonneennttss ● PPuuppppeett mmaasstteerr ● PPuuppppeett aaggeenntt ● PPuuppppeett aappppllyy ● HHiieerraa ● PPuuppppeettddbb ● MMccoolllleeccttiivvee ● ddaasshhbbooaarrdd//ffoorreemmaann
  12. 12. oovveerrvviieeww
  13. 13. PPuuppppeett aappppllyy ● SSuubbccoommmmaanndd ● CCoommppiilleess ccaattaalloogg ● EExxeeccuutteess ccaattaalloogg
  14. 14. hhiieerraa ● DDaattaassttoorree ● AAbbssttrraacctt ccooddee//ddaattaa ● YYAAMMLL ● AAddjjuussttaabbllee hhiieerraarrcchhyy --- :backends: - yaml :logger: console :hierarchy: - clients/%{environment}/%{hostname} - roles/%{environment}/%{role} - roles/common/%{role} - hypervisors/%{hypervisor} - locations/%{datacenter} - environments/%{environment} - common :yaml: :datadir: /etc/puppet/hieradata
  15. 15. hhiieerraaddaattaa [simonsd@shinku][inuits]$ tree -L 2 hiera hiera/ ├── common.yaml ├── clients │ └── production │ └── client1.yaml │ └── client2.yaml │ └── client3.yaml ├── environments │ └── production.yaml ├── hypervisors │ ├── hv1.example.com.yaml │ ├── hv2.example.com.yaml │ └── hv3.example.com.yaml ├── locations │ ├── dc1.yaml │ ├── dc2.yaml │ └── dc3.yaml
  16. 16. PPuuppppeett llaanngguuaaggee ● RRuubbyy DDSSLL ● RReessoouurrcceess • RReegguullaarr • VViirrttuuaall • eexxppoorrtteedd ● CCllaasssseess ● MMaanniiffeessttss ● MMoodduulleess
  17. 17. rreessoouurrccee ttyyppeess ● CCrroonn ● EExxeecc ● FFiillee ● GGrroouupp ● UUsseerr ● MMoouunntt ● PPaacckkaaggee ● SSeerrvviiccee file{'/usr/local/bin/mysql-backup': content => template('mysql-backup'), owner => 'root', group => 'root', mode => '0755', } cron{'mysql-backup': command => '/usr/local/bin/mysql-backup', user => 'root', hour => '00', minute => '15', require => File['/usr/local/bin/mysql-backup', } user{'bacula': ensure => 'present', uid => '712', gid => 'bacula', password => 'secret', home => '/home/bacula', shell => '/bin/sh', }
  18. 18. PPuuppppeett ttrreeee [simonsd@shinku][inuits]$ tree -L 2 puppet/ puppet/ ├── manifests │ ├── classes │ ├── defaults │ ├── hosts │ └── site.pp ├── modules │ ├── activemq │ ├── apache │ ├── apc │ ├── apt │ ├── augeas │ ├── bacula │ ├── bash │ ├── bind │ ├── collectd │ ├── concat │ ├── crond │ ├── customers │ ├── dell │ ├── drupal │ ├── ejabberd │ ├── elasticsearch │ ├── fail2ban │ ├── ffmpeg │ ├── filemapper │ ├── firewall │ ├── foreman │ ├── ganbatte │ ├── gdash │ ├── gitolite │ ├── gitorious │ ├── graphite │ ├── grok │ ├── icinga │ ├── inifile │ ├── inuits │ ├── ...
  19. 19. llooaaddiinngg ● MMaannuuaall iimmppoorrttss ● AAuuttoollooaaddiinngg mmaaggiicc [simonsd@shinku][puppet]$ cat manifests/site.pp import 'defaults/*.pp' import 'classes/*.pp' import 'hosts/*.pp' [simonsd@shinku][puppet]$ puppet apply --modulepath=/etc/puppet/environments/productio n/modules site.pp [simonsd@shinku][puppet]$ cat puppet.conf <snip> [master] manifest = $confdir/environments/$environment/manifests/site.pp modulepath = $confdir/environments/$environment/modules <snip>
  20. 20. mmoodduulleess [simonsd@shinku][puppet]$ tree example-module/ example-module/ ├── manifests │ ├── init.pp ├── templates ├── files ├── lib ├── facts.d ├── tests ├── spec
  21. 21. bbaassiicc mmaanniiffeesstt [simonsd@shinku][puppet]$ cat modules/bacula/manifests/bconsole.pp class bacula::bconsole ( $config_root = $::bacula::params::config_root, $bconsole_pkgname = $::bacula::params::bconsole_pkgname, $director_server = $::bacula::params::director_server, $director_port = $::bacula::params::director_port, $director_password = $::bacula::params::director_password, ) inherits ::bacula::params { package{“$bconsole_pkgname”: ensure => 'present', } file{"${config_root}/bconsole.conf": ensure => 'file', owner => 'root', group => 'root', mode => '0640', content => template('bacula/bconsole.conf.erb'), require => Package[$bconsole_pkgname], } }
  22. 22. bbaassiicc tteemmppllaattee [simonsd@shinku][puppet]$ cat modules/bacula/templates/bconsole.conf.erb ### File managed with puppet ### ### Served by: '<%= scope.lookupvar('::servername') %>' ### Module: '<%= scope.to_hash['module_name'] %>' ### Template source: '<%= template_source %>' ## List Directors we connect to # Director { name = "<%= director_server %>" dirport = "<%= director_port %>" address = "<%= director_server %>" password = "<%= director_password %>" }
  23. 23. VViirrttuuaall rreessoouurrcceess @file{'/tmp/foo': content => 'bar', tag => 'someproject', } realize File['/tmp/foo'] File <| tag='someproject' |>
  24. 24. eexxppoorrtteedd rreessoouurrcceess @@nagios_service{'check_bacula_fd-bacula-fd.prod.example.com': check_command => 'check_nrpe_command!check_bacula_fd', service_description => 'bacula-fd.prod.example.com', host_name => 'bacula-fd.prod.example.com', target => "${::icinga::targetdir}/services/bacula-fd.prod.example.com.cfg", notify => Service[$::icinga::service_server], tag => 'bacula', } Nagios_service <<| name='check_bacula_fd-bacula-fd.prod.example.com' |>> Nagios_service <<| tag='bacula' |>>
  25. 25. ppuuppppeett--bbaaccuullaa mmoodduullee ttrreeee [simonsd@shinku][puppet]$ tree modules/bacula/ modules/bacula/ ├── manifests │ ├── bconsole.pp │ ├── catalog.pp │ ├── client.pp │ ├── common.pp │ ├── default │ │ ├── filesets.pp │ │ ├── jobdefs.pp │ │ ├── pools.pp │ │ └── schedules.pp │ ├── device.pp │ ├── director │ │ ├── config.pp │ │ ├── install.pp │ │ └── service.pp │ ├── director.pp │ ├── fd │ │ ├── config.pp │ │ ├── install.pp │ │ └── service.pp │ ├── fd.pp │ ├── fileset.pp │ ├── firewall │ │ ├── dir.pp │ │ ├── fd.pp │ │ └── sd.pp │ ├── firewall.pp │ ├── init.pp │ ├── jobdefs.pp │ ├── job.pp │ ├── messages.pp │ ├── params.pp │ ├── pool.pp │ ├── schedule.pp │ ├── sd │ │ ├── config.pp │ │ ├── install.pp │ │ └── service.pp │ ├── sd.pp │ └── storage.pp └── templates ├── bacula-dir.conf.erb ├── bacula-fd.conf.erb ├── bacula-sd.conf.erb
  26. 26. ccoonnfifigguurree ddiirreeccttoorr [simonsd@shinku][puppet]$ cat manifests/classes/bacula-dir.pp class 'bacula-dir' { class{'::bacula::director': log_email => 'logs@example.com', from_email => 'bacula@example.com', } bacula::catalog{“bacula-${::domain}”: dbname => hiera('bacula-dbname'), dbuser => hiera('bacula-dbuser'), dbpassword => hiera('bacula-dbpass'), dbhost => hiera('bacula-dbhost'), } @@percona::database{“bacula-${::domain}”: ensure => 'present', } @@percona::rights{“bacula-${::domain}”: ensure => 'present', database => hiera('bacula-prod-dbname'), user => hiera('bacula-prod-dbuser'), password => hiera('bacula-prod-dbpass'), host => hiera('bacula-prod-dbhost'), priv => 'all', } @@nagios_service{“check_bacula_dir-${::fqdn}”: check_command => 'check_nrpe_command!check_bacula_dir', service_description => "Bacula-dir: ${::fqdn}", host_name => $::fqdn, target => "${::icinga::targetdir}/services/${::fqdn}.cfg", notify => Service[$::icinga::service_server], } }
  27. 27. ccoonnfifigguurree ssttoorraaggee ddaaeemmoonn [simonsd@shinku][puppet]$ cat manifests/classes/bacula-sd.pp class 'bacula-sd' { class{'::bacula::sd': storage_dir => hiera('bacula-storage-dir', '/srv/backup/bacula'), } @@nagios_service{'check_bacula_sd-${::fqdn}': check_command => 'check_nrpe_command!check_bacula_sd', service_description => "Bacula-sd: ${::fqdn}", host_name => $::fqdn, target => "${::icinga::targetdir}/services/${::fqdn}.cfg", notify => Service[$::icinga::service_server], } }
  28. 28. ccoonnfifigguurree fifillee ddaaeemmoonn [simonsd@shinku][puppet]$ cat manifests/classes/bacula-fd.pp class 'bacula-fd' { class{'::bacula::fd': storage_server => hiera('bacula_default_storage_server', “bacula-sd.${::domain}”), director_server => hiera('bacula_director_server', 'bacula'), storage_dir => hiera('bacula_storage_dir', '/srv/backup/bacula'), catalog => hiera('bacula_catalog', “bacula-${::domain}”), } @@bacula::job{$::fqdn: client => hiera('bacula_hostname', $::fqdn), jobdefs => hiera('bacula_jobdef', 'DefaultJob'), fileset => hiera('bacula_fileset', false), messages => hiera('bacula_messages', 'bacula-fd'), storage => hiera('bacula_storage', "${::fqdn}-storage"), full_pool => hiera('bacula_fullpool', "${::fqdn}-Full"), incremental_pool => hiera('bacula_incpool', "${::fqdn}-Incremental"), bschedule => hiera('bacula_schedule', 'default'), client_run_before_job => hiera('bacula_client_run_before_job', false), client_run_after_job => hiera('bacula_client_run_after_job', false), } @@bacula::pool{"${::fqdn}-Full":} @@bacula::pool{"${::fqdn}-Incremental": maximum_volumes => '7', } @@nagios_service{'check_bacula_fd-${::fqdn}': check_command => 'check_nrpe_command!check_bacula_fd', service_description => "Bacula-fd: ${::fqdn}", host_name => $::fqdn, target => "${::icinga::targetdir}/services/${::fqdn}.cfg", notify => Service[$::icinga::service_server], } }
  29. 29. OOtthheerr ooppttiioonnss ● CChheeff ● AAnnssiibbllee ● SSaalltt ● CCffeennggiinnee ● BBccffgg22 ● BBaarreeooss ● RRssyynncc ● RRssnnaappsshhoott ● RRddiiffff ● BBaacckkuupp nniinnjjaa
  30. 30. QQuueessttiioonnss??

×