Как программно настроить директиву disable в конфигурации балансировщика нагрузки mod jk?
У нас есть настройка, где у нас есть один httpd (apache) с mod_jk, говорящий в настройке баланса нагрузки на три сервера tomcat. Мы должны перерабатывать каждый экземпляр tomcat в течение трех часов. Таким образом, tomcat1 перезапустится в 1, а tomcat2-в 2 и ... пока tomcat1 не повторится снова в 4.
Мы хотим настроить сценарий или тип программы, чтобы отключить рабочий узел, который проходит через recylce, чтобы минимизировать ошибки сеанса у пользователя, использующего наше приложение.
Любой предложения.
3 ответов:
Mod_jk перечитывает рабочих.свойства на "апачектл грациозный", так что вы, если ваши работники.свойства выглядят следующим образом:
worker.loadbalancer.type=lb worker.loadbalancer.balanced_workers=tomcat1, tomcat2, tomcat3 ...Вы можете просто написать сценарий, который заменяет список balanced_workers на те, которые вы хотите, а затем Apache
Update Вот сценарий, чтобы сделать именно это, который я собрал вместе с некоторыми битами, которые у меня лежали вокруг. Я бы не советовал использовать его в производстве, но это может дать вам некоторые идеи для вашей собственной версии.
#!/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
Крис спасибо или ваш ответ. Я уверен, что это сработает, но я хотел вызвать изменение во время выполнения, хотя изящный перезапуск очень похож. Я смог выполнить свою задачу описания следующим образом.
В вашем httpd.файл conf вы должны добавить следующие строки, чтобы включить модуль 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>Изменения на "рабочих.свойства файла" являются:
worker.list=router,tomcat1,tomcat2,...,tomcatn,jkstatus worker.jkstatus.type=statusПосле того, как эти изменения будут сделаны, вы сможете увидеть jkmanager, введя свой url-адрес, за которым следует /jkmanager/ в конце. Вы должны получить что-то похожее на следующую картину.
Для отключения рабочих мест во время выполнения просто запустите следующие URL-адреса против jkmanger. Вы даже можете прочитать статус в формате xml.
Чтобы отключить tomcat1 просто нажмите:
http://your.web.server/jkmanager/?cmd=update&w=router&opt=256&from=list&att=vwa&val0=1&val1=0&val2=0Чтобы включить tomcat1 back hit:
http://your.web.server/jkmanager/?cmd=update&w=router&opt=256&from=list&att=vwa&val0=0&val1=0&val2=0I опубликовал полную статью в своем блоге, объясняющую установку на случай, если кому-то нужно знать.
Гкирагианнис, твой ответ был интересен, но, похоже, не работает на меня. Я хотел отключить только одного из моих подчиненных одновременно.
Предположим, что мы работаем с балансировщиком нагрузки 'agent-lb'.
Для просмотра статуса работника используйте следующий url:
server-name/jkmanager/?cmd=list&w=agent-lbЧтобы отключить агент-Н1' суб использовать работника этот адрес:
server-name/jkmanager/?cmd=update&w=agent-lb&sw=agent-n1&vwa=1Чтобы убедиться, что работник отключен, дождитесь перенаправления на страницу статуса работника и найдите в поле "действие" подчиненного работника., агент-У1'
, Чтобы включить 'агент-Н1' суб использовать рабочий этот адрес:
server-name/jkmanager/?cmd=update&w=agent-lb&sw=agent-n1&vwa=0
Comments