感谢您提供的帮助或建议。
我试图在Windows上的Postgresql 10上构建我自己的多主复制,因为这种情况不能使用任何当前的第三方工具进行PG多主机复制,这也可能涉及订阅者组中的另一个数据库平台(Sybase ADS) 。我有以下逻辑来创建双向复制,部分受Bucardo逻辑的启发,介于1个发布者和2个订阅者之间:
***我认为订阅者的触发器需要暂停以防止他们将收到的语句推送给他们的订阅者,即如果节点A和节点B都订阅了彼此的表A,那么更新节点A的表A应该复制到节点B的表A,而不是在双向“乒乓风暴”中复制回表A.
希望能够以FIFO顺序以时间戳的顺序双向完成,除非我能找出创建子进程以同时运行同步的方法。
为此,我试图找出设置服务逻辑的最佳方法 - 实际上是上面的步骤2,显然是在Linux中使用守护进程完成的,但我必须在Windows中工作,使其运行为,或者类似于服务/代理 - 或者提出一种相当简单有效的设计来将源DB语句发送给订户DB。
有没有人看到这个计划有缺陷或可能不起作用?
免责声明:我对Postgresql一无所知,但已经做了大量的自定义复制。
双向复制的主要问题是合并问题。
如果在具有不同属性的两个系统中使用相同的密钥,哪一个可以推动其更改?如果你提名一个大师,那就容易了。然后奴隶每次都被覆盖。
您可以处理多少延迟?将“通知”部分取出更容易,只需要一个五分钟的Windows任务调度程序作业来检查日志表并推送数据。
换句话说,这种模式:
ReplicationBatch
列设置为NULL即你运行UPDATE LogTable Set ReplicationBatch=BatchNumber WHERE ReplicationState IS NULL
你运行SELECT * FROM LogTable WHERE ReplicationState=RepID
来获取要处理的记录
重点是您需要保留复制记录,以便在复制它们时,可以从源添加其他日志记录而不会弄乱批处理
然后定期清除日志表。