Esta não é a primeira vez que o 2ndQuadrant analisa o Puppet. Gabriele Bartolini já escreveu um artigo em duas partes sobre como configurar rapidamente um servidor PostgreSQL através do Puppet e do Vagrant, acompanhado do lançamento do código usado no exemplo no GitHub (http://github.com/2ndquadrant-it/vagrant -puppet-postgresql).
Dividido em três partes, o objetivo deste artigo é demonstrar a automação da instalação e configuração do Barman para backup de um servidor de teste PostgreSQL.
Este artigo é uma atualização do que foi escrito por Gabriele com a ideia de criar duas máquinas virtuais ao invés de uma, um servidor PostgreSQL e um servidor Barman.
it2ndq/barman
é o módulo lançado pela 2ndQuadrant Italy para gerenciar a instalação do Barman através do Puppet. O módulo possui licença GPLv3 e está disponível no GitHub no endereço http://github.com/2ndquadrant-it/puppet-barman. O procedimento a seguir foi escrito para um Ubuntu 14.04 Trusty Tahr, mas pode ser executado de maneira semelhante em outras distribuições. Requisitos
Para iniciar o módulo do Barman em uma máquina virtual, precisamos do seguinte software:
- VirtualBox
- Vagabunda
- Rubi>=1,9
- Marionete
- bibliotecário-fantoche
Vagabundo
Vagrant é um gerenciador de máquinas virtuais, capaz de suportar muitos softwares de virtualização com VirtualBox como padrão.
Instalamos o VirtualBox desta forma:
$ sudo apt-get install virtualbox virtualbox-dkms |
A última versão do Vagrant pode ser baixada do site e instalada com o comando:
$ sudo dpkg -i /path/to/vagrant_1.7.2_x86_64.deb |
Rubi
Em relação ao Ruby, nosso conselho é usar
rbenv
, que cria um ambiente de desenvolvimento Ruby no qual especificar a versão para o usuário atual, evitando assim a contaminação do ambiente do sistema. Para instalar o rbenv
sugerimos usar o rbenv-installer
(http://github.com/fesplugas/rbenv-installer). Vamos baixar e executar o script:
$ curl https://raw.githubusercontent.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash |
No final, o script solicitará que você anexe as seguintes linhas ao
~/.bash_profile
Arquivo: export RBENV_ROOT="${HOME}/.rbenv" if [ -d "${RBENV_ROOT}" ]; then export PATH="${RBENV_ROOT}/bin:${PATH}" eval "$(rbenv init -)" fi |
Agora precisamos recarregar o
~/.bash_profile
recém-alterado : $ exec bash -l |
Neste ponto, instalamos localmente uma versão do Ruby (neste caso, 2.1.5) e configuramos o usuário para executar esta versão em vez da versão do sistema:
$ rbenv install 2.1.5 $ rbenv global 2.1.5 |
Fantoche
O Puppet é necessário não apenas nas VMs, mas também na máquina que as executa. Portanto, precisamos instalar a gem Puppet.
$ gem install puppet |
Bibliotecário-fantoche
Por fim,
librarian-puppet
é uma ferramenta para automatizar o gerenciamento dos módulos Puppet. Como Puppet, librarian-puppet
pode ser instalado como uma gem: $ gem install librarian-puppet |
Vagrant:configuração
Agora que temos as dependências no lugar, podemos começar a escrever as configurações Vagrant e Puppet para nosso sistema de backup.
Começamos criando um diretório de trabalho:
$ mkdir ~/vagrant_puppet_barman $ cd ~/vagrant_puppet_barman |
Vagrant precisa que escrevamos um arquivo chamado
Vagrantfile
onde procura a configuração das VMs. O seguinte
Vagrantfile
inicia duas VMs do Ubuntu Trusty, chamadas pg
e backup
, com endereços IP 192.168.56.221
e 192.168.56.222
. Em ambas as máquinas, o provisionamento será realizado por meio de um script de shell embutido. Este script inicia o
puppet-bootstrap
(http://github.com/hashicorp/puppet-bootstrap), um script que instala e configura automaticamente o Puppet em vários tipos de máquinas. Como não precisa ser executado mais de uma vez, no script foi inserido um teste para evitar futuras execuções. 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 end end end |
Abrindo as VMs
Definimos duas VMs Ubuntu Trusty contendo Puppet. Este não é o
Vagrantfile
final mas já permite a criação das duas máquinas. Caso tenha curiosidade, é possível verificar se as duas máquinas foram criadas com o comando: $ vagrant up |
e, em seguida, conectar usando os seguintes comandos:
$ vagrant ssh pg $ vagrant ssh backup |
Finalmente, as máquinas podem ser destruídas com:
$ vagrant destroy -f |
Conclusões
Nesta primeira parte do tutorial vimos como configurar as dependências e acabamos com as duas máquinas virtuais nas quais vamos instalar, via Puppet, PostgreSQL e Barman. Escrever o manifesto Puppet para a instalação real será o assunto do próximo artigo.
Adeus por agora!