我试过Postgres-XC,它并没有实现完整的SQL(像SERIAL)
Postgres-R看起来很有趣,但根据开发人员的说法,这是“不准备生产”的。
所以我用pgpool-II 3.0.1。 是的,它工作得很好。 但据我所知,只有2个PG节点。
有没有什么东西可以实际生产,并且能够与多个PG节点一起工作?
你考虑过Bucardo吗? 这是asynchronous多主机。 它并没有被完全吸引,也不是一个通用的解决scheme,但它可能是值得一试的。
我不得不同意彼得的评价:现在没有真正的多主复制Postgres的。 (做真正的多主复制是一个非常困难的问题,我不迷恋任何可用的解决scheme。)
Cribbing维基百科的潜在解决scheme列表,你可能想要调查:
PostgreSQL为多主复制提供了多种解决scheme,包括基于两阶段提交的解决scheme。 Bucardo,rubyrep,PgPool和PgPool-II,PgCluster和Sequoia以及一些专有解决scheme。 另一个有前途的方法,实现急切(同步)复制是Postgres-R,但它仍在开发中。 而另一个实现同步复制的项目是Postgres-XC。 Postgres-XC也在开发中。
这是沉重的Java导向,但本地数据库客户端API可以桥接到JDBC数据源。 钨Myosotis是原生JDBC桥接的MySQL的一个例子。
钨Enterpriese适合多主控asynchronous。 我认为它适用于MySQL,PostgreSQL和Oracle。 它可以独立运行或embedded到Java应用程序中。 我已经看到它为MySQL工作,但他们声称PostgreSQL。 他们的Replicator组件是开源的,但是完整的解决scheme有更多的部分,需要许可费用。 Continuent最初拥有多主同步的Sequoia,但是他们放弃了它,并且为多主同步创build了钨,他们认为扩大比同步ACID一致性更具战略性的业务。 钨是用Java编写的,所以他们提供Myosotis来连接本地数据库客户端。
SymmetricDS适用于多主机asynchronous。 它是开源的。 它安装/卸载触发器来捕获更新,而不是bin日志logging。 它可以独立运行或embedded到Java应用程序中。
HA-JDBC适用于多主同步。 它取代了像C-JDBC和Sequoia这样的老版本的软件。 它是开源的。 它使用两阶段提交,并且通过方言工作在PostgreSQL,MySQL,Oracle,SQL Server,Derby,Sybase和许多其他工具上。 它主要用于embedded式,因此embedded到Java应用程序中以将其桥接到PostgreSQL。 分布式锁,序列,时间,rand等由Redhat / JBoss的jGroups处理。 如果您的应用程序遇到死锁并且不支持回滚,一个很好的function是事务模式“串行”而不是“并行”。 我成功地使用这个“串行”模式来改造一个不是数据库集群感知的旧应用程序,所以它丢失了事务重试代码。 串行模式节省了一天,避免了一个讨厌的重写。
H2适用于多主同步。 它是开源的。 它支持使用两阶段提交的独立数据库或集群,类似于HA-JDBC体系结构,但它全部集成在一个中,而不需要两阶段提交的额外组件。 不知道它是否自己分发锁,或者依赖于第三方,如jGroups或Hazelcast。
除非您的应用程序已经用Java编写,否则任何基于JDBC的PostgreSQL和其他数据库的复制都需要JDBC桥接。 对于MySQL,Tungsten Enterprise提供了一个名为Myosotis的可选组件。 我成功地将PHP / Perl / C / mysqlclient连接到JDBC,其中JDBC数据源恰好是指向4节点MySQL / InnoDB集群的HA-JDBC代理数据源。
钨在Replicator和Router组件中支持PostgreSQL,但不确定Myosotis组件。 也许。 钨复制器/路由器组件用于多主控asynchronous,但Myosotis可以连接到另一个JDBC后端,如同步的HA-JDBC或H2。
如果有JDBC桥梁的本地PostgreSQL,我想听听它。 理论上讲,任何带有JDBC Type 4驱动程序的数据库都可以被桥接。 第4类JDBC说的是本地数据库协议,就像该数据库的本地客户端接口一样,所以应该有本地调用到JDBC调用的一对一映射。
答案是一个响亮的号码。
在过去的2年中,我一直在使用londiste在postgresql中进行多主复制。
你可以使用pg_queue将你的表放入队列中,并且你可以为每个队列预定许多其他的数据库,复制是通过队列primefaces化的,而且非常灵活。
你可以在这里阅读关于londiste( http://pgfoundry.org/projects/skytools/ )的文章,这就是Skype团队使用的,也是他们创build的,所以它是酷的:)
如果您仍然感兴趣,请尝试下面这个: http : //www.symmetricds.org/ (仅限Java)
我find了可用的“多主”复制系统:
得到RabbitMQ http://www.rabbitmq.com/ – 这是一个消息中间件。
在Rabbit中configuration一个Rabbit MQ集群。
为集群中的每个节点创build队列,并将它们绑定到“扇出”types交换。
这样一个消息发送到任何节点和任何队列被复制到所有其他节点。 我有一个工作代码!