O HAProxy permite que você faça isso passando um comando para o soquete de estatísticas para desabilitar o servidor. Isso drenará as conexões (as conexões existentes para este servidor persistirão, mas nenhuma conexão nova será feita para ele).
Esta página fornece um bom resumo dos comandos disponíveis: link
e um exemplo de desativação:
echo "disable server <backend_name>/<server_name>" | socat stdio /var/run/haproxy.stat
onde /var/run/haproxy.stat é o soquete do domínio UNIX para os comandos, que é configurado no arquivo de configuração haproxy da seguinte forma:
global
stats socket /var/run/haproxy.stat mode 600 level admin
ao lado de outras opções globais.
Se você não tiver para se comunicar no soquete via socat, você pode se conectar a ele como qualquer outro soquete de domínio UNIX, o que é bastante simples em Python, Perl, PHP, C, etc. socat é usado principalmente em exemplos por conveniência.