it-swarm-pt.tech

Replicação PostgreSQL

Constantemente discutimos isso no escritório, e a pergunta continua a surgir. Como você lida com a replicação do PostgreSQL? Não estou falando necessariamente de clusters avançados, apenas mantendo a simplicidade com Master-Slave, Master-MultiSlave e Master-Master. Acho que configurá-lo para MySQL é geralmente muito simples. O failover é direto, se não perfeito, especialmente pela facilidade de configuração. Jogamos com o Slony, mas é um pouco prático (mudanças de esquema requerem intervenção, novos bancos de dados requerem intervenção, etc). PGPool2 era muito bom, até que um nó caiu e não pudemos encontrar uma maneira elegante (além de derrubar tudo e propagar novamente o nó caído) para obter a replicação de volta em sincronia. Basicamente, aqui está o que estou procurando:

  • Configuração fácil (aceitarei uma configuração difícil, mas fácil de expandir)
  • Failover simplista
  • Trazer um nó caído de volta requer apenas tempo (ou seja, como o mysql. O servidor cai, você o ativa e espera que a replicação seja atualizada)
  • Mudanças de esquema não interrompem a replicação
  • Adicionar um novo banco de dados ao servidor é perfeito (ou seja, como o mysql, você pode replicar um servidor de banco de dados inteiro, de modo que um novo banco de dados é criado no mestre e se propaga automaticamente para o escravo)

O MySQL lida com a maioria deles razoavelmente bem, mas tenho uma certa predileção pelo PostgreSQL. Além disso, temos algumas situações em que é nossa única opção e gostaríamos de adicionar replicação ao mix. O que você está usando atualmente e como se sente em relação à solução? Este não é um post MySQL versus PostgreSQL, eu prometo, porque não é o que estou tentando iniciar. :)

45
f4nt

Resposta curta - ainda não existe essa solução para PostgreSQL se você precisar de escravos somente leitura online.

Existem dois grandes projetos de desenvolvimento em andamento nesta área que estão incluídos no PostgreSQL 9.0 (Primavera/Verão de 2010), a saber:

  • Replicação síncrona:

http://wiki.postgresql.org/wiki/NTT's_Development_Projects

  • Leia apenas escravos em espera ativa:

http://wiki.postgresql.org/wiki/Hot_Standby

que combinados objetivam alcançar a facilidade de uso da replicação no estilo MySQL, menos os bugs/problemas que o MySQL tem, mais a confiabilidade que os usuários conhecem do PostgreSQL.

Tudo isso foi iniciado por um manifesto da equipe central do PostgreSQL em 2008:

http://archives.postgresql.org/pgsql-hackers/2008-05/msg00913.php

As soluções de replicação PostgreSQL até hoje com a maior base de usuários são Slony-I (mais caro para gravações, faz alterações de esquema complicadas), WAL shipping/walmgr (Slaves não podem ser usados ​​online) e pgQ/londiste do Skype/Skytools ( mais ferramentas/blocos de construção do que uma solução acabada).

Eu escrevi algumas coisas sobre Log Shipping, walmgr e Slony-I, veja

http://blogs.AMD.co.at/mt/mt-search.cgi?blog_id=1&tag=pgrep&limit=2 para obter mais informações.

9
Michael Renner

E para lançar outra solução no ringue: rubyrep.

Para comparar com seus requisitos:

  • Fácil configuração
    Sim, esse é realmente o foco principal do rubyrep.
  • Failover simplista
    Sim. Na verdade, rubyrep faz replicação mestre-mestre - para failover, nenhuma ação é necessária. Basta começar a usar o outro banco de dados.
  • Mudanças de esquema não interrompem a replicação
    Sim.
    Para alterações de chave não primária, a replicação nem precisa parar (mas certifique-se de que o esquema seja alterado em ambos os lados ao mesmo tempo)
    Para adicionar/remover tabelas, simplesmente reinicie o daemon de replicação. Apenas alterar a coluna da chave primária de uma tabela exige um pouco de esforço.
  • Adicionar um novo banco de dados ao servidor é perfeito (ou seja, como o mysql, você pode replicar um servidor de banco de dados inteiro, de modo que um novo banco de dados é criado no mestre e se propaga automaticamente para o escravo)
    Isso só é suportado de uma forma limitada: cada configuração do rubyrep replica apenas um banco de dados por vez. (Mas é muito fácil configurar a replicação para mais de um banco de dados.)
5
Arndt Lehmann

Você não mencionou ter um escravo de leitura ativo como um requisito, então vou propor o uso do Heartbeat com armazenamento compartilhado ou DRBD. Ele simplesmente faz a coisa certa e a administração é muito fácil. É o equivalente do Linux ao antigo clustering do Microsoft SQL Server. Um nó está ativo e o outro nó é passivo enquanto os dados são compartilhados entre os dois. Você não precisa se preocupar com a replicação baseada em SQL porque tudo é tratado mais abaixo no nível do bloco.

Sério, é de longe a melhor solução se você não precisa ler escravos. O material do arquivo WAL era piegas na melhor das hipóteses e você deve configurar tudo novamente se interromper o processo de envio para uma reinicialização do servidor. slony e londiste não cortam a mostarda. Se você deseja permanecer na árvore de código-fonte principal e não se tornar comercial, o Heartbeat é sua melhor aposta.

4
diq

Se você deseja uma replicação mestre/escrava assíncrona, considere Londiste (parte do pacote skytools do Skype) wiki.postgresql.org/wiki/Londiste_Tutorial

É fácil de instalar, adicionar um novo banco de dados é fácil, a replicação apenas "pega".

O failover não está embutido. Você precisará alterar as strings de conexão do aplicativo ou ofuscar a conexão do banco de dados por trás de outra camada de software.

Algumas mudanças de esquema são fáceis. Outros são mais difíceis. Depende da sua aplicação. A próxima versão do skytools (versão 3.0) deve lidar com DDL e incluir recursos para tornar o failover mais fácil.

Mudamos para Londiste depois de achar o Slony doloroso demais para usar.

2
KevinRae

De acordo com seus requisitos, parece que PITR é a maneira mais fácil de resolver seu problema:

backup on-line e recuperação pontual (PITR)

Você não disse que precisava consultar o servidor escravo, então PITR pode estar certo.

É parte padrão do PostgreSQL da versão 8.0, então você provavelmente já tem tudo o que é necessário para colocá-lo em funcionamento.

Se você achar as instruções muito detalhadas, dê uma olhada em SkyTools WalMgr que tornará o processo de criação/failover para dados hot-standby tarefa de comando único.

Para cenários de replicação mais complexos, tive uma boa experiência com o Slony-1, mas o PostgreSQL tem muitas opções de replicação/HA disponíveis.

2
dpavlin

Exceto para 'adicionar um novo banco de dados', você pode tentar o Mammoth Replicator ( https://projects.commandprompt.com/public/replicator ). É de código aberto, fácil de configurar e oferece suporte a failover. As principais limitações são banco de dados único e incapacidade de replicar as alterações DDL, ambos estão na lista TODO.

1
Alexey Klyukin

Na verdade, não existem maneiras gratuitas/de código aberto de fornecer o que você está procurando. Se você deseja algo tão pronto para uso, consulte as várias soluções de replicação comerciais de terceiros.

Agora, é é possível fazer sua própria replicação com o Postgres usando o envio do registro da cabeça de gravação (WAL):

http://www.postgresql.org/docs/8.3/interactive/warm-standby.html

Basicamente, é aqui que você pode colocar um nó secundário no modo de recuperação contínua e importar logs de transação para ele a cada {pequeno intervalo}. A configuração do Postgres tem "stubs" para permitir que você faça certas coisas quando um Postgres quando um WAL for concluído e não, e é nisso que se baseia essa configuração - utilizando esses "stubs".

No entanto, isso não permite que você faça replicação mestre-mestre e/ou circular.

Em qualquer caso, ele definitivamente funciona para erdundância, mas eu não o chamaria de "configuração fácil", "failover simplista", "perfeito" ou qualquer coisa assim.

1
Alex Balashov

Veja uma discussão aqui, talvez isso possa ajudar:

http://blog.endpoint.com/2009/05/competitors-to-bucardo-version-1.html

e

Concorrentes para Bucardo Versão Um, encontrados mais abaixo na página:

http://www.planetpostgresql.org/

1
mm2010

Atualmente, estou olhando para o replicador de tungstênio, ainda estou longe de qualquer conclusão definitiva, mas provavelmente vale a pena dar uma olhada.

www.continuent.com

0
Aleksandar Ivanisevic

Postgres-R parecia promissor, mas não sei se o projeto ainda está vivo.

0
brunoqc