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>
위의 구성에서 각 BalancerMember
에 route
속성을 추가하여 세션 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 관리에 대한 더 많은 정보를 얻고 싶다면 온라인 강좌를 확인해 보세요.
이 기사가 유익했나요? 여러분의 생각을 다른 사람들과 공유해 보세요!