Ma configuration actuelle est nginx en tant qu'équilibreur de charge, en face d'un ensemble de serveurs en amont.
Je veux pouvoir déployer le système sans modifier l'expérience de l'utilisateur. Cela signifie qu'il n'y a pas de 502s et pas d'augmentation de la durée des pages.
J'ai cru comprendre que lorsque nginx -s reload
est émis, nginx créera gracieusement de nouveaux threads pour gérer les nouvelles connexions pour la nouvelle configuration, mais terminera toujours de traiter les requêtes qui étaient en cours au moment du rechargement. De plus, j'ai lu quelque part que le fait de marquer un upstream comme down
dans le bloc amont, et le rechargement, enlèvera cet amont de la rotation, mais terminera tout de même les connexions en vol avec lui.
Est-ce que tout cela est correct ?
Le plan actuel est d'avoir un petit processus dans l'hôte nginx, qui va essentiellement modifier la configuration de nginx et émettre ces recharges gracieuses lorsqu'on lui demande de le faire par le biais d'une API REST interne.
Mon outil de déploiement connectera alors ce processus et ajoutera/supprimera mes upstreams de la configuration de nginx dans l'ordre, après l'arrêt gracieux et le démarrage/réchauffement de chaque upstream.
Est-ce que cela a du sens ? Comment d'autres personnes procèdent-elles ? Existe-t-il des outils déjà disponibles pour cela ?
Je n'ai pas eu beaucoup de chance en cherchant des informations sur ce sujet...