2. Sobre esta apresentação
• esta apresentação está disponível em:
https://slideshare.net/eulerto
• 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. Apresentação
• Euler Taveira
• Desenvolvedor PostgreSQL
• Líder do PostgreSQL Brasil
• @eulerto
• http://eulerto.blogspot.com
• Timbira
• Diretor Técnico
• A empresa brasileira de PostgreSQL
• Consultoria
• Desenvolvimento
• Suporte 24x7
• Treinamento
4. Resumo
1 Introdução
2 KrahoDB
3 Funcionamento
4 Configuração
5 Limitações
6 Conclusão
Timbira - A empresa brasileira de PostgreSQL 1 / 37
5. Nome
Origem do Nome
Krahô é um povo Timbira que vive a leste do rio Tocantins.
Timbira - A empresa brasileira de PostgreSQL 2 / 37
6. Motivação
• nenhum software de código aberto utilizando arquitetura de
replicação lógica
• vários clientes usam replicação multi-master
• infra-estrutura precária
• replicação multi-master performática
• fácil uso
• suporte a versões recentes do PostgreSQL
• versão 10
• versão 11
• versão 12 (em preparação)
Timbira - A empresa brasileira de PostgreSQL 3 / 37
7. Resumo
1 Introdução
2 KrahoDB
3 Funcionamento
4 Configuração
5 Limitações
6 Conclusão
Timbira - A empresa brasileira de PostgreSQL 4 / 37
8. Características
• fork do PostgreSQL
• replicação lógica
• replicação transacional
• replicação seletiva de bancos de dados e tabelas
• filtro de registros
• filtro de origens de replicação
• modelo publish-subscribe
• sincronismo inicial (aplicando filtro de registros)
• replicação para diferentes sistemas operacionais
• replicação para diferentes versões
• código aberto
• licença PostgreSQL
Timbira - A empresa brasileira de PostgreSQL 5 / 37
9. Características (2)
• 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
Timbira - A empresa brasileira de PostgreSQL 6 / 37
11. Casos de Uso
• replicação seletiva
• parte de algumas tabelas
• replicação da mesma tabela nos dois sentidos
• consolidação de múltiplos bancos de dados
• distribuição de dados
Timbira - A empresa brasileira de PostgreSQL 8 / 37
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
• output plugin contém filtros de registros e origem
buffers
wal
publisher subscriber
postgres postgres
conexão
wal sender
output plugin
mudanças
logical replication worker
Timbira - A empresa brasileira de PostgreSQL 9 / 37
13. Filtro de Registros
• filtro de registros é na origem (publisher)
• economia de tráfego de dados
• cada publication pode conter tabelas com filtros
• enviar somente dados necessários
• distribuição de dados
• cláusula WHERE
• qualquer condição aplicada a um SELECT
• não pode conter funções
• output plugin aplica os filtros informados em tabelas
• enviamos os dados se cláusula WHERE é verdadeira
• ... senão ignoramos aquele registro
Timbira - A empresa brasileira de PostgreSQL 10 / 37
14. Filtro de Origem
• funcionalidade replication origins
• nó identifica de onde veio o registro
• subscriber envia identificador (replication_origin_id)
• subscriber envia filtro por origem para output plugin
• output plugin aplica filtro por origem
Timbira - A empresa brasileira de PostgreSQL 11 / 37
15. Resumo
1 Introdução
2 KrahoDB
3 Funcionamento
4 Configuração
5 Limitações
6 Conclusão
Timbira - A empresa brasileira de PostgreSQL 12 / 37
16. 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
• pode adicionar filtros em tabelas
• escolher mudanças (INSERT, UPDATE, DELETE,
TRUNCATE)
• cada publicação pode ter múltiplas assinaturas
• tabelas podem ser adicionadas, removidas ou substituídas a
posteriori
Timbira - A empresa brasileira de PostgreSQL 13 / 37
17. Publicação: Comandos
CREATE PUBLICATION todas FOR ALL TABLES;
CREATE PUBLICATION pub123to1 FOR TABLE s1.vendas
WHERE (filial = 123 AND valor > 1000);
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 14 / 37
18. 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
• 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 15 / 37
19. Assinatura
• 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 16 / 37
20. 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=192.168.0.5 port=5433 user=foo dbname=bar'
PUBLICATION pub123
WITH (replication_origin_id = 123, filter_origins = 456);
CREATE SUBSCRIPTION sub3
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 sub3 ENABLE;
ALTER SUBSCRIPTION todos REFRESH PUBLICATION;
DROP SUBSCRIPTION sub5;
Timbira - A empresa brasileira de PostgreSQL 17 / 37
21. Sincronização Inicial
• processos logical replication sync
• snapshot inicial (ponto de partida)
• cópia em paralelo das diversas tabelas
• aplicar filtro se houver
• 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 18 / 37
22. Resumo
1 Introdução
2 KrahoDB
3 Funcionamento
4 Configuração
5 Limitações
6 Conclusão
Timbira - A empresa brasileira de PostgreSQL 19 / 37
23. 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
• colunas em filtro de registros devem ser
• chave primária
• REPLICA IDENTITY
• tabelas sem chave primária
• comandos UPDATE e DELETE
• REPLICA IDENTITY
• DEFAULT | USING INDEX fooi | FULL | NOTHING
Timbira - A empresa brasileira de PostgreSQL 20 / 37
24. 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
Timbira - A empresa brasileira de PostgreSQL 21 / 37
25. Configuração
• 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 22 / 37
33. 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)
Timbira - A empresa brasileira de PostgreSQL 30 / 37
34. 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 31 / 37
36. Resumo
1 Introdução
2 KrahoDB
3 Funcionamento
4 Configuração
5 Limitações
6 Conclusão
Timbira - A empresa brasileira de PostgreSQL 33 / 37
37. Limitações
• origem do registro: prever conflito
• 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
• monitoramento de erros
• aplicação de DDL
Timbira - A empresa brasileira de PostgreSQL 34 / 37
38. Resumo
1 Introdução
2 KrahoDB
3 Funcionamento
4 Configuração
5 Limitações
6 Conclusão
Timbira - A empresa brasileira de PostgreSQL 35 / 37