在没有第三方工具的情况下避免使用PostgreSQL中的大脑

时间:2018-05-15 08:36:08

标签: postgresql database-replication

我有2台PostgreSQL服务器,我在它们之间设置了流复制。 我已经构建了一个shell脚本,它将每分钟ping到主服务器,并在master无法响应时将slave强制为master。我使用的是rh-postgresql95,第三方工具无法使用此版本。

我的JDBC连接字符串有逗号分隔的节点,其中targetServerType = master,如下所示

jdbc:postgresql://node1,node2/accounting?targetServerType=master. 

我只是想知道如果奴隶被提升为主人并且老主人也以某种方式出现,我怎么能避免裂脑情况?

无论如何,老主人永远不会自动出现?

修改

node1是master,node2是我的JDBC连接字符串中的slave。

我停止了对主人的postgres服务,并将奴隶提升为新主人。在这种情况下,服务指向新的主服务器。

然后我重新启动了旧主服务器上的postgres服务,并且服务开始指向旧主服务器(node1是旧主服务器的ip,它首先出现在JDBC连接字符串中。)。

所以,我没有得到裂脑问题,但这种情况会导致数据不一致。

1 个答案:

答案 0 :(得分:2)

作为一个想法,您的ping脚本可以检查两个服务器是否认为它们是主人:

select pg_is_in_recovery();

未恢复的服务器是主服务器。然后你可以查看最后一个received WAL's number

select pg_last_wal_receive_lsn();

LSN最高的服务器是最后提升的服务器。然后,您可以关闭其他服务器。

如果您改变了对第三方选项的看法,请查看PostgresSQL wiki