J’avais créé un forum de test avec deux conteneurs web_only, le conteneur mail-receiver, Postgres et Redis sur un réseau Docker. Les deux conteneurs web nginx étaient précédés par HAProxy. Ils fonctionnaient bien, mais j’ai constaté lors de la reconstruction de l’un des deux conteneurs web qu’il y avait toujours une courte période d’indisponibilité où un code 503 était retourné.
Heureusement, j’ai trouvé une solution palliative, mais rien de parfait ;
avant de reconstruire app1, exécutez
echo \"disable server be_discourse/app1\" | socat stdio /run/haproxy/admin.sock
puis, une fois le processus de reconstruction de app1 terminé, exécutez
echo \"enable server be_discourse/app1\" | socat stdio /run/haproxy/admin.sock
Inversement, pour reconstruire
app2, exécutez
echo \"disable server be_discourse/app2\" | socat stdio /run/haproxy/admin.sock
puis, une fois le processus de reconstruction de app2 terminé, exécutez
echo \"enable server be_discourse/app1\" | socat stdio /run/haproxy/admin.sock
ceci est basé sur la correspondance de
/etc/haproxy/haproxy.cfgconcernantbe_discourse, je ne collerai pas le fichier de configuration dans un bloc de code pour l’instant, mais si une masse critique le souhaite, je pourrais le faire.
ainsi, cela atténue le problème du 503 en indiquant à HAProxy de détourner le trafic avant qu’il ne sache qu’il y aurait un 503 du conteneur en panne.
vous pouvez alternativement créer une page d’erreur, mais je n’ai pas eu beaucoup de succès avec cela, et je pense que cela nécessite des recherches supplémentaires. Cependant, cela ne résout pas vraiment le problème de l’indisponibilité.