sql >> Databáze >  >> RDS >> PostgreSQL

Automatizace barmana s loutkou:it2ndq/barman (část druhá)

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:

  1. puppetlabs/postgresql (http://github.com/puppetlabs/puppetlabs-postgresql/) k instalaci PostgreSQL na pg VM
  2. it2ndq/barman (http://github.com/2ndquadrant-it/puppet-barman) k instalaci Barmana na backup

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ň v archive úroveň
  • archive_mode do on
  • archive_command aby bylo možné WAL zkopírovat na backup
  • pravidlo v pg_hba.conf pro přístup ze backup

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í.


  1. Podpora SQLAlchemy pro schémata Postgres

  2. Jak snadno nasadit TimescaleDB

  3. Jak zkontrolovat databázi Oracle pro dlouho běžící dotazy

  4. Připojení Delphi na Linuxu k SQL Serveru