2009-04-20 2 views
2

우리는 3 대의 tomcat 서버에 대한로드 밸런싱 설정에서 mod_jk가 말하는 하나의 httpd (아파치)를 가지고있다. 3 시간 동안 각 바람둥이 인스턴스를 재활용해야합니다. 따라서 tomcat1은 1에서 시작하고 tomcat2는 2에서 ... 그리고 tomcat1이 4에서 다시 재생 될 때까지 ...mod_jk로드 밸런서 구성에서 disable 지시문을 프로그래밍 방식으로 조정하는 방법은 무엇입니까?

스크립트 또는 프로그램 유형을 구성하여 최소화하도록 최소화 된 작업자 노드를 비활성화합니다 우리의 응용 프로그램을 사용하는 사용자 세션 오류.

제안 사항.

답변

2

크리스 감사 또는 답변. 나는 그것이 효과적 일 것이라고 확신하지만, 우아한 재시작이 매우 유사하더라도 런타임에 변경을 트리거하고 싶었습니다. 나는 내 기술 과제를 다음과 같은 방법으로 성취 할 수 있었다.

httpd.conf 파일에서 mod_jk 모듈에 jkmanager를 사용하려면 다음 줄을 추가해야합니다. 파일은 "workers.properties"에

<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를 볼 수 있습니다 종료. 다음 그림과 비슷한 것을 얻어야합니다. 단지 jkmanger에 대해 다음 URL을 실행하는 런타임에 근로자를 사용하지 않도록하기 위해

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

. 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 

나는 누군가가 알 필요가 경우에 설정을 설명하는 내 블로그의 전체 기사를 배치했다.

Cloud Computing Blog

+0

안녕하세요. 동일한 작업을하고 있지만 위의 화면을 볼 수 없습니다. 기타가 잘 작동합니다. 무엇을해야합니까 ?? – Kumar

+0

클라우드 컴퓨팅 블로그 링크도 손상되었습니다. 어디로 가고 있는지 모를 복제본을 찾을 수 없습니다. – slm

2

당신이 당신의 workers.properties이 보이는 경우, 그래서에 "우아한에서는 apachectl"에 workers.properties을-읽기 다시 mod_jk 경우 : 당신은 그냥 사람과 balanced_workers 목록을 대체하는 스크립트를 작성할 수

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

... 

여기에 내가 주위에 거짓말을했던 일부 비트에서 함께 자갈길 그냥 할 수있는 스크립트의 원하는하고 우아한의 아파치

업데이트. 프로덕션 환경에서 사용하는 것은 좋지만, 자신의 버전에 대한 아이디어를 줄 수도 있습니다.

#!/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, 당신은 흥미로운 한 대답하지만 나를 위해 작동하지 않습니다. 한 번에 내 하위 작업자 중 하나만 사용하지 못하게하려고했습니다.

우리는 'agent-lb'로드 밸런서로 작업한다고 가정합니다.노동자가 비활성화 대기 것을

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

보장하기 위해 :

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

은 '에이전트-N1'하위 작업자 사용이 URL을 해제하려면 :

이 URL을 사용하여 작업자 상태를 보려면 작업자 상태 페이지로 리디렉션하고 하위 작업자 'agent-n1'의 'Act'필드를 확인하십시오.

'agent-n1'하위 작업자를 활성화하려면 다음 url을 사용하십시오.

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