Mod Proxy 및 Session Sticky를 사용하는 Apache와 Tomcat 로드 밸런서

Apache와 Tomcat 로드 밸런싱 설정: 프록시 모듈 및 고정 세션 활용

Mod Proxy를 사용하여 Apache 웹 서버에서 Tomcat 로드 밸런서를 구성하는 것은 비교적 간단한 과정입니다. 이 가이드는 단계별로 진행하여 원활한 설정과 작동을 보장합니다.

특히 프로덕션 환경에서는 향상된 가용성을 위해 로드 밸런싱을 사용하는 것이 좋습니다.

Apache 웹 서버 설정

  • Apache 웹 서버 설정 파일(httpd.conf)에서 다음 모듈을 활성화합니다: proxy_module, proxy_balancer_module, proxy_http_module.
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_http_module modules/mod_proxy_http.so

이제 애플리케이션의 컨텍스트 루트에 대한 프록시 경로를 설정하고 밸런서 이름을 지정합니다.

예를 들어, 프록시 경로는 /examples로, 밸런서 이름은 mycluster로 설정합니다.

stickysession 옵션을 추가하는 것이 중요합니다. 이 옵션이 없으면 동일한 요청이 여러 Tomcat 서버로 분산되어 애플리케이션에서 세션 만료 문제가 발생할 수 있습니다.

<IfModule proxy_module>
ProxyRequests Off
ProxyPass /examples balancer://mycluster stickysession=JSESSIONID
ProxyPassReverse /examples balancer://mycluster stickysession=JSESSIONID
<Proxy balancer://mycluster>
BalancerMember http://localhost:8080/examples route=server1
BalancerMember http://localhost:8090/examples route=server2
</Proxy>
</IfModule>

위의 구성에서 각 BalancerMemberroute 속성을 추가하여 세션 ID에 경로 값을 추가할 수 있도록 했습니다.

다음으로 Apache 액세스 로그에 JSESSIONID를 기록하도록 설정합니다.

  • LogFormat 지시문에 다음 항목을 추가합니다.
%{JSESSIONID}C

수정된 LogFormat 예시:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"%{JSESSIONID}C\" combined
  • Apache 웹 서버를 다시 시작하여 변경 사항을 적용합니다.

Tomcat 서버 설정

Tomcat 인스턴스를 Apache 구성의 BalancerMember에 설정된 것과 동일한 경로 ID로 설정해야 합니다.

  • Tomcat의 server.xml 파일에서 jvmRoute 매개변수를 추가합니다. 이 매개변수는 Engine 태그 내에 위치해야 합니다.

8080 포트로 실행되는 Tomcat 인스턴스의 경우:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="server1">

8090 포트로 실행되는 Tomcat 인스턴스의 경우:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="server2">

설정 확인

애플리케이션에 부하를 생성하고 Apache 서버의 액세스 로그를 확인하여 요청이 단일 Tomcat 인스턴스로만 라우팅되는지 확인합니다.

또한 세션 ID가 경로 정보와 함께 추가되었는지 확인합니다. 아래는 그 예시입니다.

127.0.0.1 - - [18/Sep/2013:10:02:02 +0800] "POST /examples/servlets/servlet/RequestParamExample HTTP/1.1" 200 662 "http://localhost/examples/servlets/servlet/RequestParamExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:06 +0800] "GET /examples/servlets/servlet/RequestInfoExample HTTP/1.1" 200 693 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:17 +0800] "GET /examples/servlets/reqinfo.html HTTP/1.1" 200 3607 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:20 +0800] "GET /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1124 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:26 +0800] "POST /examples/servlets/servlet/SessionExample HTTP/1.1" 200 1142 "http://localhost/examples/servlets/servlet/SessionExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:28 +0800] "GET /examples/servlets/servlet/SessionExample?dataname=fda&datavalue=fadaf HTTP/1.1" 200 1159 "http://localhost/examples/servlets/servlet/SessionExample" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B4EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:32 +0800] "GET /examples/servlets/servlet/SessionExample?dataname=foo&datavalue=bar HTTP/1.1" 200 1174 "http://localhost/examples/servlets/servlet/SessionExample?dataname=fda&datavalue=fadaf" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"
127.0.0.1 - - [18/Sep/2013:10:02:36 +0800] "GET /examples/servlets/servlet/RequestHeaderExample HTTP/1.1" 200 1423 "http://localhost/examples/servlets/" "Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130807 Firefox/17.0""B80557A1D9B48EC1D73CF8C7482B7D46.server2"

이 가이드가 Apache Mod Proxy 및 고정 세션을 사용하여 Tomcat 로드 밸런서를 구성하는 데 도움이 되었기를 바랍니다.

Tomcat 관리에 대한 더 많은 정보를 얻고 싶다면 온라인 강좌를 확인해 보세요.

이 기사가 유익했나요? 여러분의 생각을 다른 사람들과 공유해 보세요!