PostgreSQL: Replicação com
RepManager (repmgr)
Vinicius Vale
2
Quem sou
➢Bacharel em Ciência da
Computação;
➢MBA em BigData;
➢Especialista Postgresql;
➢Especialista Java/Android;
➢Devops pela 4Linux;
Vinicius Aquino do Vale
3
Conhecendo a 4Linux
➢ Metodologia IT Experience - Cenários reais
➢ Cursos práticos, rápidos e baratos de
autores feras: www.4shot.com.br
➢ Projetos complexos de missão crítica,
com infra e desenvolvimento PHP
4
Cursos práticos, rápidos e baratos de
autores feras
5
Metodologia IT Experience
Cenários reais
6
Lançamento 4Linux
7
Ao final da minha palestra
➢ 02 Curso Online:
➢ Curso SQL para Programadores – Código
4800.
➢ 01 Elephant.
8
Ao final da minha palestra
9
Agenda
➢Replicação Nativa;
➢Limitações e Problemas;
➢Um novo mundo : RepMgr;
➢Vantagens e Facilidades;
➢Gerenciamento (replicação e failover);
➢Considerações Finais;
10
Replicação Nativa - Conceito
➢Réplica? Pra quê?
Vantagens:
➢Leituras (OLAP)
➢Failover
Desvantagens:
➢Master->Slave
➢Gerenciamento
(Virada)
11
Passo a Passo
Master:
➢ Criar usuário – REPLICATION;
➢ Liberar pg_hba;
➢ postgresql.conf:
➢wal_level;
➢wal_keep_segments;
➢max_wal_senders.
12
Passo a Passo
Slave (pg_basebackup):
➢ postgresql.conf:
➢hot_standby;
➢max_standby_archive_delay;
➢max_standby_streaming_delay.
13
Passo a Passo
Slave:
➢ recovery.conf:
➢standby_mode;
➢primary_conninfo;
➢trigger_file.
14
Limitações e Problemas
➢Tipos de Replicação
➢Assíncrona (default);
➢Síncrona;
15
Limitações e Problemas
➢ Réplica Assíncrona (default):
➢ Perda de algumas transações;
16
Limitações e Problemas
➢ Réplica Síncrona:
➢ Slave parado = Master Parado;
➢ Tempo total = master + tráfego pela rede + slave + retorno;
17
Limitações e Problemas
Múltiplas réplicas:
➢ Novo Master;
➢ O que eu faço com os meus slaves?
➢ O que eu faço com meu antigo master?
18
Repmgr: Um Novo mundo
➢ O que é?
➢ Desenvolvido pela 2ndQuadrant;
➢ Open-Source;
➢ Free;
➢ Versões:
➢ 2.0;
➢ 3.0.
19
Vantagens e Facilidades
Gerenciamento de Réplicas:
➢ Monitoramento:
➢$ repmgr cluster show;
Role | Connection String
* master | host=node1 user=repmgr_usr dbname=repmgr_db
password=123456
standby | host=node2 user=repmgr_usr dbname=repmgr_db
password=123456
➢ Failover (daemon repmgrd);
➢ Failback.
20
Gerenciamento (preparação Postgresql)
Gerenciamento de Réplicas:
➢ Usuário:
➢$ createuser -s repmgr_usr;
➢ Database:
➢$ createdb repmgr_db -O repmgr_usr;
➢ pg_hba.conf:
➢host repmgr_db repmgr_usr ip/24 trust;
➢host replication repmgr_usr ip/24 trust;
21
Gerenciamento (preparação Postgresql)
➢ Master – postgresql.conf:
➢ hot_standby = on;
➢ wal_level = hot_standby;
➢ max_wal_senders;
➢ wal_keep_segments:
➢9.4 – Utiliza slot de replicação;
➢9.3 – Espera-se 5000 (80GB de WAL);
➢ archive_mode = on
➢ archive_command = 'cd .'
22
Gerenciamento (repmgr.conf)
➢ Local Recomendado:
➢ /etc/repmgr/repmgr.conf;
➢ repmgr.conf:
➢ cluster=DBZ (mesmo para todos os hosts);
➢ node=1 (integer – único);
➢ node_name=node1 (único);
➢ pg_bindir=/path/to/postgres/bin;
23
Gerenciamento (repmgr.conf)
➢ use_replication_slots=1
➢ conninfo='host=repmgr_node1 user=repmgr dbname=repmgr';
24
Gerenciamento (repmgr)
➢ register – Registrar os nós:
➢ $ repmgr -f repmgr.conf --verbose master register;
➢ $ repmgr -f repmgr.conf --verbose standby register;
➢ clone – Preparar standby:
➢ $ repmgr -D $PGDATA -f repmgr.conf -d repmgr_db -U
repmgr_usr --verbose standby clone IP_MASTER
25
Gerenciamento (repmgr)
➢ promote – Promover um novo master:
➢ $ repmgr -f repmgr.conf --verbose standby promote;
➢ follow – Seguir novo master:
➢ $ repmgr -f repmgr.conf --verbose standby follow.
26
Gerenciamento (repmgr)
27
Gerenciamento (repmgr)
➢ Converter master com problemas para standby:
➢ $ repmgr -f repmgr.conf --force --rsync-only -h
novo_master -d repmgr_db -U repmgr_usr --verbose
standby clone;
➢ Registar o nó novamente:
➢ $ repmgr -f repmgr.conf --force standby register.
28
Gerenciamento (repmgrd)
➢ Automatic Failover:
➢ Witness;
29
Gerenciamento (repmgrd)
➢ Postgresql.conf:
➢ shared_preload_libraries = 'repmgr_funcs';
➢ psql -f /usr/share/postgresql/9.0/contrib/repmgr_funcs.sql
repmgr_db.
30
Gerenciamento (repmgrd)
➢ repmgr.conf:
➢ master_response_timeout;
➢ reconnect_attempts;
➢ reconnect_interval;
➢ failover=[automatic|manual];
➢ promote_command='promote_command.sh';
➢ follow_command='repmgr standby follow -f repmgr.conf'.
31
Gerenciamento (repmgrd)
➢ Iniciando Witness
➢ repmgr -d repmgr_db -U repmgr_usr -h IP_MASTER -D
$WITNESS_PGDATA -f repmgr.conf witness create;
➢ Daemon:
➢ $ repmgrd -f repmgr.conf --daemonize > repmgr.log 2>&1.
32
Considerações Finais
● Modelo nativo de replicação
● Díficil gerenciamento
● Failover manual e complexo
– Falha humana
● Repmgr
● Facilidade no gerenciamento
● Failover (manual ou automático)
– Fácil controle
33
Boa Sorte!!
34
Vinicius Vale
vinicius.aquino@4linux.com.br
aquino.vale@gmail.com
www.4linux.com.br
www.4shot.com.br
www.viniciusvale.com
Sigam-nos
@4linux

Replicação PostgreSQL com RepManager

Notas do Editor

  • #7 RankDone será lançado em Agosto e tem como objetivo fazer o rankeamento de candidados para vagas técnicas
  • #11 Outras altetrnativas – Como crescimento vertical, maior capacidade de IO e ferramentas especificas para ambientes OLTP * Bucardo * Postgres-XC * Postgres-XL
  • #22 Total de slaves + 1 hot_standby – sera mudado por causa dos slaves Não obrigatorio, porem recomendado
  • #23 pg_ctl e pg_basebackup não estiverem no PATH.
  • #24 Nunca use localhost no host; user/dbname devem ser os mesmos para todos os hosts; Outros parametros podem ser diferentes.
  • #25 1 - Master deve ser registrado primeiro. 2 – Antes de registar o slave deve-se preparar o standby
  • #32 * Witness porta - (port 5499) * Daemon deve estar em todos os servidores envolvidos.