2016년 9월 28일 수요일

[Apache] 로드밸런싱 로그 출력


결론부터 말하자면 %{BALANCER_WORKER_NAME}e 항목으로 출력합니다.
예를들면 ajp://web01:8009 와 같이 출력되는데 아래와 같이 httpd.conf에서 설정할 수 있습니다.

######################################################################################################
LogFormat "%h %l %u %t %{BALANCER_WORKER_NAME}e \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
######################################################################################################

설정항목의 자세한 내용은 https://httpd.apache.org/docs/2.2/ja/mod/mod_log_config.html 를 참조하세요.

로드밸런스의 설정은 대략 아래와 같습니다.

######################################################################################################
    <Location />
        Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
        ProxyPass balancer://lb01/ stickysession=ROUTEID|jsessionid nofailover=Off scolonpathdelim=On lbmethod=byrequests
    </Location>

    <Proxy balancer://lb01/>
        BalancerMember ajp://web01:8009 loadfactor=10 route=jvm1 retry=3
        BalancerMember ajp://web02:8009 loadfactor=10 route=jvm2 retry=3
    </Proxy>
######################################################################################################

물론 tomcat이나 jboss쪽의 server.xml 에는 jvmRoute를 꼭 설정하여야 합니다.

위에서 scolonpathdelim=On 이란 url;jsessionid=xxx 와 같이 쿠키를 사용할 수 없는 브라우져에서 url에 세션ID가 포함되는데 이것을 인지하기 위해 설정을 on 으로 합니다.
보통은 쿠키의 ROUTEID란 항목에 어느 루트로 로드밸런싱을 하는지 설정하는데 쿠키를 사용할 수 없을때는 jsessionid 를 이용하게 됩니다.
따라서 stickysession=ROUTEID|jsessionid 로 설정을 해야 합니다.

이렇게 하고 로그 파일에 %{BALANCER_WORKER_NAME}e 항목을 출력하면 해당 요청이 어느 서버로 갔는지 알 수 있습니다.

참고로 http://httpd.apache.org/docs/2.2/mod/mod_proxy_balancer.html 에서는 아래와 같이 항목을 설명하고 있습니다.

BALANCER_SESSION_STICKY
: 현재 Request에 사용되는 stickysession 항목값입니다. ROUTEID인지 jsessionid인지.
BALANCER_SESSION_ROUTE
: 현재 Request를 Parsing하여 얻어진 루트 경로입니다. 즉, 이미 사용되어지고 있는 당신의 세션에 저장된 루트값이며 계속 이쪽 경로로 보내지게 됩니다.
처음 요청시에는 아직 저장된 값이 없기 때문에 null 상태가 됩니다.
BALANCER_WORKER_ROUTE
: 현재 Request가 사용하는 Worker의 루트 경로입니다.
BALANCER_ROUTE_CHANGED
: BALANCER_SESSION_ROUTE값과 BALANCER_WORKER_ROUTE값이 다를경우에 true가 됩니다. 정상적인 경우라면 첫 요청시에 true 를 파악하여 Header add Set-Cookie “ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/” env=BALANCER_ROUTE_CHANGED 의 설정과 같이 쿠키를 추가한후 다음부터는 BALANCER_SESSION_ROUTE에 값이 저장되도록합니다.
BALANCER_NAME
: 현재 Request가 사용하는 로드밸런서이름입니다. balancer://lb01/ 와 같은 값입니다.
BALANCER_WORKER_NAME
: 현재 Request가 사용하는 Workder이름입니다.

댓글 없음:

댓글 쓰기