Blog do Seba

DBA, Consultor, Instrutor, [aprendiz de] Ninja e metido a Chef nas horas vagas!

Desafio sobre a replicação do PostgreSQL!

Created in Jan 21, 2016 - Last update on Mar 11, 2017

300 Words. Read in about 2 Min.
Categories: PostgreSQL
Tags: Database Replication PostgreSQL

Esse ano, segundo fontes confiáveis, é aniversário da Comunidade Brasileira de PostgreSQL. E pra fazer a minha parte (e tirar a poeira do blog) eu lanço um desafio público: falar sobre a replicação do PostgreSQL. E isso não é pouca coisa!

Até o momento, essas são as soluções mais populares:

A proposta

A idéia é fazer um ambiente de testes utilizando a versão mais recente do banco e da solução cobrindo os pontos abaixo:

  • Instalação e configuração
  • Operação basica para replicar dados ou conjunto de dados
  • Procedimentos que previnem tolerancia a falhas
  • Validar meios para replicar dados distribuidos geograficamente
  • Medição dos tempos de carga intensa (como o restore do banco) e moderado (como a atualização de dados e tudo mais)
  • Avaliação de pontos fortes e fracos

Sobre o ambiente de testes

Quanto a máquina virtual dos testes

Pra simplificar o processo de setup do lab, eu criei uma configuração do Vagrant composta de duas máquinas virtuais na configuração abaixo:

  • 2GB de RAM
  • 35GB espaço em disco
  • CEntOS 7 64 Bits
  • Repositórios configurados: epel, pgdg94 e pgdg95

Detalhes da configuração de rede:

Hostname IP
master 192.168.100.100
slave 192.168.100.200

Abaixo segue o Vagrantfile:

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "centos/7"
config.vm.provider "virtualbox" do |vb|
vb.gui = false
vb.memory = "2048"
end
config.vm.provision :shell, inline: "sudo yum install -y epel-release https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm"
config.vm.provision :shell, inline: "sudo yum install -y postgresql96-server postgresql96-contrib vim "
config.vm.define "master" do |master|
master.vm.hostname = "masterdb"
master.vm.network "private_network", ip: "192.168.100.100"
end
config.vm.define "slave" do |slave|
slave.vm.hostname = "slavedb"
slave.vm.network "private_network", ip: "192.168.100.200"
end
end
view raw Vagrantfile.rb hosted with ❤ by GitHub

Para utiliza-lo, execute:

mkdir desafio_pgsql
cd desafio_pgsql
wget https://gist.githubusercontent.com/sebastianwebber/d49ac8507d48c9cfdc4f/raw/a2e04de075512af61c163ee8511082ab76fb5eaf/Vagrantfile.rb -O Vagrantfile
vagrant up
view raw setup.sh hosted with ❤ by GitHub

Quanto a base de dados

A base de testes adotada é o banco do IMDB. Pra simplificar o processo de importação e teste eu já deixei um dump prontinho na URL abaixo:

http://1drv.ms/1TjlPXl

Detalhes pra importação do dump são os de sempre:

createdb -U postgres imdb
pg_restore -U postgres -d imdb -Fc --disable-triggers imdb.dump -j 4
vacuumdb -U postgres -d imdb -z

Na sequência já publico detalhes de como popular e alterar os dados.

E aí, vai encarar?

Comentários