簡體   English   中英

如何以編程方式調整mod_jk負載均衡器配置中的disable指令?

[英]How to programmatically adjust the disable directive in the mod_jk load balancer configuration?

我們有一個設置,我們有一個httpd(apache),mod_jk在負載平衡設置中與三個tomcat服務器通信。 我們必須在三個小時內回收每個tomcat實例。 因此tomcat1將在1處重新啟動,而tomcat2將在2處重新啟動......直到tomcat1再次在4處再循環。

我們希望配置一個腳本或一種程序來禁用正在進行重新計划的工作節點,以最大限度地減少使用我們的應用程序的用戶的會話錯誤。

有什么建議。

mod_jk在“apachectl graceful”上重新讀取workers.properties,所以如果你的workers.properties看起來像這樣:

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

... 

你可以編寫一個腳本,用你想要的那個替換balanced_workers列表,然后是graceful的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>

“workers.properties”文件的更改是:

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

完成這些更改后,您可以通過鍵入您的網址,然后輸入/ jkmanager /來查看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,你回答很有意思,但似乎對我不起作用。 我想一次只禁用一個我的子工作者。

讓我們假設我們正在使用'agent-lb'負載均衡器。

要使用此URL查看工作人員狀態:

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

要禁用'agent-n1'子工作程序,請使用以下URL:

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

要確保工作人員被禁用,請等待重定向到工作人員狀態頁面,並查看子工作人員的“Act”字段,'agent-n1'

要啟用'agent-n1'子工作程序,請使用以下URL:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM