Hi Michael, On Fri, Apr 17, 2009 at 04:47:38PM +0100, Michael Miller wrote: > Hi, > > I am doing some intial testing with HAProxy and have come across a > problem I don't seem to be able to resolve. > > A summary of what I am initially trying to achieve follows. I am trying > to use HAProxy to provide a VIP that passes on a tcp (SMTP as it > happens) stream to a backend server. If that server is down, I would > like the connection forwarded to a backup server. > > Doing some testing and watching the status page reveals that if both > servers are configured as normal, rather than backup, servers the tcp > connection is rerouted when the initial attempt to connect fails. > However, when one server is configured as backup, the connection never > gets to the backup server. > > The config I am using is: > global > log 127.0.0.1 local0 > log 127.0.0.1 local1 notice > maxconn 4096 > pidfile /var/run/haproxy.pid > ##chroot /usr/share/haproxy > user haproxy > group haproxy > daemon > #debug > #quiet > spread-checks 10 > > defaults default_settings > log global > mode http > option httplog > option dontlognull > option abortonclose > ## option allbackups > option clitcpka > option srvtcpka > option forwardfor > retries 10 > option redispatch > maxconn 2000 > backlog 256 > timeout connect 5000 > timeout client 50000 > timeout server 10000 > > listen www-health > bind 0.0.0.0:8080 > mode http > monitor-uri /haproxy > stats enable > stats uri /stats > > listen smtp > log global > bind 0.0.0.0:25 > mode tcp > #option smtpchk HELO haproxy.local > option tcplog > balance roundrobin > rate-limit sessions 10 > timeout connect 10000 > timeout client 60000 > timeout server 60000 > > server smtp01 10.1.1.5:25 > server smtp02 10.1.1.6:25 backup > > > > > Note that I am trying to avoid using active health checks and am hoping > that the tcp connection failure when connecting to the primary will fall > back to the backup server. This works as expected when both servers are > configured as "active" rather than "backup" servers. Looking at the > status page when one is down, the 10 retries against the "down" server > are shown and then the tcp connection succeeds to the second server. > > Is this a bug that the tcp connection is not forwarded to the backup > server, or am I missing some "obvious" configuration settings?
Neither :-) It is designed to work like this though I agree that it is not necessarily obvious. As documented, a backup server is only activated when all other servers are down. Here, since you are not checking the active server, it is never down. That's as simple as that. May I ask why you don't want to enable health-checks ? That's a rather strange choice, as it means you don't care about the server's status but still hope that a failure will be detected fast enough to hope a redispatch would work. You might destroy a lot of traffic acting like this. Also, there is an "smtpchk" option which is able to check that your server responds on port 25. You should really use it. You don't necessarily need to check every second, for SMTP generally, checking once a minute may be enough for small setups. Regards, Willy