Este documento apresenta sobre replicação lógica no PostgreSQL 10, incluindo sua arquitetura, configuração e funcionamento. A replicação lógica replica mudanças de dados de um banco de dados publicador para bancos de dados assinantes de forma assíncrona e transacional através de publicações e assinaturas.
2. Sobre esta apresentação
• esta apresentação está sob licença Creative Commons
Atribuição-Não Comercial 3.0 Brasil:
http://creativecommons.org/licenses/by-nc/3.0/br
c b n
3. Resumo
1 Introdução
2 Arquitetura
3 Replicação Lógica
4 Configuração
5 Limitações
6 Conclusão
Timbira - A empresa brasileira de PostgreSQL 1 / 44
5. Histórico
• RServ
• Slony-I
• Londiste
• Bucardo
• pgpool-II
• BDR
• pglogical
Timbira - A empresa brasileira de PostgreSQL 3 / 44
6. Evolução
• 9.0
• protocolo de replicação
• 9.2
• cascateamento
• 9.3
• gatilhos de eventos
• background workers
• 9.4
• slots de replicação
• logical decoding
• 9.5
• replication origins
• 10.0
• replicação lógica
• facilitar configuração de replicação (parâmetros padrão)
Timbira - A empresa brasileira de PostgreSQL 4 / 44
7. Replicação Lógica
• replica mudanças
• INSERT, UPDATE e DELETE
• modelo publish-subscribe
• replicação transacional
• subscriber aplica dados na mesma ordem que no publisher
• sincronismo inicial
• cascateamento
Timbira - A empresa brasileira de PostgreSQL 5 / 44
8. Replicação Lógica: Vantagens
• não utiliza gatilhos
• reduz carga de escrita no publisher
• subscriber não está em modo standby
• uso de tabelas temporárias no subscriber
• não precisa cancelar consultas para replicação continuar
• nós podem ter diferentes roles, permissões e parâmetros
• replica um banco de dados ou um conjunto de tabelas
• replica para diferentes versões do PostgreSQL
• replica para diferentes sistemas operacionais
• múltiplos publisher para um subscriber
• consolidação de dados
Timbira - A empresa brasileira de PostgreSQL 6 / 44
9. Replicação Lógica: Casos de Uso
• replicação seletiva
• um banco de dados
• parte de um banco de dados
• atualização entre versões do PostgreSQL
• consolidação de múltiplos bancos de dados
• distribuição de dados
Timbira - A empresa brasileira de PostgreSQL 7 / 44
10. Comparativo
RL BDR HS Slony Bucardo
Multi-master não sim não não sim
Por Banco sim sim não sim sim
Cascateamento sim não sim sim -
DDL não sim sim não ⋆ não
Daemon externo não não não sim sim
Novas Tabelas Adicionadas não sim sim não não
Sequências Transparentes não sim - - não
Usa gatilhos / Escrita 2x não não não sim sim
UPDATE na PK sim sim sim não não
Replicação Seletiva sim sim não sim sim
Aplica Txn Individual sim sim sim não não
extraído do site do BDR
Timbira - A empresa brasileira de PostgreSQL 8 / 44
11. Resumo
1 Introdução
2 Arquitetura
3 Replicação Lógica
4 Configuração
5 Limitações
6 Conclusão
Timbira - A empresa brasileira de PostgreSQL 9 / 44
12. Arquitetura
• logical replication worker estabelece uma conexão (via libpq)
com servidor publisher
• servidor publisher abre o processo walsender para enviar
mudanças ao servidor subscriber
• cada subscription habilitada terá uma processo walsender
correspondente no servidor publisher
• replicação síncrona somente com interface do protocolo
buffers
wal
publisher subscriber
postgres postgres
conexão
wal sender
output plugin
mudanças
logical replication worker
Timbira - A empresa brasileira de PostgreSQL 10 / 44
13. Decodificação Lógica
• envia modificações feitas para consumidores externos
• mudanças são enviadas através de slots de replicação
• casos de uso
• sistemas de replicação
• auditoria
• formato é determinado pelo output plugin
• plugins podem ser escritos para fornecer formatos adicionais
• test_decoding
• wal2json
• plugin utilizado para replicação lógica é o pgoutput
Timbira - A empresa brasileira de PostgreSQL 11 / 44
14. Slots de Replicação
• envia mudanças para cliente na mesma ordem da origem
• cada slot envia uma sequência de mudanças de um banco de
dados
• slot tem um identificador único para todo cluster
• não depende de conexão (persistentes)
• a prova de falha (crash-safe)
• um cliente consome mudanças de um slot por vez
• slots não sabem o estado dos seus consumidores
Timbira - A empresa brasileira de PostgreSQL 12 / 44
15. Interface do Protocolo
• somente utilizando conexão de replicação (replication=1)
• pg_recvlogical
• comandos
• CREATE_REPLICATION_SLOT foo LOGICAL wal2json
• START_REPLICATION SLOT foo LOGICAL XXX/XXX
(opt1 value1, opt2 value2)
• DROP_REPLICATION_SLOT foo
Timbira - A empresa brasileira de PostgreSQL 13 / 44
17. Background Workers
• PostgreSQL executa código do usuário
• processos são iniciados, parados e monitorados pelo postgres
• podem usar memória compartilhada
• podem executar transações
• replicação lógica utiliza-os para
• sincronismo inicial
• aplicar mudanças provenientes da origem
Timbira - A empresa brasileira de PostgreSQL 15 / 44
18. Resumo
1 Introdução
2 Arquitetura
3 Replicação Lógica
4 Configuração
5 Limitações
6 Conclusão
Timbira - A empresa brasileira de PostgreSQL 16 / 44
19. Publicação
• agrupar mudanças
• cada publicação só existe em um banco de dados
• tabela pode ser adicionada em múltiplas publicações
• só contém tabelas
• escolher mudanças (INSERT, UPDATE e/ou DELETE)
• cada publicação pode ter múltiplas assinaturas
• tabelas podem ser adicionadas, removidas ou substituídas a
posteriori
Timbira - A empresa brasileira de PostgreSQL 17 / 44
20. Publicação: Comandos
CREATE PUBLICATION todas FOR ALL TABLES;
CREATE PUBLICATION alteracoes FOR TABLE s1.usuarios,
s2.processos, s2.movimentos
WITH (publish = 'update, delete');
ALTER PUBLICATION pub1 ADD TABLE s3.anexos, s3.historico;
ALTER PUBLICATION pub1 DROP TABLE s2.enderecos;
ALTER PUBLICATION pub1 SET (publish = 'insert, delete');
DROP PUBLICATION pub2;
Timbira - A empresa brasileira de PostgreSQL 18 / 44
21. Assinatura
• define uma conexão para nó da publicação
• define um conjunto de publicações das quais quer assinar
• receberá mudanças via slot de replicação
• nós assinantes podem criar publicações
• múltiplas assinaturas de um mesmo nó de publicação (cuidado
com sobreposição)
• cada assinatura ativa recebe mudanças de um nó de
publicação
• slot de replicação criado automaticamente ao criar a
assinatura
• slot de replicação removido automaticamente ao remover a
assinatura
Timbira - A empresa brasileira de PostgreSQL 19 / 44
22. Assinatura
• DDL não é replicado
• replicação de tabelas com nomes diferentes ou esquemas
distintos não é suportada
• colunas da tabela devem ter o mesmo nome e tipo de dados
• a ordem das colunas pode ser diferente
• nó assinante pode ter colunas adicionais (preenchidos com
valores padrão)
• sincronização inicial é opcional
• sincronização é perdida se assinatura for recriada
Timbira - A empresa brasileira de PostgreSQL 20 / 44
23. Assinatura: Comandos
CREATE SUBSCRIPTION sub1
CONNECTION 'host=10.1.2.3 port=7654 user=foo dbname=bar'
PUBLICATION pub1, alteracoes;
CREATE SUBSCRIPTION sub2
CONNECTION 'host=172.16.5.8 user=joao dbname=loja'
PUBLICATION todas, pub2
WITH (copy_data = false, enabled = false);
ALTER SUBSCRIPTION sub0
CONNECTION 'host=10.1.1.7 user=foo dbname=bar';
ALTER SUBSCRIPTION sub2 ENABLE;
ALTER SUBSCRIPTION todos REFRESH PUBLICATION;
DROP SUBSCRIPTION sub5;
Timbira - A empresa brasileira de PostgreSQL 21 / 44
24. Sincronização Inicial
• processos logical replication sync
• snapshot inicial (ponto de partida)
• cópia em paralelo das diversas tabelas
• slot temporário e cópia dos dados
• modo de sincronização ao final da cópia
• aplicar mudanças após snapshot
Timbira - A empresa brasileira de PostgreSQL 22 / 44
25. Conflitos
• operação DML vinda do nó de publicação viola restrições no
nó assinante
• replicação para
• UPDATE e DELETE sem efeito não produz um conflito
• detalhes do conflito no log do nó assinante
• atraso na replicação
Timbira - A empresa brasileira de PostgreSQL 23 / 44
26. Conflitos: Resolução
• resolver conflito manualmente
• alterar dados no nó assinante de modo que não conflitem com
os dados vindos do nó de publicação
• ignorar a transação que conflita com os dados atuais no nó
assinante
• pg_replication_origin_advance
Timbira - A empresa brasileira de PostgreSQL 24 / 44
27. Resumo
1 Introdução
2 Arquitetura
3 Replicação Lógica
4 Configuração
5 Limitações
6 Conclusão
Timbira - A empresa brasileira de PostgreSQL 25 / 44
28. Planejamento
• versão 10 ou superior
• qualquer sistema operacional / arquitetura
• versões do PostgreSQL podem ser diferentes
• mudanças no esquema do nó assinante
• após todas as transações pendentes serem aplicadas
• nomes de tabelas idênticos (incluindo mesmo esquema)
• nomes de colunas e tipo de dados idênticos
• podem haver colunas adicionais no nó assinante
• tabelas sem chave primária
• comandos UPDATE e DELETE
• REPLICA IDENTITY
• DEFAULT | USING INDEX fooi | FULL | NOTHING
Timbira - A empresa brasileira de PostgreSQL 26 / 44
29. Planejamento
• colocar na mesma publicação tabelas que participam de uma
transação
• evitar inconsistência de dados
• gatilhos não disparam no nó assinante
• registro provenientes do nó de publicação
• parâmetro session_replication_role = replica
• ALTER TABLE foo ENABLE REPLICA TRIGGER bar
• ALTER TABLE foo ENABLE ALWAYS TRIGGER bar
• cascateamento
• não há configuração especial para habilitar a replicação em
cascata
• criar publicação no nó assinante
• inscrever um nó ao nó assinante
Timbira - A empresa brasileira de PostgreSQL 27 / 44
30. Funcionamento
• role
• regra pg_hba.conf
• privilégio LOGIN
• configuração
• postgresql.conf
• cópia do esquema das tabelas a serem replicadas para os nós
assinantes
• sincronismo inicial (opcional)
• aplicação das mudanças nos nós assinantes
• entrega
• fluxo (stream)
• walsender (nó de publicação)
• logical replication worker (nó assinante)
Timbira - A empresa brasileira de PostgreSQL 28 / 44
31. Configuração: Publisher
postgresql.conf
wal_level = logical
Role de replicação
CREATE ROLE joao LOGIN REPLICATION;
pg_hba.conf
host foo joao 10.1.1.2/32 md5
Timbira - A empresa brasileira de PostgreSQL 29 / 44
38. Atraso da Replicação
foo=# SELECT pg_size_pretty(
pg_wal_lsn_diff(sent_lsn, replay_lsn))
as lag from pg_stat_replication;
lag
---------
42 kB
(1 registro)
Versão 10
A função pg_xlog_location_diff foi renomeada para
pg_wal_lsn_diff.
Timbira - A empresa brasileira de PostgreSQL 36 / 44
39. Monitoramento: Publisher
bench=# select * from pg_replication_slots;
-[ RECORD 1 ]-------+----------
slot_name | sub1
plugin | pgoutput
slot_type | logical
datoid | 16436
database | bench
temporary | f
active | t
active_pid | 6590
xmin |
catalog_xmin | 9304
restart_lsn | 0/6D28B98
confirmed_flush_lsn | 0/6D28BD0
Timbira - A empresa brasileira de PostgreSQL 37 / 44
41. Resumo
1 Introdução
2 Arquitetura
3 Replicação Lógica
4 Configuração
5 Limitações
6 Conclusão
Timbira - A empresa brasileira de PostgreSQL 39 / 44
42. Limitações
• replicação unidirecional: plugin encaminha tudo que chega
a ele sem checar a origem
• filtro por registro: filtragem por condições definidas pelo
usuário (distribuição)
• resolução de conflito: não é automática
• prevalece registro da nó de publicação
• prevalece registro do nó assinante
• prevalece registro mais recente
• prevalece registro mais antigo
• tentar combinar registros
• consistência de dados: não há tal comando/ferramenta
Timbira - A empresa brasileira de PostgreSQL 40 / 44
43. Resumo
1 Introdução
2 Arquitetura
3 Replicação Lógica
4 Configuração
5 Limitações
6 Conclusão
Timbira - A empresa brasileira de PostgreSQL 41 / 44
44. Questionamentos
• A sua pergunta na lista pgbr-geral
• A sua pergunta na lista pgsql-{general, hackers}
• histórico das listas
• blogs
• http://planeta.postgresql.org.br
• http://planet.postgresql.org
• wiki
• http://wiki.postgresql.org
• IRC
• irc.freenode.net
• #postgresql
• #postgresql-br
Timbira - A empresa brasileira de PostgreSQL 42 / 44