I came across this while trying to get my new stack and configuration up and running. A portion of my config looks like this:
backend lb.example.com server web1 web1.example.com:80 track web1.example.com/web1 server web2 web2.example.com:80 track web2.example.com/web2 backend web1.example.com server web1 web1.example.com:80 check backend web2.example.com server web2 web2.example.com:80 check disabled Note that web2.example.com/web2 is disabled for testing. This is recognized from a stats perspective. That is, the web2 backend is marked down and web2/web2 is marked as MAINT. Additionally, lb/web2 is marked as "MAINT(via)". Everything seems correct, except that when I send traffic to backend lb, web2 is still receiving balanced traffic. I will state up front that I am not yet familiar with the haproxy code, but in a cursory look, it appears this is happening when the config file is parsed. When web2/web2 is being marked as disabled, we set newsrv->state on that server, but this will never affect other servers that are tracking it. It seems like after all of the config is parsed and all servers are set up, we need to walk through all of the "untracking" servers and properly configure all of the servers that are tracking them. Maybe this means a call to set_server_(up|down|disabled) for each which will update all of the tracking servers? Again, I'm not all that familiar with the code, but I think this is what is happening. Regardless, I know it's broken. :-) Any thoughts? - Jim