在Postgres 10中避免双向复制风暴

时间:2018-07-02 17:13:23

标签: postgresql replication postgresql-10 multi-master-replication

我正在尝试使用Postgres 10中的新逻辑复制功能进行双向复制。我的设置是:

  • 两个PostgreSQL 10服务器分别在本地主机上运行,​​分别在端口5431和5432上运行,两者都为wal_level = logical,并且在服务器5431上创建了具有复制功能的角色Replicationnt1,在服务器5432上类似地创建了copynt2。
  • 两者中都有一个简单的测试表:创建表emp(id int,name varchar(32));
  • “为表emp创建发布pub1;”在5431的服务器上,并“为表emp创建发布pub2”;在5432的服务器上。
  • “创建订阅子2连接'host = localhost dbname = postgres用户= replicant2密码= xxxxxx端口= 5432'发布pub2;”在服务器5431上,类似地在服务器5432上。

当我在5432处将一条记录(2,“ Tom Bombadil”)插入服务器时,它会在5431处复制到服务器。但是(可预测),该记录会复制回到5432,再回到5431,依此类推。结果是,随着每次复制触发进一步的复制,每个表的emp表中的记录越来越多。

有什么办法告诉逻辑复制不要重新复制记录?我可以在id上创建一个唯一索引并以错误停止它,但是那仍然需要超出复制数据和窃取处理虚假错误的周期所需的额外跳数。

谢谢!

更新:实际上,创建唯一索引实际上是行不通的。如果我以id为主键创建了上面的示例,它会继续尝试每五秒钟复制一次,并且由于重复键异常而失败。

0 个答案:

没有答案