3 votes

Configuration du proxy inverse nginx pour gérer les déploiements gracieux des serveurs en amont

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...

1voto

Vince Points 164

Oui, vous avez raison de penser que nginx continue à traiter les requêtes en cours lors du rechargement, et commencera à traiter les nouvelles requêtes avec la nouvelle configuration.

http://nginx.org/en/docs/beginners_guide.html#control

Les anciens processus de travail, qui reçoivent l'ordre de s'arrêter, cessent d'accepter de nouvelles connexions et continuent de traiter les demandes en cours jusqu'à ce qu'elles soient toutes traitées. Ensuite, les anciens processus de travailleur se retirent.

Marquer un amont comme down n'est pas très différent de celui qui consiste à le retirer de la configuration. Dans les deux cas, il n'acceptera pas de nouvelles demandes.

Nous rechargeons fréquemment la configuration de nginx (générée à l'aide de cog https://nedbatchelder.com/code/cog/ ) et n'entraîne pas de temps d'arrêt en ce qui concerne le proxy, pour les raisons suivantes en amont des lieux. Tant que le système en amont est prêt à traiter les demandes, il n'y a pas de temps d'arrêt.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X