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