2013-10-01 3 views
1

J'ai donc un serveur proxy inverse, où Nginx fonctionne comme serveur proxy et loadbalancer. Mon plus gros problème, que j'ai 2 backends de l'application, dont j'ai besoin parfois de fermer. Lorsque j'écris après le serveur vers le bas le backend, l'arrêt et perd des sessions. Comment est-ce que je peux arrêter gracieusement un de mon serveur d'application? Alors que Nginx attend pendant que toutes les sessions seront terminées ou pour quelque temps?Nginx backend shutdown sans perdre de session

Ma simples config:

upstream loadbalancer { 
       ip_hash; 
       server   192.168.0.1:443; 
       server   192.168.0.2:443; 
} 
+2

Veuillez le demander sur [SuperUser.com] (http://superuser.com). –

Répondre

0

Ok le problème est que chaque serveur dispose de son propre gestionnaire de session, et lorsque le serveur est mort les données de session est perdu avec ce serveur, une bonne solution est de faire un Stockage de session centralisé, par exemple le même serveur qui répartit la charge, et les deux autres serveurs s'y connectent pour obtenir les données de session, si un serveur est hors service et que l'autre serveur tente de desservir la connexion desservie par l'autre serveur alors les données seront toujours trouvées parce que les données sont stockées ailleurs, les méthodes communes pour ce faire utilise memcached comme stockage de session. En ce qui concerne les avantages, vous pouvez ajouter et supprimer autant de serveurs d'applications que vous le souhaitez et les utilisateurs ne remarqueront même pas de changement.

Mais par contre, si ce seul serveur meurt, toutes les données de session sont perdues, car les données sont centralisées.

Vous n'avez pas vraiment tagué votre question avec quelle langue vous utilisez, mais si vous la recherchez sur google, vous trouverez facilement des messages utiles pour vous aider.

+0

Ce n'est pas un problème que lorsque le serveur meurt, il perd des sessions. Quand j'ai une maintenance avec l'un des serveurs d'application, je veux dire à Nginx qu'il ne donnera pas de nouvelles sessions au serveur nr. 2, mais donnez toutes les nouvelles sessions au serveur nr. 1, et toutes les anciennes sessions dans le serveur au nr. 2 doivent rester jusqu'à leur expiration. – Aivaras

+0

ok donc une autre idée ne marque pas le serveur comme en baisse, il suffit de diminuer sa priorité, je ne sais pas si elle gardera les anciennes sessions connectées au serveur d'origine ou non. –

+0

Lorsque la priorité décroît, Nginx commence à envoyer une ancienne requête de session au nouveau serveur (avec une priorité plus élevée) même si j'ai ip_hash. – Aivaras