Acabei por fazer esta pergunta a Willy Tarreau, o autor de HAProxy. Ele ficou intrigado com a minha sugestão e fez uma pequena alteração no HAProxy que permite ajustar o maxconn para zero através do soquete de administração (isso não foi possível no momento em que pedi), o que resolveu meu problema. Citando o e-mail de acompanhamento que enviei a ele:
Hi there. That solves my problem pretty well. I issued "set maxconn frontend my_frontend 0", waited a few seconds for connections to drain, and then all subsequent connections are paused. I restarted the server, issued "set maxconn frontend my_frontend 3000", and connections resumed properly, without erroring out on existing requests.
Em resposta à resposta de JesseP - absolutamente, na maioria das vezes eu nunca quero fazer isso. Geralmente, tentamos organizar nossas migrações de banco de dados exatamente da maneira que você menciona, pois suspender o tráfego é, na melhor das hipóteses, arriscado. Alguns dos nossos utilizadores definiram tempos limite do cliente ridiculamente baixos, pelo que geralmente não queremos que o tráfego seja suspenso por mais de 15 segundos. Mas, para uma migração recente, em que tivemos um conjunto complexo de migrações de código e dados para executar simultaneamente, ter essa opção disponível era um salva-vidas.
Então, para resumir - não recomendando isso para o uso diário, mas a opção está lá, caso haja necessidade.