AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 73812
Accepted
Dina
Dina
Asked: 2014-08-13 12:14:58 +0800 CST2014-08-13 12:14:58 +0800 CST 2014-08-13 12:14:58 +0800 CST

PostgreSQL streaming versus replicação baseada em arquivo (em termos de comportamento e configuração do servidor)

  • 772

Estou tentando entender os melhores usos da replicação do PostgreSQL e como ela funciona para que eu possa solucionar problemas em um ambiente de produção.

Estou tendo dificuldade em entender as diferenças entre esses 2 tipos de replicação em termos de (1) Configuração (2) Como os 2 servidores Master/Slave funcionam em cada cenário

A replicação no PostgreSQL (9.2+) é essencialmente arquivos XLOG de 16MB de tamanho (dependendo das configurações de frequência para criação de cada arquivo) sendo criados no Master e enviados por algum método para o Slave.

Minha configuração (para fins desta pergunta)

Configuração do Postgresql.conf no Master
archive_command= 'rsync -av %p postgres@[SlaveIP]:[wal_archive_folder]/%f'

Configuração do Recovery.conf no Slave para ler arquivos de log
restore_command = 'cp [wal_archive_folder]/%f \"%p\"'
primary_conninfo = 'host=[MasterIP] port=5432 user=postgres'

Minha pergunta é: qual parte dessa configuração torna essa replicação de "streaming" versus "envio de logs"? Meu mestre está configurado para usar rsync para enviar logs para o escravo (isso é envio de log?) Meu escravo está configurado para poder se conectar ao mestre em recovery.conf (isso é streaming?)

Segunda parte da pergunta: O que está acontecendo? Entendo que existe outro protocolo no PostgreSQL via WAL_sender & WAL_receiver. Mas não estou claro se isso é usado apenas para streaming e, em caso afirmativo, como o rsync está sendo usado no Master?

:) Obrigada!! E desculpe se esta é uma pergunta óbvia. Tenho lido muitos blogs/livros, mas tenho dificuldade em entender. O wiki do Postgres é tão profundo que leva muito tempo para passar por tudo (e eu tenho prazos)

postgresql postgresql-9.3
  • 1 1 respostas
  • 5939 Views

1 respostas

  • Voted
  1. Best Answer
    Craig Ringer
    2014-08-13T17:05:39+08:002014-08-13T17:05:39+08:00

    "Replicação de streaming" refere-se ao envio contínuo de registros WAL por meio de uma conexão TCP/IP entre o mestre e a réplica, usando o protocolo walsender nas replicationconexões. O mestre lê seu próprio WAL pg_xloge o envia para a réplica sob demanda. É configurado com uma primary_conninfodiretiva in recovery.confe pg_hba.confentradas no mestre para permitir replicationconexões. Você também precisa wal_keep_segmentsde algumas outras opções abordadas nos documentos.

    "Envio de log" refere-se ao envio periódico de registros WAL como arquivos WAL inteiros por meio de um protocolo de transferência de arquivo para um local de arquivo do qual a réplica pode buscá-los. É configurado com uma restore_commanddiretiva in recovery.confe um archive_commandno master. O PostgreSQL não se importa onde os arquivos estão ou como eles são transferidos, apenas os archive_commandcoloca lá e restore_commandbusca o arquivo necessário; isso permite a construção de sistemas como PgBarman e WAL-E.

    A replicação de streaming não tem tanto atraso, pois os registros são enviados à medida que são gerados. No entanto, requer que o mestre e a réplica estejam online e possam se comunicar diretamente. Ele também requer que a réplica se mantenha bem o suficiente para que o mestre ainda tenha cópias em disco do WAL de que a réplica precisa e geralmente requer que você gaste pg_xlogespaço extra para reter o WAL extra para a réplica.

    A replicação de envio de log tem mais atraso porque a réplica só vê o WAL quando um arquivo inteiro é enviado. No entanto, pode funcionar mesmo quando o mestre e a réplica não podem se comunicar diretamente por TCP/IP usando um local de armazenamento compartilhado. Ele continua funcionando mesmo que a réplica esteja fora do ar por um tempo, pois o mestre terá descartado o WAL pg_xlogsomente após arquivá-lo, então o WAL ainda está no arquivo e utilizável pela réplica mesmo que o mestre não possa enviá-lo por streaming mais. Observe que archive_commandnunca desiste, portanto, pg_xlogpode preencher se o arquivamento estiver falhando; por esse motivo, é melhor arquivar em um local confiável e, em seguida, fazer com que o servidor de réplica busque nesse local.

    Em geral, você realmente combina os dois, ou seja, usa os dois. Nesse caso, a replicação de streaming é usada quando tudo está indo bem. Se a réplica ficar muito atrasada e o mestre tiver descartado os xlogs necessários, surgir um problema de conectividade, etc., a réplica mudará para a leitura do WAL arquivado até que seja recuperada. Ele tentará periodicamente voltar ao streaming até conseguir.

    Se você for usar apenas um, use o envio de log, porque a replicação de streaming sem fallback de envio de log é (até o PostgreSQL 9.4) potencialmente propenso a atrasos de replicação, causando falhas que forçam uma réplica a ser reconstruída.


    O PostgreSQL 9.4 muda um pouco isso, porque a replicação de streaming agora pode usar "slots de replicação". Isso permite que o mestre acompanhe quanto WAL uma réplica precisa e evite jogá-lo fora até que a réplica o reproduza. Portanto, não há mais necessidade wal_keep_segmentsse você usar um slot de replicação (não o padrão).

    Veja meu artigo streaming de slots de replicação no PostgreSQL 9.4 .

    9.4 também apresenta as bases para replicação lógica de streaming , que é ainda outro mecanismo, projetado para uso por sistemas de replicação lógica como Londiste, Slony-I e o novo recurso de replicação multimestre assíncrona bidirecional .

    • 18

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve