SlideShare uma empresa Scribd logo
1 de 40
Baixar para ler offline
Replicação multi-master made in Brazil
Euler Taveira
02/08/2019
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
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
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
Nome
Origem do Nome
Krahô é um povo Timbira que vive a leste do rio Tocantins.
Timbira - A empresa brasileira de PostgreSQL 2 / 37
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
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
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
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
Topologia
Timbira - A empresa brasileira de PostgreSQL 7 / 37
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Configuração: Publisher
postgresql.conf
wal_level = logical
Role de replicação
CREATE ROLE joao LOGIN;
pg_hba.conf
host foo joao 10.1.1.2/32 md5
Timbira - A empresa brasileira de PostgreSQL 23 / 37
Configuração: Subscriber
Restaurar esquema
pg_dump -h 10.1.1.1 -s -U joao foo | psql -f - -U maria bar
Timbira - A empresa brasileira de PostgreSQL 24 / 37
Configuração: Publisher
Publicar tabelas
foo=# CREATE PUBLICATION pub1 FOR TABLE contas,
historico, vendas WHERE (filial = 12);
CREATE PUBLICATION
Timbira - A empresa brasileira de PostgreSQL 25 / 37
Configuração: Subscriber
Assinar tabelas
bar=# CREATE SUBSCRIPTION sub1 CONNECTION
’host=10.1.1.1 user=joao dbname=foo’ publication pub1 WITH
(replication_origin_id = ’34’, filter_origins = ’12’);
CREATE SUBSCRIPTION
Timbira - A empresa brasileira de PostgreSQL 26 / 37
Configuração: Parâmetros
• wal_level: logical
• max_replication_slots: 10
• max_logical_replication_workers: 4
• max_worker_processes: 8
• max_sync_workers_per_subscription: 2
Timbira - A empresa brasileira de PostgreSQL 27 / 37
Monitoramento
• visão pg_stat_replication (publisher)
• visão pg_replication_slots (publisher)
• visão pg_stat_subscription (subscriber)
Timbira - A empresa brasileira de PostgreSQL 28 / 37
Monitoramento: Publisher
foo=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid | 6590
usesysid | 10
usename | euler
application_name | sub1
client_addr |
client_hostname |
client_port | -1
backend_start | 2019-07-11 12:12:59.940085-03
backend_xmin |
state | streaming
sent_lsn | 0/5DF4D00
write_lsn | 0/5DF4D00
flush_lsn | 0/5DF2A38
replay_lsn | 0/5DF4D00
write_lag | 00:00:00.000307
flush_lag | 00:00:00.000307
replay_lag | 00:00:00.000307
sync_priority | 0
sync_state | async
Timbira - A empresa brasileira de PostgreSQL 29 / 37
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
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
Monitoramento: Subscriber
foo=# select * from pg_stat_subscription;
-[ RECORD 1 ]---------+------------------------------
subid | 16445
subname | sub1
pid | 6589
relid |
received_lsn | 0/6D28AF0
last_msg_send_time | 2017-07-11 17:07:10.402336-03
last_msg_receipt_time | 2017-07-11 17:07:10.402413-03
latest_end_lsn | 0/6D28AF0
latest_end_time | 2017-07-11 17:07:10.402336-03
-[ RECORD 2 ]---------+------------------------------
subid | 16466
subname | sub2
pid | 7094
relid |
received_lsn | 0/6D28AF0
last_msg_send_time | 2017-07-11 17:07:10.419269-03
last_msg_receipt_time | 2017-07-11 17:07:10.419382-03
latest_end_lsn | 0/6D28AF0
latest_end_time | 2017-07-11 17:07:10.419269-03
Timbira - A empresa brasileira de PostgreSQL 32 / 37
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
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
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
Projeto
• http://www.timbira.com.br/krahodb
• https://github.com/timbira/krahodb
Timbira - A empresa brasileira de PostgreSQL 36 / 37
Perguntas
?
Euler Taveira de Oliveira
euler@timbira.com.br
http://www.timbira.com.br
Timbira - A empresa brasileira de PostgreSQL 37 / 37

Mais conteúdo relacionado

Mais procurados

PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance TuningFernando Ike
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoFabio Telles Rodriguez
 
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NAS
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NASAnálise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NAS
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NASKleber Silva
 
Boas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosBoas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosJuliano Atanazio
 
Performance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXPerformance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXAlex Hübner
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ BuilderDiego Rosa
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresDouglas V. Pasqua
 
PostgreSQL Conceitos e aplicações - FSA
PostgreSQL  Conceitos e aplicações - FSAPostgreSQL  Conceitos e aplicações - FSA
PostgreSQL Conceitos e aplicações - FSAFabio Telles Rodriguez
 
UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6Wagner Bianchi
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanJuliano Atanazio
 
Advanced compression external_tables
Advanced compression external_tablesAdvanced compression external_tables
Advanced compression external_tablesRodrigo Mufalani
 
OpenLAP Multimaster
OpenLAP MultimasterOpenLAP Multimaster
OpenLAP Multimastercioban
 
SVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael BeckerSVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael BeckerTchelinux
 

Mais procurados (20)

PostgreSQL: Performance Tuning
PostgreSQL: Performance TuningPostgreSQL: Performance Tuning
PostgreSQL: Performance Tuning
 
Spacewalk - Solisc
Spacewalk - Solisc Spacewalk - Solisc
Spacewalk - Solisc
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
PostgreSQL Conceitos e aplicações
PostgreSQL  Conceitos e aplicaçõesPostgreSQL  Conceitos e aplicações
PostgreSQL Conceitos e aplicações
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Curso de CVS - Lab 3
Curso de CVS - Lab 3Curso de CVS - Lab 3
Curso de CVS - Lab 3
 
Git 101
Git 101Git 101
Git 101
 
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NAS
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NASAnálise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NAS
Análise comparativa entre as versões 3 e 4 do protocolo NFS em arquiteturas NAS
 
Boas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de DadosBoas praticas em um Projeto de Banco de Dados
Boas praticas em um Projeto de Banco de Dados
 
Performance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MXPerformance tunning de servidores ColdFusion MX
Performance tunning de servidores ColdFusion MX
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
 
Tuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedoresTuning Apache/MySQL/PHP para desenvolvedores
Tuning Apache/MySQL/PHP para desenvolvedores
 
PostgreSQL Conceitos e aplicações - FSA
PostgreSQL  Conceitos e aplicações - FSAPostgreSQL  Conceitos e aplicações - FSA
PostgreSQL Conceitos e aplicações - FSA
 
UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6UNIFAL - MySQL Logs - 5.0/5.6
UNIFAL - MySQL Logs - 5.0/5.6
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarman
 
Wisher
WisherWisher
Wisher
 
Postgresql +python
Postgresql +pythonPostgresql +python
Postgresql +python
 
Advanced compression external_tables
Advanced compression external_tablesAdvanced compression external_tables
Advanced compression external_tables
 
OpenLAP Multimaster
OpenLAP MultimasterOpenLAP Multimaster
OpenLAP Multimaster
 
SVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael BeckerSVN: Controle de revisões com subversion - Thiago Rafael Becker
SVN: Controle de revisões com subversion - Thiago Rafael Becker
 

Semelhante a Replicação multi-master made in Brazil

NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)Fabrízio Mello
 
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)Fabrízio Mello
 
NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP)
NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP) NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP)
NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP) Fabrízio Mello
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPedro Fernandes Vieira
 
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Wagner Bianchi
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLRaul Oliveira
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM BrasilBehind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM BrasilJoao Galdino Mello de Souza
 
Criação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLCriação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLMarcos Thomaz
 
Criação de log de ações através do banco
Criação de log de ações através do bancoCriação de log de ações através do banco
Criação de log de ações através do bancoMarcos Thomaz
 
Controle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoControle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoFabricio Nogueira
 
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Kelver Merlotti
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctoolse-Setorial
 
Minicurso PostgreSQL
Minicurso PostgreSQLMinicurso PostgreSQL
Minicurso PostgreSQLDiogo Biazus
 
Apresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLApresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLJohnes Castro
 
Funcionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLFuncionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLMatheus Espanhol
 

Semelhante a Replicação multi-master made in Brazil (20)

NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
NoSQL + SQL = PostgreSQL (PGDay Campinas 2014)
 
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
 
NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP)
NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP) NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP)
NoSQL + SQL = PostgreSQL (DBA Brasil 1.0 - São Paulo/SP)
 
PostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro VieiraPostgreSQL - Visão Geral - Pedro Vieira
PostgreSQL - Visão Geral - Pedro Vieira
 
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
Escalando o ambiente com MariaDB Cluster (Portuguese Edition)
 
Arquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQLArquitetando Soluções de Dados com PostgreSQL
Arquitetando Soluções de Dados com PostgreSQL
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Por que PostgreSQL?
Por que PostgreSQL?Por que PostgreSQL?
Por que PostgreSQL?
 
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM BrasilBehind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
Behind the Scenes: z Systems CACHE por Carolina de Souza Joaquim - IBM Brasil
 
Criação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQLCriação de log de ações através do banco - PostgreSQL
Criação de log de ações através do banco - PostgreSQL
 
Criação de log de ações através do banco
Criação de log de ações através do bancoCriação de log de ações através do banco
Criação de log de ações através do banco
 
Controle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básicoControle de Versão Distribuído com Git básico
Controle de Versão Distribuído com Git básico
 
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 
Design Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com CtoolsDesign Patterns para Tuning Pentaho com Ctools
Design Patterns para Tuning Pentaho com Ctools
 
Novidades do PostgreSQL 10
Novidades do  PostgreSQL 10Novidades do  PostgreSQL 10
Novidades do PostgreSQL 10
 
Minicurso PostgreSQL
Minicurso PostgreSQLMinicurso PostgreSQL
Minicurso PostgreSQL
 
Apresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQLApresentação PGDAY - Replicação Nativa - PostgreSQL
Apresentação PGDAY - Replicação Nativa - PostgreSQL
 
Funcionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQLFuncionalidades das versões 9.x do PostgreSQL
Funcionalidades das versões 9.x do PostgreSQL
 

Replicação multi-master made in Brazil

  • 1. Replicação multi-master made in Brazil Euler Taveira 02/08/2019
  • 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
  • 10. Topologia Timbira - A empresa brasileira de PostgreSQL 7 / 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
  • 26. Configuração: Publisher postgresql.conf wal_level = logical Role de replicação CREATE ROLE joao LOGIN; pg_hba.conf host foo joao 10.1.1.2/32 md5 Timbira - A empresa brasileira de PostgreSQL 23 / 37
  • 27. Configuração: Subscriber Restaurar esquema pg_dump -h 10.1.1.1 -s -U joao foo | psql -f - -U maria bar Timbira - A empresa brasileira de PostgreSQL 24 / 37
  • 28. Configuração: Publisher Publicar tabelas foo=# CREATE PUBLICATION pub1 FOR TABLE contas, historico, vendas WHERE (filial = 12); CREATE PUBLICATION Timbira - A empresa brasileira de PostgreSQL 25 / 37
  • 29. Configuração: Subscriber Assinar tabelas bar=# CREATE SUBSCRIPTION sub1 CONNECTION ’host=10.1.1.1 user=joao dbname=foo’ publication pub1 WITH (replication_origin_id = ’34’, filter_origins = ’12’); CREATE SUBSCRIPTION Timbira - A empresa brasileira de PostgreSQL 26 / 37
  • 30. Configuração: Parâmetros • wal_level: logical • max_replication_slots: 10 • max_logical_replication_workers: 4 • max_worker_processes: 8 • max_sync_workers_per_subscription: 2 Timbira - A empresa brasileira de PostgreSQL 27 / 37
  • 31. Monitoramento • visão pg_stat_replication (publisher) • visão pg_replication_slots (publisher) • visão pg_stat_subscription (subscriber) Timbira - A empresa brasileira de PostgreSQL 28 / 37
  • 32. Monitoramento: Publisher foo=# select * from pg_stat_replication; -[ RECORD 1 ]----+------------------------------ pid | 6590 usesysid | 10 usename | euler application_name | sub1 client_addr | client_hostname | client_port | -1 backend_start | 2019-07-11 12:12:59.940085-03 backend_xmin | state | streaming sent_lsn | 0/5DF4D00 write_lsn | 0/5DF4D00 flush_lsn | 0/5DF2A38 replay_lsn | 0/5DF4D00 write_lag | 00:00:00.000307 flush_lag | 00:00:00.000307 replay_lag | 00:00:00.000307 sync_priority | 0 sync_state | async Timbira - A empresa brasileira de PostgreSQL 29 / 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
  • 35. Monitoramento: Subscriber foo=# select * from pg_stat_subscription; -[ RECORD 1 ]---------+------------------------------ subid | 16445 subname | sub1 pid | 6589 relid | received_lsn | 0/6D28AF0 last_msg_send_time | 2017-07-11 17:07:10.402336-03 last_msg_receipt_time | 2017-07-11 17:07:10.402413-03 latest_end_lsn | 0/6D28AF0 latest_end_time | 2017-07-11 17:07:10.402336-03 -[ RECORD 2 ]---------+------------------------------ subid | 16466 subname | sub2 pid | 7094 relid | received_lsn | 0/6D28AF0 last_msg_send_time | 2017-07-11 17:07:10.419269-03 last_msg_receipt_time | 2017-07-11 17:07:10.419382-03 latest_end_lsn | 0/6D28AF0 latest_end_time | 2017-07-11 17:07:10.419269-03 Timbira - A empresa brasileira de PostgreSQL 32 / 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
  • 40. Perguntas ? Euler Taveira de Oliveira euler@timbira.com.br http://www.timbira.com.br Timbira - A empresa brasileira de PostgreSQL 37 / 37