我尝试了Postgres-XC,但它尚未实现完整的SQL(例如SERIAL)
根据开发人员的说法,Postgres-R看起来很有趣,但是它“还没准备好生产”。
所以我用了pgpool-II 3.0.1。是的,效果很好。但据我所知,它仅适用于2个PG节点。
是否有任何实际准备就绪且能够与多个PG节点一起使用的东西?
我尝试了Postgres-XC,但它尚未实现完整的SQL(例如SERIAL)
根据开发人员的说法,Postgres-R看起来很有趣,但是它“还没准备好生产”。
所以我用了pgpool-II 3.0.1。是的,效果很好。但据我所知,它仅适用于2个PG节点。
是否有任何实际准备就绪且能够与多个PG节点一起使用的东西?
Answers:
我必须同意Peter的评估:Postgres目前还没有真正好的多原版复制。(执行真正的多主复制是一个非常困难的问题,我不喜欢任何可用的解决方案。)
抄录Wikipedia可能要调查的潜在解决方案列表:
PostgreSQL为多主复制提供了多种解决方案,包括基于两阶段提交的解决方案。有Bucardo,rubyrep,PgPool和PgPool-II,PgCluster和Sequoia以及一些专有解决方案。实现急切(同步)复制的另一种有前途的方法是Postgres-R,但是它仍在开发中。实现同步复制的另一个项目是Postgres-XC。Postgres-XC也仍在开发中。
这是面向Java的繁重工具,但是可以将本机数据库客户端API桥接到JDBC数据源。Tungsten Myosotis是JDBC桥接原生的MySQL示例。
Tungsten Enterpriese适合于多主机异步。我认为它适用于MySQL,PostgreSQL和Oracle。它可以独立运行,也可以嵌入Java应用程序中。我已经看到它适用于MySQL,但他们声称PostgreSQL。他们的Replicator组件是开源的,但是完整的解决方案包含更多部分,并且需要许可费用。Continentt最初将Sequoia用于多主设备同步,但他们放弃了它,而是创建了Tungsten来用于多主设备异步-与同步ACID一致性相比,他们认为扩展业务更具战略性。Tungsten用Java编写,因此这就是为什么它们提供Myosotis桥接本地数据库客户端的原因。
SymmetricDS适用于多主机异步。它是开源的。它安装/卸载触发器以捕获更新,而不是bin日志记录。它可以独立运行,也可以嵌入Java应用程序中。
HA-JDBC适用于多主机同步。它取代了诸如C-JDBC和Sequoia之类的旧软件。它是开源的。它使用两阶段提交,并且通过方言可用于PostgreSQL,MySQL,Oracle,SQL Server,Derby,Sybase以及许多其他应用程序。它主要用于嵌入式,因此嵌入Java应用程序以将其桥接到PostgreSQL。分布式锁,序列,时间,兰特等由Redhat / JBoss的jGroups处理。如果您的应用遇到死锁并且不支持回滚,那么一个不错的功能是事务模式“串行”而不是“并行”。我成功地使用了这种“串行”模式来改造不具备DB-cluster意识的旧版应用程序,因此缺少事务重试代码。串行模式节省了一天的时间,避免了麻烦的重写。
H2适用于多主机同步。它是开源的。它类似于HA-JDBC体系结构,支持使用两阶段提交的独立数据库或集群,但是它是一个一体的,而不需要额外的组件来进行两阶段提交。不知道它是否分布式锁定本身,还是依赖于第三方(如jGroups或Hazelcast)。
PostgreSQL和其他数据库的任何基于JDBC的复制都需要JDBC桥的本机,除非您的应用程序已经用Java编写过。对于MySQL,Tungsten Enterprise提供了一个称为Myosotis的可选组件。我成功地使用它来将PHP / Perl / C / mysqlclient桥接到JDBC,其中JDBC数据源恰好是指向4节点MySQL / InnoDB集群的HA-JDBC代理数据源。
Tungsten在其Replicator和Router组件中支持PostgreSQL,但不确定Myosotis组件。也许。Tungsten Replicator / Router组件用于多主机异步,但是Myosotis可以将您桥接到备用JDBC后端(例如HA-JDBC或H2)进行同步。
如果有JDBC桥接本机的PostgreSQL,我想听听。从理论上讲,任何具有JDBC Type 4驱动程序的数据库都可以进行桥接。类型4 JDBC讲本地数据库协议,就像该数据库的本地客户端接口一样,因此应将本地调用与JDBC调用一对一映射。
在过去的两年中,我一直在使用londiste在postgresql中进行多主机复制。
您可以使用pg_queue将表放入队列中,并且可以为每个队列预订所需的其他许多数据库,该复制是逐个原子地进行的,并且非常灵活。
您可以在此处了解有关londist的信息(http://pgfoundry.org/projects/skytools/),这是Skype家伙用于其集群的内容,也是他们创建的,因此是酷炫的一倍:)
如果您仍然感兴趣,请尝试以下一种方法:http : //www.symmetricds.org/ (仅Java)
我发现可用的“多主”复制系统:
获得RabbitMQ http://www.rabbitmq.com/-这是一个消息中间件。
在Rabbit中配置Rabbit MQ集群。
为集群中的每个节点创建队列,并将它们绑定到“扇出”类型交换。
这样,发送到任何节点和任何队列的消息将被复制到所有其他节点。我有一个有效的代码!