我有HAProxy路由到PostgreSQL机器列表。当主机打开PostgreSQL时,我可以使用下面的行成功连接。在所有主机上关闭PostgreSQL后,我希望看到来自HAProxy的错误消息,有些内容与“Connection refused”有关,但没有看到任何内容......这是我的示例配置:
global
log 127.0.0.1 local4 debug
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
defaults
mode tcp
log global
option tcplog
option dontlognull
option redispatch
retries 3
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout check 10s
maxconn 3000
frontend cluster01
bind *:33300
mode tcp
option tcplog
default_backend cluster01
backend cluster01
mode tcp
option tcplog
balance roundrobin
server host1 <host ip>:5432 check
server host2 <host ip>:5432 check
这是我试图执行的命令:
psql -U postgres -d <dbname> -p 33300 -h 127.0.0.1
以下是'回复':
psql:
以下是syslog中的条目:
2014-05-28T21:17:15.486474+00:00 localhost.localdomain [info] haproxy[28503]: 127.0.0.1:58014 [28/May/2014:21:16:55.170] cluster01 cluster01/<NOSRV> -1/-1/0 0 SC 0/0/0/0/0 0/0
两个问题:
我的配置对于记录错误是否正常?
HAProxy是否支持TCP连接的个性化错误消息?我注意到在特定的HTTP响应代码上,HAProxy支持 errorfile 条目,但我看不出有关TCP的任何相关内容......我错了吗?
任何问题都可以毫不犹豫地询问
答案 0 :(得分:2)
您的错误已正确记录:“SC”标志表示无法建立服务器连接,并且服务器名称也表示连接未传递到任何服务器。这通常是因为您的服务器已关闭(或至少被启用的检查视为已关闭)。
在连接失败的情况下发送任何内容是不可能的(也不可取的),因为基于TCP的协议几乎是无限的列表,所有这些协议都不兼容,并且其中许多甚至不期望响应指示错误。相反,haproxy试图模仿它在另一方面的体验,甚至尝试将重置发送到客户端,如果它从服务器获得一个,但是没有办法保证它会以这种方式传递。