【发布时间】:2019-02-22 10:42:37
【问题描述】:
我无法解决这个问题:
如果有 2 个 postgresql 服务器,则使用某些表的逻辑复制(发布、订阅),如果它在一个方向上工作 - 一切都很好,但恐怖开始于两个方向。
那些。在 server1 和 server2 上有相同的数据库具有相同的任务表。 根据副本,从 server1 到 server2 只传输 INSERT 和 UPDATE,然后在 server2 上,逻辑处理任务并将更新状态写入任务,相应地飞回 server1(仅将 UPDATE 带回服务器)。
问题是我们得到一个循环副本(在第一台服务器上设置状态 1 就足够了,然后在服务器 2 上设置状态 2,我们看到在我们的表中任务的状态将从 1 无限更改为 2 并且反之亦然,这使得数据变得困难并乱扔日志。 不幸的是,没有办法改变应用程序逻辑。从想法出发,只在必要时包含一个返回响应(即不是实时的,而是按照一定的时间表使状态固定)
【问题讨论】:
-
当然,你需要“master to master”复制——2ndquadrant.com/en/resources/postgres-bdr-2ndquadrant
-
为什么要复制?你不能使用其中一台服务器作为“真相来源”,然后使用外部表访问另一台服务器的数据吗?
-
@a_horse_with_no_name 我可能是错的,但是如果你在另一个服务器上设置了外表,那么对这个表的所有查询都会在原来的服务器上执行,而数据甚至不会存储在我们的服务器上。所谓的“复制品”。因此,我们既没有实现性能提升,也没有实现数据安全。
-
使用外部表,您实际上是在将一台服务器的负载分配给两台服务器;)您应该包含这些要求。另一种选择是使用主/从设置并对读取查询进行负载平衡(例如,通过 pgPool 或 pgBouncer)。如果您的应用程序的读取次数多于写入次数,这可能是最简单的扩展方式(并且您可以拥有多个从属服务器来分配负载)
-
复制的重点是:1)数据备份和故障转移; 2) 在主副本和副本之间拆分读取访问,即 Postgres 中的“热备用”。借助 Multi-master,您还可以共享写入查询