Postgresql pgpool在pcp_连接_节点后丢失主机

Postgresql pgpool在pcp_连接_节点后丢失主机,postgresql,pgpool,Postgresql,Pgpool,我有3个Postgresql DB节点(node0、node1、node2,版本9.4)和1个pgpool节点(版本3.7) 步骤1: 1.1)节点0为主节点,节点1和节点2为备用节点 1.2)“显示池节点”和“从pg_stat_复制中选择*”按预期工作 1.3“插入”和“选择”预期工作 步骤2: 2.1)我手动停止了节点0中的postgresql服务 2.2)PGPool运行故障转移脚本,节点1变为主节点,节点2变为备用节点 2.3)“显示池_节点”显示节点0已关闭,“从pg_stat_复制中

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

步骤1: 1.1)节点0为主节点,节点1和节点2为备用节点

1.2)“显示池节点”和“从pg_stat_复制中选择*”按预期工作

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

步骤2: 2.1)我手动停止了节点0中的postgresql服务

2.2)PGPool运行故障转移脚本,节点1变为主节点,节点2变为备用节点

2.3)“显示池_节点”显示节点0已关闭,“从pg_stat_复制中选择*仅显示一个备用节点,即节点2。他们是正确的

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

步骤3: 3.1)我手动启动node0作为node1的备用

3.2)“从pg_stat_replication中选择*显示node0和node2都是备用的,按照预期工作

3.3)“显示池_节点”显示节点0仍处于“关闭”状态,这是预期的

3.4)“pcp_连接_节点-n 0”,它返回节点0。“show pool_nodes”显示node0现在处于“up”状态,这是预期的

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

3.6)“从pg_stat_replication选择*显示0行,这意味着两个备用节点消失

3.7)显然,所有“插入”和“选择”都指向节点0,而不是节点1

PGPool正在主从流模式下运行


那么,我在步骤3.4中遗漏了什么来恢复失败的节点呢?

我遇到了与您相同的问题。但是,我的Pgpool版本是3.7.2。我发现这个链接解决了我的问题:

我在主/从复制中有三个postgresql数据库节点。当节点0为主节点时,My Pgpool工作正常。主节点故障切换到节点1和节点0作为备用故障回复后,pgpool将我的写查询发送到节点0,并获取只读事务错误


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

首先确保所有故障模式都正常工作。如果系统首先不能正确地进行故障转移,那么从故障状态中恢复是没有意义的。例如,如果您从
node0
拔出网络电缆,而不是手动停止
postgresql
服务,在步骤2中会发生什么?如果同时拔下
node0
node2
上的插头,模拟3台服务器中有2台出现断电,会发生什么情况?几年前,我花了6个多月的时间试图让Pgpool为客户工作…@AndrewHenle,感谢您的快速回复。所有故障模式都能正常工作。我在node0、node1和node2上测试了不同的情况。现在我被困在这个简单的恢复场景中。这个场景看起来很熟悉:@AndrewHenle是的,我从那篇文章中学到了pcp_attach_node。在我的例子中,“pcp_attach_node-U pgpool-h localhost-p 9898-n 0”将node0带回来,但是pgpool将连接到这个node0,它现在处于备用状态。在这种情况下,它应该连接到节点1(新主机)以进行“插入”。感谢您的帮助。你能告诉我你经过的车站吗?我今天想核实一下。谢谢。我认为3.7.2遇到了一个可以解释上述行为的错误,3.7.2和3.7.3都有一个错误,从节点1到节点0的故障切换无法正常工作(修补的小版本很快就会发布),所以现在应该坚持使用3.7.1