본문 바로가기

기술 이야기/Amazon AWS

Amazon AWS상의 Apache -ELB - Tomcat 연동시 주의

.아마존에서 Client --> ELB --> Apache --> ELB(Internal) --> Tomcat에 대한 자동 스케일링(Auto Scaling) 구현시 보통의 경우 mod_jk설정을 하는 경우가 더러 있는데, 실제 부하가 발생을 하게 되면 전체 연결이 끊어진 듯한 현상이 발생을 하게 됩니다.


이 때 원인은 tomcat의 연결 설정에 Sticky 옵션이 문제를 일으키는 것 같네요. 이유는 Apache의 모듈이 ELB를 바라보게 세팅을 하게 되는데, 이후 부하가 발생을 하게 되면 ELB가 확장하는 시점에 IP가 변경이 되는 작업이 있게 됩니다. 


하지만 Apache는 변경된 ELB를 감지하고 못하고(Not Reconnect), 기존 소켓을 바라보고 작업을 진행하기 때문에 Tomcat도 부하를 못받고 Apache는 백엔드가 모두 끊어졌다고 판단을 하게 되는 것이네요.


이를 위해 Sticky Option을 빼게 되면 요청별로 부하를 분산하며 접속을 시도하므로 ELB가 변경되더라도 정상적으로 접속을 진행하게 됩니다.


아래는 mod_proxy AJP 방식으로 연결을 수행하는 옵션입니다.

ProxyPassMatch ^/(.*\.do)$  ajp://internal-elb-was-447552274.ap-northeast-2.elb.amazonaws.com:8009/$1 max=20 ttl=60 disablereuse=On
ProxyPassMatch ^/(.*\.jsp)$  ajp://internal-elb-was-447552274.ap-northeast-2.elb.amazonaws.com:8009/$1 max=20 ttl=60 disablereuse=On
ProxyPassReverse  / ajp://internal-elb-was-447552274.ap-northeast-2.elb.amazonaws.com:8009/