Alta disponibilidade
com PostgreSQL
Leonardo Cezar, FISL #14 – Porto Alegre
1quinta-feira, 4 de julho de 13
Sobre o palestrante
DBA por profissão há mais de 10 anos;
Desenvolvedor por diversão;
Colaborador em alguns projetos opensource notavelmente
relacionados ao PostgreSQL;
Colaborador (quase ausente) na comunidade PostgreSQL
Brasil.
Atualmente trabalhando na DATAPREV
Dados Abertos; GIS; Big Data; BI; PostgreSQL
2quinta-feira, 4 de julho de 13
Agenda
Alta disponibilidade
Redundância
Balanceamento de carga
Arquitetura
Ferramentas
3quinta-feira, 4 de julho de 13
O que é alta disponibilidade?
Sistema resiliente com
suporte e prevenção à
falhas externas em seus
subsistemas.
4quinta-feira, 4 de julho de 13
Princípios da AD
Planejamento
Redundância
Persistência
Simplicidade (KIS)
5quinta-feira, 4 de julho de 13
Como identificar?
Acordo de Nível de Serviço
Requisitos não-funcionais
Carga transacional
Tempo de indisponibilidade (downtime)
Serviços parados impactam?
6quinta-feira, 4 de julho de 13
Objetivo
Aumentar o tempo médio entre falhas (MTBF)
Reduzir o tempo médio entre reparos (MTTR)
Minimizar a perda de dados
Prover escalabilidade
7quinta-feira, 4 de julho de 13
Objetivo
Reduzir SPOFs (pontos de falha)
Redução de downtime (período de inatividade)
Prover redundância (hardware e software)
8quinta-feira, 4 de julho de 13
Indisponibilidade
Programada
Manutenção, atualização
Não programada
Falha de rede
Falha de software
Falha de hardware
9quinta-feira, 4 de julho de 13
Indisponibilidade não programada
0
5
10
15
20
95,00% 96,00% 97,00% 98,00% 99,00% 99,9%
18
14
10
7
3
0
dias indisponíveis
10quinta-feira, 4 de julho de 13
Redundância
Provisionar hardware extra (preferencialmente com as
mesmas características)
Disponibilizar contingência de componentes de software e
serviços
Replicar informações e dados
11quinta-feira, 4 de julho de 13
Soluções de replicação
Disco compartilhado (não duplica os dados)
Réplica de storage
Cópia de sistema de arquivos
Replicação de instrução SQL
Replicação baseada em gatilhos
12quinta-feira, 4 de julho de 13
Utilitários
Bucardo
PgClusterRubyRep
PyReplicaLog Shipping
Londiste
Postgres-XC
Slony
XDB
repmgr
Streaming Replication
OMNIpitr
Sequoia
DRBD
PgPool-II
Wal-E
13quinta-feira, 4 de julho de 13
Qual utilizar?
Depende... :-)
Requisitos funcionais
Maturidade da solução
Suporte
14quinta-feira, 4 de julho de 13
Balanceamento de carga
Distribuição de carga em múltiplos servidores
Hot Standby (servidor em modo leitura)
15quinta-feira, 4 de julho de 13
PgPool-II
pgpool.conf
backend_hostname0 = ‘node1’
backend_weight0 = 1
backend_hostname1 = ‘node2’
backend_weight1 = 1
replication_mode = false
master_slave_mode = true
master_slave_sub_mode = ‘stream’
load_balance_mode = true
enable_query_cache = true
16quinta-feira, 4 de julho de 13
Agrupadores de conexão
Mantém um cache das conexões com o banco de dados
Desonera o impacto das conexões
Essencial quando existem muitas conexões (portal web, por
exemplo)
17quinta-feira, 4 de julho de 13
PgBouncer
pgbouncer.ini
[databases]
dbfoo = host=localhost dbname=postgres
listen_addr = ‘*’
[pgbouncer]
pool_mode = ‘transaction’
min_pool_size = 2000
[...]
18quinta-feira, 4 de julho de 13
Replicação nativa no Postgres
Master/Slave
Arquivos de log de transação (WAL)
Warm standby
Hot standby
Streaming Replication ([as]síncrono SR)
Bases mais consistentes
Streaming de registros WAL (walsender/walreceiver)
19quinta-feira, 4 de julho de 13
Streaming Replication
postgresql.conf
wal_level = hot_standby
max_wal_senders = 5
wal_keep_segments = 32
archive_command = ‘rsync %p foo@bar:/
archive/%f’
20quinta-feira, 4 de julho de 13
Streaming Replication (cont.)
pg_basebackup -H <host> -R -D $PGDATA
recovery.conf
primary_conninfo = “host=node1”
pg_ctl start
pg_ctl promote # switchover
21quinta-feira, 4 de julho de 13
Sistema operacional – AD
Pacemaker
gerenciador de recursos
Corosync
Camada de mensagens
Resource Agent (RA)
Scripts para controle do serviço (LSB ou OCFs)
22quinta-feira, 4 de julho de 13
Arquitetura SR
23quinta-feira, 4 de julho de 13
Bucardo – multimaster
Configuração bucardo
# aptitude install bucardo
# bucardo install
# bucardo add database foo host=node1
# bucardo add database bar host=node2
# bucardo add all tables db=foo
# bucardo add sync foobar source=default
targetdb=bar
# bucardo start
24quinta-feira, 4 de julho de 13
O que vem por aí?
Replicação multimaster nativa
BIDR (BiDirection Replication)
LLSR (Logical Log Streaming Replication)
1o. passo postgres 9.3
fast failover
arquitetura independente e “remastering”
BgWorkers customizados
25quinta-feira, 4 de julho de 13
Próximos eventos
Conferência PostgreSQL – PGBR 2013 (antigo PgCon)
15-17, agosto
Brasil, Porto Velho, RO
http://pgbr.postgresql.org.br
Postgres Open 2013; 16-18, setembro, Chicago, US
http://postgresopen.org/
PostgreSQL Conference Europe, Dublin, Ireland
http://2013.pgconf.eu/
26quinta-feira, 4 de julho de 13
Obrigado!
lhcezar
lhcezar
lhcezar
27quinta-feira, 4 de julho de 13

Alta disponibilidade com PostgreSQL