alta disponibilidade com postgresql
DESCRIPTION
Esta palestra demonstra alguns elementos relacionados à alta disponibilidade com PostgreSQL. São discutidos assuntos como redundância, replicação e utilitários de gerenciamento de ambientes de contingência: log shipping, WAL, streaming replication e outros. Espero que seja útil, faça uma boa leitura e qualquer dúvida contate-me!TRANSCRIPT
Alta disponibilidade com PostgreSQL
Leonardo Cezar, FISL #14 – Porto Alegre
1quinta-feira, 4 de julho de 13
Sobre o palestranteDBA 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; PostgreSQL2quinta-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
IndisponibilidadeProgramada
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
PgClu
ster
RubyRep
PyRe
plicaLog Shipping
Londiste
Postgres-XCSlony
XDB
repmgr
Streaming Replication
OMNI
pitr
SequoiaDRBD
PgPool-IIWal-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-IIpgpool.conf
backend_hostname0 = ‘node1’backend_weight0 = 1backend_hostname1 = ‘node2’backend_weight1 = 1replication_mode = falsemaster_slave_mode = truemaster_slave_sub_mode = ‘stream’load_balance_mode = trueenable_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
PgBouncerpgbouncer.ini
[databases]dbfoo = host=localhost dbname=postgreslisten_addr = ‘*’[pgbouncer]pool_mode = ‘transaction’min_pool_size = 2000[...]
18quinta-feira, 4 de julho de 13
Replicação nativa no PostgresMaster/SlaveArquivos de log de transação (WAL)
Warm standbyHot standby
Streaming Replication ([as]síncrono SR)Bases mais consistentesStreaming de registros WAL (walsender/walreceiver)
19quinta-feira, 4 de julho de 13
Streaming Replicationpostgresql.conf
wal_level = hot_standbymax_wal_senders = 5wal_keep_segments = 32archive_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 – ADPacemaker
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 – multimasterConfiguraçã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 customizados25quinta-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