【问题标题】:pgpool lost master after pcp_attach_nodepgpool 在 pcp_attach_node 之后失去了 master
【发布时间】:2018-08-06 10:07:57
【问题描述】:

我有 3 个 Postgresql DB 节点(node0、node1、node2,9.4 版)和 1 个 pgpool 节点(3.7 版)

第 1 步:

1.1) node0为主,node1和node2为备用。

1.2) “show pool_nodes”和“select * from pg_stat_replication”按预期工作。

1.3) “插入”和“选择”按预期工作。

第 2 步:

2.1) 我在 node0 中手动停止了 postgresql 服务。

2.2) PGPool 运行故障转移脚本,node1 成为主节点/node2 成为备用节点。

2.3) “Show pool_nodes”显示节点 0 已关闭,“select * from pg_stat_replication”仅显示一个备用节点 node2。他们是正确的。

2.4) “插入”和“选择”按预期工作。

第三步:

3.1) 我手动启动 node0 作为 node1 的备用。

3.2) "select * from pg_stat_replication" 显示node0和node2都是stand-by,按预期工作。

3.3) "show pool_nodes" 显示 node0 仍处于 "down" 状态,这是意料之中的。

3.4) “pcp_attach_node -n 0”,带回node0。 "show pool_nodes" 显示 node0 现在处于 "up" 状态,这是预期的。

3.5) 但是,“插入”将失败,并显示消息“错误:无法在只读事务中执行插入”。

3.6) "select * from pg_stat_replication" 显示0行,这意味着两个备用节点消失了。

3.7) 显然,所有“插入”和“选择”都转到 node0,而不是 node1。

PGPool 以主从流模式运行。

那么,我在步骤 3.4 中遗漏了什么以恢复故障节点?

【问题讨论】:

  • 确保您的所有故障模式都首先工作。如果系统一开始就不能正确地进行故障转移,那么从故障状态中恢复是没有意义的。例如,如果您从node0 拉出网络电缆,而不是手动停止postgresql 服务,那么在步骤 2 中会发生什么情况?如果您同时拔掉node0node2 的插头,模拟导致3 台服务器中的2 台出现电源故障,会发生什么情况?几年前,我花了 6 个多月的时间试图让 Pgpool 为客户工作......
  • @AndrewHenle,感谢您的快速回复。所有故障模式都能完美运行。我在 node0、node1 和 node2 上测试了不同的案例。现在我被困在这个简单的恢复场景中。
  • 这个看起来很眼熟:stackoverflow.com/questions/40000250/…
  • @AndrewHenle 是的,我从那篇文章中学到了 pcp_attach_node。 “pcp_attach_node -U pgpool -h localhost -p 9898 -n 0”在我的例子中带回了 node0,但 pgpool 将连接到这个现在处于待机状态的 node0。在这种情况下,它应该连接到 node1(新主节点)以进行“插入”。

标签: postgresql pgpool


【解决方案1】:

我遇到了和你一样的问题。但是,我的 Pgpool 版本是 3.7.2。我发现这个链接解决了我的问题:

https://git.postgresql.org/gitweb/?p=pgpool2.git;a=commit;h=e8baa3f0ee1a24f833cfa6cc5d0104b5cefe7b04

我在主/从复制中有三个 postgresql 数据库节点。当节点 0 为主节点时,我的 Pgpool 工作正常。在主节点故障转移到节点 1 并且节点 0 作为备用节点故障恢复后,pgpool 将我的写入查询发送到节点 0,并得到只读事务错误。

我再做一次检查。我进行主/从复制,其中节点 0 是热备用节点,节点 1 是主节点。我启动 pgpool 并尝试创建/插入数据库。 Pgpool总是将我的写查询发送到节点0。我下载了最新的源码并自己构建了Pgpool后,问题就解决了。

【讨论】:

  • 感谢您的帮助。能否请您与我分享您所经过的站点?我今天想验证一下。谢谢。
  • 我认为 3.7.2 存在解释上述行为的错误,3.7.2 和 3.7.3 都存在从节点 1 到节点 0 的故障转移无法正常工作的错误(已修补的次要release 将很快交付),所以现在应该坚持 3.7.1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
相关资源
最近更新 更多