Java 如何以编程方式调整mod_jk负载平衡器配置中的disable指令?

Java 如何以编程方式调整mod_jk负载平衡器配置中的disable指令?,java,apache,tomcat,mod-jk,Java,Apache,Tomcat,Mod Jk,我们有一个设置,其中我们有一个httpd(apache),mod_jk在三个tomcat服务器上进行负载平衡设置。我们必须每三个小时回收一个tomcat实例。所以tomcat1将在1重新启动,tomcat2将在2重新启动,然后。。。直到tomcat1在4时再次回收 我们希望配置一个脚本或一种程序类型,以禁用正在进行recylce的工作节点,从而最大限度地减少使用我们的应用程序的用户的会话错误 任何建议。mod_jk在“apachectl”页面上重新读取workers.properties,因此如

我们有一个设置,其中我们有一个httpd(apache),mod_jk在三个tomcat服务器上进行负载平衡设置。我们必须每三个小时回收一个tomcat实例。所以tomcat1将在1重新启动,tomcat2将在2重新启动,然后。。。直到tomcat1在4时再次回收

我们希望配置一个脚本或一种程序类型,以禁用正在进行recylce的工作节点,从而最大限度地减少使用我们的应用程序的用户的会话错误


任何建议。

mod_jk在“apachectl”页面上重新读取workers.properties,因此如果您的workers.properties如下所示:

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

... 
您只需编写一个脚本,将平衡的工作人员列表替换为所需的工作人员列表,然后再编写优雅的apache

更新这里有一个脚本来实现这一点,这是我从我周围的一些片段拼凑而成的。我不建议在生产中使用它,但它可能会为您自己的版本提供一些想法

#!/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文件中,您应该添加以下行以启用mod_jk模块的jkmanager

<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>
完成这些更改后,您可以通过键入url并在末尾键入/jkmanager/来查看jkmanager。你应该得到类似下图的东西

为了在运行时禁用worker,只需针对jkmanger运行以下URL。您甚至可以读取xml格式的状态

要禁用tomcat1,只需点击:

http://your.web.server/jkmanager/?cmd=update&w=router&opt=256&from=list&att=vwa&val0=1&val1=0&val2=0  
要启用tomcat1回击,请执行以下操作:

http://your.web.server/jkmanager/?cmd=update&w=router&opt=256&from=list&att=vwa&val0=0&val1=0&val2=0
我在博客上发表了一篇完整的文章,解释了设置,以防有人需要知道


gkiragiannis,你的回答很有趣,但似乎对我不起作用。我一次只想让我的一个下属瘫痪

假设我们正在使用“代理lb”负载平衡器

要使用此url查看工作人员状态,请执行以下操作:

server-name/jkmanager/?cmd=list&w=agent-lb
server-name/jkmanager/?cmd=update&w=agent-lb&sw=agent-n1&vwa=1
server-name/jkmanager/?cmd=update&w=agent-lb&sw=agent-n1&vwa=0
要禁用“agent-n1”子工作程序,请使用以下url:

server-name/jkmanager/?cmd=list&w=agent-lb
server-name/jkmanager/?cmd=update&w=agent-lb&sw=agent-n1&vwa=1
server-name/jkmanager/?cmd=update&w=agent-lb&sw=agent-n1&vwa=0
要确保工作人员被禁用,请等待重定向到“工作人员状态”页面,并在“Act”字段中查找子工作人员“agent-n1”

要启用“代理-n1”子工作程序,请使用以下url:

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

嗨,我也在做同样的事情,但是我不能看到上面的屏幕。另一个很好。怎么办?云计算博客链接也断了。不知道它要去哪里,所以找不到复制品。