我有3个Postgresql数据库节点(node0,node1,node2,版本9.4)和1个pgpool节点(版本3.7)
1.1)node0是primary,node1和node2是standby。
1.2)“show pool_nodes”和“select * from pg_stat_replication”按预期工作。
1.3)“插入”和“选择”按预期工作。
2.1)我手动停止了node0中的postgresql服务。
2.2)PGPool运行故障转移脚本,node1成为主/ node2变为备用。
2.3)“显示pool_nodes”表示节点0已关闭,“select * from pg_stat_replication”仅显示一个备用节点,即node2。他们是对的。
2.4)“插入”和“选择”按预期工作。
3.1)我手动启动node0作为node1的备用。
3.2)“select * from pg_stat_replication”表明node0和node2都是备用的,它们按预期工作。
3.3)“show pool_nodes”显示node0仍然是“down”,这是预期的。
3.4)“pcp_attach_node -n 0”,它返回node0。 “show pool_nodes”显示node0现在处于“up”状态,这是预期的。
3.5)但是,“插入”将失败并显示消息“错误:无法在只读事务中执行INSERT”。
3.6)“select * from pg_stat_replication”显示0行,这意味着两个备用节点消失。
3.7)很明显,所有“insert”和“select”都转到node0,而不是node1。
PGPool以主从流模式运行。
那么,我在步骤3.4中错过了什么来恢复失败的节点?
我遇到了和你一样的问题。但是,我的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之后,问题就解决了。