Как программно настроить директиву disable в конфигурации балансировщика нагрузки mod jk?



У нас есть настройка, где у нас есть один httpd (apache) с mod_jk, говорящий в настройке баланса нагрузки на три сервера tomcat. Мы должны перерабатывать каждый экземпляр tomcat в течение трех часов. Таким образом, tomcat1 перезапустится в 1, а tomcat2-в 2 и ... пока tomcat1 не повторится снова в 4.



Мы хотим настроить сценарий или тип программы, чтобы отключить рабочий узел, который проходит через recylce, чтобы минимизировать ошибки сеанса у пользователя, использующего наше приложение.



Любой предложения.

711   3  

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/ в конце. Вы должны получить что-то похожее на следующую картину.

Скриншот Jkmanager http://r2c.images.s3.amazonaws.com/blog/articles/TomcatLoadBalancing/readytocloud-4-20-2009-000.png

Для отключения рабочих мест во время выполнения просто запустите следующие 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=0

I опубликовал полную статью в своем блоге, объясняющую установку на случай, если кому-то нужно знать.

Блог Облачных Вычислений

Гкирагианнис, твой ответ был интересен, но, похоже, не работает на меня. Я хотел отключить только одного из моих подчиненных одновременно.

Предположим, что мы работаем с балансировщиком нагрузки '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

    Ничего не найдено.