Eu tentei o Postgres-XC e ele ainda não implementa SQL completo (como SERIAL)
O Postgres-R parece interessante, mas "não está pronto para produção", de acordo com os desenvolvedores.
Então eu usei o pgpool-II 3.0.1. Sim, funciona bem. Mas, tanto quanto eu posso ver, é apenas para 2 nós PG.
Existe alguma coisa lá fora, na verdade pronta para produção E capaz de trabalhar com vários nós PG?
replication
postgresql
mrkafk
fonte
fonte
Respostas:
Você já considerou Bucardo ? É multimaster assíncrono. Não pegou completamente e não é uma solução geral, mas pode valer a pena tentar.
fonte
Eu tenho que concordar com a avaliação de Peter: Não há realmente uma boa replicação multimestre para o Postgres no momento. (Realizar replicação multimestre verdadeira é um problema muito difícil, e não estou apaixonada por nenhuma das soluções disponíveis.)
Cribbing A lista de possíveis soluções da Wikipedia que você pode querer investigar:
fonte
Isso é orientado para Java pesado, mas as APIs do cliente de banco de dados nativo podem ser conectadas às fontes de dados JDBC. O Tungsten Myosotis é um exemplo para o MySQL nativo da ponte JDBC.
Tungstênio Enterpriese é bom para multi-mestre assíncrono. Eu acho que funciona para MySQL, PostgreSQL e Oracle. Pode ser executado de forma independente ou incorporado em um aplicativo Java. Eu já vi isso funcionar no MySQL, mas eles reivindicam o PostgreSQL. O componente Replicator é de código aberto, mas a solução completa possui mais peças e requer custos de licenciamento. O Continuent originalmente possuía o Sequoia para multi-mestre síncrono, mas eles o abandonaram e, em vez disso, criaram o Tungsten para multi-mestre assíncrono - consideram escalar um negócio mais estratégico do que a consistência síncrona do ACID. O tungstênio é escrito em Java; é por isso que eles oferecem o Myosotis para conectar clientes de banco de dados nativos.
SymmetricDS é bom para multi-mestre assíncrono. É de código aberto. Ele instala / desinstala os gatilhos para capturar atualizações, em vez do log de posição. Pode ser executado de forma independente ou incorporado em um aplicativo Java.
O HA-JDBC é bom para síncrono multimestre. Ele substitui o software extinto mais antigo, como C-JDBC e Sequoia. É de código aberto. Ele usa commit de duas fases e trabalha para PostgreSQL, MySQL, Oracle, SQL Server, Derby, Sybase e muitos outros via dialetos. É principalmente para incorporado, portanto, incorpore em um aplicativo Java para conectá-lo ao PostgreSQL. Bloqueios distribuídos, sequências, hora, rand, etc. são tratados pelo jGroups do Redhat / JBoss. Um recurso interessante é o modo de transação "serial" em vez de "paralelo", se o seu aplicativo tiver conflitos e não suportar reversão. Usei esse modo "serial" com êxito para atualizar um aplicativo herdado que não tinha conhecimento do cluster de banco de dados e, portanto, estava faltando o código de nova tentativa de transação. O modo serial salvou o dia e evitou uma reescrita desagradável.
H2 é bom para multi-mestre síncrono. É de código aberto. Ele suporta bancos de dados ou clusters independentes usando confirmação de duas fases, semelhante à arquitetura HA-JDBC, mas é tudo em um, em vez de exigir um componente extra para confirmação de duas fases. Não tenho certeza se ele distribui bloqueios ou depende de terceiros, como jGroups ou Hazelcast.
Qualquer replicação baseada em JDBC para PostgreSQL e outros bancos de dados precisa de uma ponte nativa para JDBC, a menos que seu aplicativo já esteja gravado em Java. Para o MySQL, o Tungsten Enterprise oferece um componente opcional chamado Myosotis. Usei isso com êxito para conectar o PHP / Perl / C / mysqlclient ao JDBC, onde a fonte de dados JDBC era uma fonte de dados proxy HA-JDBC apontando para um cluster MySQL / InnoDB de 4 nós.
O Tungsten suporta o PostgreSQL nos componentes Replicator e Router, mas não tem certeza sobre o componente Myosotis. Talvez. Os componentes do replicador / roteador de tungstênio são para multi-mestre assíncrono, mas o Myosotis pode conectar você a um back-end JDBC alternativo, como HA-JDBC ou H2, para síncrona.
Se houver um nativo do PostgreSQL na ponte JDBC, eu gostaria de ouvir sobre isso. Em teoria, qualquer banco de dados com um driver JDBC Tipo 4 pode ser ponte. O JDBC do tipo 4 fala o protocolo de banco de dados nativo da mesma forma que a interface do cliente nativo para esse banco de dados; portanto, deve haver um mapeamento individual das chamadas nativas para chamadas JDBC.
fonte
A resposta para isso é um retumbante não.
fonte
Eu venho usando londiste nos últimos 2 anos para replicação multimestre no postgresql.
Você coloca suas tabelas em filas usando pg_queue e pode assinar quantos outros bancos de dados desejar para cada fila, a replicação é atômica por fila e é muito resistente.
Você pode ler sobre londiste aqui ( http://pgfoundry.org/projects/skytools/ ), é isso que os caras do Skype usam para o cluster, eles também o criaram, então é o dobro da diversão :)
fonte
Se você ainda estiver interessado, tente este: http://www.symmetricds.org/ (somente Java)
fonte
Eu encontrei o sistema de replicação "multimestre" utilizável:
obtenha o RabbitMQ http://www.rabbitmq.com/ - é um middleware de mensagem.
configure um cluster Rabbit MQ no Rabbit.
crie fila para cada nó em um cluster e vincule-os à troca do tipo 'fanout'.
Dessa forma, uma mensagem enviada para qualquer nó e qualquer fila é replicada para todos os outros nós. Eu tenho um código de trabalho para isso!
fonte