我正在使用haproxy 1.5.4。在pgbouncer面前。
我的配置启用了pgsql-check。启用检查后,我会在 pgbouncer log 中看到这些消息。
2015-10-01 05:02:46.203 27104 LOG C-0x6609d0: (nodb)/(nouser)@10.53.6.132:38711 closing because: client unexpected eof (age=8)
2015-10-01 05:02:58.205 27104 LOG C-0x6609d0: (nodb)/(nouser)@10.53.6.132:39111 closing because: client unexpected eof (age=8)
2015-10-01 05:03:10.207 27104 LOG C-0x6609d0: (nodb)/(nouser)@10.53.6.132:39707 closing because: client unexpected eof (age=9)
2015-10-01 05:03:22.208 27104 LOG C-0x6609d0: (nodb)/(nouser)@10.53.6.132:40281 closing because: client unexpected eof (age=8)
这些是我在默认检查时获得的相同消息。我的意思是什么时候没有 选项pgsql-check。
我也试过在pgsql-check中提供一个有效的用户,但我仍然看到这样的eof消息。
选项pgsql-check user pg
2015-10-01 04:58:27.057 27104 LOG C-0x6609d0: pg/pg@10.53.6.132:17813 login attempt: db=pg user=pg
2015-10-01 04:58:27.057 27104 LOG C-0x6609d0: pg/pg@10.53.6.132:17813 closing because: client unexpected eof (age=0)
2015-10-01 04:58:29.058 27104 LOG C-0x6609d0: pg/pg@10.53.6.132:17882 login attempt: db=pg user=pg
2015-10-01 04:58:29.058 27104 LOG C-0x6609d0: pg/pg@10.53.6.132:17882 closing because: client unexpected eof (age=0)
我的问题是pgsql-check
与默认tcp check
的不同之处。我的印象是它会正确关闭连接,我不会在日志中看到这些消息。
我们是否使用pgsql-check
看到了这些消息?
答案 0 :(得分:2)
当HAProxy直接连接到PostgreSQL时(我的情况是postgres 9.4和HAProxy 1.5),我有同样的消息。
我没有提供任何用户名:
LOG: could not receive data from client: Connection reset by peer
LOG: incomplete startup packet
使用有效的用户名:
LOG: could not receive data from client: Connection reset by peer
所以,显然,没有用户名的pgsql-check似乎非常接近“标准”tcp检查。使用用户名,它似乎发送有效的启动序列。但在这两种情况下,连接都会突然终止,并且不能正常关闭或看起来。
解决方案可能是使用the generic TCP check来正确打开和关闭连接,但这样做无视整个pgsql-check目的。
答案 1 :(得分:0)
我通过通用TCP检查进行了这样的配置。我实际上可以确认它也在日志中也收到了相同的错误。
您可以在我的github存储库https://github.com/gplv2/haproxy-postgresql
中找到python脚本和示例配置。即使我确实发送了一个正确的十六进制关闭值,我仍然在日志中得到了它:
LOG:无法接收数据 来自客户端:连接被对等方重置
Afaik,我发送了一个正确的关闭,我已经用wireshark对其进行了多次分析,以查看关闭发送给PG数据库的确切内容:
# write: terminate session
tcp-check send-binary 58 # Termination packet
tcp-check send-binary 00000004 # packet length: 4 (no body)
这是退出(命令行客户端测试)的十六进制转储
00000000 58 00 00 00 04 X ....
事实上,haproxy中的标准psql-check和定制的通用泛型似乎产生了相同的结果,这是非常有趣的。找到解决方案后,我会分享它。
编辑:添加psql协议信息的来源:https://www.postgresql.org/docs/9.5/static/protocol-message-formats.html
afaik,我完全按照文献记载的方法实施了关闭操作,