2009-04-20 7 views
2

Nous avons une configuration où nous avons un httpd (apache) avec mod_jk parler dans une configuration de la balance de charge à trois serveurs Tomcat. Nous devons recycler chaque instance de tomcat trois heures. Donc tomcat1 redémarrera à 1, et tomcat2 à 2 et ... jusqu'à ce que tomcat1 recycle à nouveau à 4.Comment ajuster par programme la directive disable dans la configuration de l'équilibreur de charge mod_jk?

Nous voulons configurer un script ou un type de programme pour désactiver le noeud de travail qui passe par un recylce pour minimiser erreurs de session à l'utilisateur en utilisant notre application.

Toutes les suggestions.

Répondre

2

Merci Chris ou votre réponse. Je suis sûr que cela fonctionnera, mais je voulais déclencher le changement au moment de l'exécution, même si le redémarrage gracieux est très similaire. J'ai été capable d'accomplir ma tâche de description de la manière suivante.

Dans votre fichier httpd.conf, vous devez ajouter les lignes suivantes pour activer le module jkmanager for mod_jk.

<Location /jkmanager/> 
JkMount jkstatus 
order deny,allow 
allow from <your ip address> 
allow from 127.0.0.1 
deny from all 
</Location> 

<IfModule mod_jk.c> 
... 
JkMount /jkmanager/* jkstatus 
... 
</IfModule> 

Les modifications sur le fichier « workers.properties » sont:

worker.list=router,tomcat1,tomcat2,...,tomcatn,jkstatus 
worker.jkstatus.type=status 

Après ces changements sont effectués, vous pouvez voir le jkmanager en tapant votre URL suivie/jkmanager/au fin. Vous devriez obtenir quelque chose de similaire à l'image suivante.

jkmanager screenshot http://r2c.images.s3.amazonaws.com/blog/articles/TomcatLoadBalancing/readytocloud-4-20-2009-000.png

Pour désactiver les travailleurs lors de l'exécution il suffit d'exécuter les URL suivantes contre le jkmanger. Vous pouvez même lire le statut dans un format xml.

Pour désactiver tomcat1 vient de frapper:

http://your.web.server/jkmanager/?cmd=update&w=router&opt=256&from=list&att=vwa&val0=1&val1=0&val2=0 

Pour activer tomcat1 retour hit:

http://your.web.server/jkmanager/?cmd=update&w=router&opt=256&from=list&att=vwa&val0=0&val1=0&val2=0 

J'ai posté un article complet dans mon blog expliquant la configuration au cas où quelqu'un a besoin de savoir.

Cloud Computing Blog

+0

salut je fais la même chose mais je ne suis pas en mesure d'obtenir l'écran ci-dessus. L'autre fonctionne bien. Que faire?? – Kumar

+0

Le lien Blog Cloud Computing est également cassé. Aucune idée où il est supposé aller, donc n'a pas pu trouver une réplique. – slm

2

mod_jk relit workers.properties sur une « apachectl gracieuse », de sorte que vous si votre workers.properties ressemble à ceci:

worker.loadbalancer.type=lb 
worker.loadbalancer.balanced_workers=tomcat1, tomcat2, tomcat3 

... 

Vous pouvez simplement écrire un script qui remplace la liste des balanced_workers avec les vous voulez, puis apache gracieuse

Mise à jour Voici un script pour faire exactement cela, que j'ai bricolé à partir de quelques bits que j'avais traîner. Je ne suggérerais pas de l'utiliser en production, mais cela pourrait vous donner quelques idées pour votre propre version.

#!/bin/bash 

# set some paths 
WORKERS_PROPERTIES="./workers.properties" 
APACHECTL="/usr/sbin/apache2ctl" 

# what does the loadbalancer config line look like? 
WORKER_LINE_START="worker.loadbalancer.balanced_workers=" 
# full list of workers 
ALL_WORKERS="tomcat1 tomcat2 tomcat3" 

# first command line arg is the worker to remove. 
remove=$1 

# build up the new line listing the active workers 
worker_line=$WORKER_LINE_START 
sep="" 
for worker in $ALL_WORKERS 
do 
    if [ ${remove} != ${worker} ] 
    then 
    worker_line="${worker_line}$sep $worker" 
    sep="," 
    fi 
done 

# sed hackery to replace the current line with the one we just built. 
# needs gnu sed (or another one that supports in-place editing) 
sed -i.bak "s/^$WORKER_LINE_START.*$/$worker_line/" $WORKERS_PROPERTIES 

# restart apache 
$APACHECTL graceful 
2

gkiragiannis, vous réponse était intéressante, mais ne semble pas fonctionner pour moi. Je voulais seulement désactiver un de mes sous-traitants à la fois.

Supposons que nous travaillons avec l'équilibreur de charge 'agent-lb'.

Pour afficher le statut de travailleur en utilisant l'adresse suivante:

server-name/jkmanager/?cmd=list&w=agent-lb 

Pour désactiver le sous « agent n1 » travailleur utilisent cette URL:

server-name/jkmanager/?cmd=update&w=agent-lb&sw=agent-n1&vwa=1 

Pour veiller à ce que le travailleur est attente désactivé pour la redirection vers la page d'état des travailleurs et regardez dans le champ 'Act' pour le sous-travailleur, 'agent-n1'

Pour activer le sous-agent 'agent-n1', utilisez cette adresse:

server-name/jkmanager/?cmd=update&w=agent-lb&sw=agent-n1&vwa=0 
Questions connexes