gpt4 book ai didi

postgresql - 在没有第 3 方工具的情况下避免 PostgreSQL 中的脑裂

转载 作者:行者123 更新时间:2023-11-29 11:44:25 24 4
gpt4 key购买 nike

我有 2 台 PostgreSQL 服务器,我已经在它们之间设置了流复制。我已经构建了一个 shell 脚本,它每分钟都会 ping 到主服务器,并在主服务器不响应时将从服务器提升为主服务器。我正在使用 rh-postgresql95,第 3 方工具不适用于此版本。

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

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

我只想知道,如果slave升为master,old master也莫名其妙出现,如何避免脑裂?

有没有办法让老主人永远不会自动出现?

编辑

在我的 JDBC 连接字符串中,node1 是主节点,node2 是从节点。

我停止了 master 上的 postgres 服务,并将 slave 提升为 New Master。在这种情况下,服务指向新的主人。

然后我在old master上重启了postgres服务,服务开始指向old master(node1是old master的ip,它在JDBC连接字符串中排在第一位。)

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

最佳答案

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

select pg_is_in_recovery();

不在恢复中的服务器是主服务器。然后你可以检查最后一个 received WAL's number :

select pg_last_wal_receive_lsn();

具有最高 LSN 的服务器是最后升级的服务器。然后您可以关闭另一台服务器。

如果您对第三方选项改变主意,请查看 PostgresSQL wiki .

关于postgresql - 在没有第 3 方工具的情况下避免 PostgreSQL 中的脑裂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50345754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com