본문 바로가기
FullStack/41. WEB.WAS

Apache + Tomcat 로드밸런싱

by nakanara 2020. 1. 30.
반응형

Apache + Tomcat 2대를 이용하여 로드밸런싱을 설정 과정을 기록하였습니다.

  • CentOS
  • Apache 2.4
  • Tomcat 8.5 X 2

Apache 설정

  1. Apache와 Tomcat을 연결하기 위해 JK Connector(JKModule)를 설정

JK Connector 다운로드

Docker를 사용하여 apache를 올렸기 때문에 linux용 (http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/linux/jk-1.2.31/x86_64/) mod_jk-1.2.31-httpd-2.2.x.so 를 다운로드 후 mod_jk.so로 파일명 변경, apache/modules에 복사해 넣습니다.

  1. conf/httpd.conf에 Connector을 설정
... 

LoadModule jk_module modules/mod_jk.so

<IfModule jk_module>
JkWorkersFile conf/workers.properties # work 목록
JkLogLevel info
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"
JkMount /* service # service로 설정된 서비스를 호출
</IfModule>

...
  1. conf/workers.properties 파일 생성
worker.list=service

# -----------------
# Load Balance 설정
# -----------------

worker.service.type=lb

# 해당 서비스 리스트 , 로 구분
worker.service.balance_workers=service1,service2 

# R[equest], S[ession], N[ext], T[raffic], B[usyness]
# worker.service.method=R
# Tomcat SessionID가 동일한 경우 동일 서버 라우팅 여부
worker.service.method=S
worker.service.sticky_session=true


# -----------------
# Service1 설정
# -----------------
worker.service1.host=127.0.0.1
worker.service1.port=8009 # port 가 달라야 함.

# 부하 분산 가중치 설정
worker.service1.lbfactor=1 
# 연결 지속 메시지 발송 여부
#worker.service1.socket_keepalive=true
worker.service1.socket_timeout=300

worker.service2.host=127.0.0.2 
worker.service2.port=8009
worker.service2.lbfactor=1
#worker.service2.socket_keepalive=true
worker.service2.socket_timeout=300
  1. Tomcat SessionID 설정

세션이 연결된 Tomcat에 요청을 보내기 위해서 jvmRound 설정
(세션 ID 끝에 jvmRoute 값이 추가됨)

Worklist에서 설정한 worker.{workid}.xxx workID를 Server.xml에 jvmRound 설정

  • WAS#1
<Engine name="Catalina" defaultHost="localhost" jvmRoute="service1">
...
</Engine>
  • WAS#2
<Engine name="Catalina" defaultHost="localhost" jvmRoute="service2">
...
</Engine>

참고

반응형