apache tomcat 로드밸런싱 김태호-20140808

6
© 2012 eTRIBE Inc. All rights reserved. 1 Apache-Tomcat 로드밸런싱 설정

Upload: taeho-kim

Post on 19-Jul-2015

529 views

Category:

Education


10 download

TRANSCRIPT

© 2012 eTRIBE Inc. All rights reserved. 1

Apache-Tomcat

로드밸런싱 설정

© 2012 eTRIBE Inc. All rights reserved. 2

Prologe

1. 두대 이상의 운영서버 운영시 Apache 웹서버와 Tomcat Was 서버 간의 로드밸런싱 설정 방법

2. Java/JSP 웹서비스시 안정적인 서비스를 위해 로드밸런싱 필요- 수정사항 발생 등의 이유로 Was 재기동 필요시 운영서버 중단 없이 사용함이 목적

3. 두산 운영서버 설정을 토대로 작성

4. 아파치 웹서버 및 톰캣 기본 설정 제외 로드밸런싱 위주로 작성

© 2012 eTRIBE Inc. All rights reserved. 3

라운드 로빈 방식의 로드밸런싱 설정

톰캣에서 제공하는 로드밸런싱은 정확히 톰캣 자체에서 제공하는 것이 아니라 아파치 웹서버와 연동되는 커넥터에 의해서 제공된다(로드밸런싱은 JK, JK2 커넥터에서만 제공된다). 현재는 라운드 로빈(Round Robin) 방식만이 제공되며 로드밸런싱에 대한 설정은workers.properties 파일에서 정의하게 된다.

예) workers.properties

worker.list=doosanheavyv2, doosanheavyv21, doosanheavyv22

worker.doosanheavyv2.type=lbworker.doosanheavyv2.balance_workers=doosanheavyv21, doosanheavyv22worker.doosanheavyv2.sticky_session=false

worker.doosanheavyv21.port=8315worker.doosanheavyv21.host=was1-2.doosan.comworker.doosanheavyv21.type=ajp13worker.doosanheavyv21.socket_timeout=150worker.doosanheavyv21.fail_on_status=400,500,503

worker.doosanheavyv22.port=8315worker.doosanheavyv22.host=was2-2.doosan.comworker.doosanheavyv22.type=ajp13worker.doosanheavyv22.socket_timeout=150worker.doosanheavyv22.fail_on_status=400,500,503

© 2012 eTRIBE Inc. All rights reserved. 4

라운드 로빈 방식의 로드밸런싱 설정

worker라는 개념은 톰캣의 프로세스로 보면 된다. 즉 worker를 설정하는 구성 요소는 JK 커넥터를 연결하는 방식(JK는 ajp13을 이용한다), 톰캣이 실행되어 있는 IP 혹은 도메인, ajp13 서비스 포트, 그리고 작업 할당량이다. 여기서 주의 깊게 볼 것이 작업 할당량인데 로드밸런싱시에 lbfactor라는 작업량의 비율을 보고 라운드 로빈 방식의 서비스를 제공하게 된다.

그럼 이제 남은 작업은 2개의 톰캣 프로세스를 실행시키는 것이다. 톰캣 프로세스를 여러 개띄우는 방법은 2가지가 있다.

하나의 Was 서버의 경우는 아래와 같다.톰캣을 2개 설치해서 기동시킨다. 이때 포트 충돌을 피하기 위해 서버 포트, AJP13과 HTTP 1.1 커넥터 포트 2개를 충돌되지 않게 재정의 한다. 하나의 톰캣에 2개의 서비스를 정의하고 톰캣을 기동시킨다. 이때 AJP13과 HTTP1.1 커텍터포트 2개를 충돌되지 않게 재정의 한다.먼저 2개의 바이너리를 설치했다고 가정하면 각각의 톰캣은 다음과 같은 형태의 server.xml 파일로 적용해 준다

하지만 두산의 경우 WAS 서버가 두개 이므로(서로 다른 하드웨어에 존재한다) jvmRoute명만다르게 하고 포트명은 동일해도 상관이 없다.

© 2012 eTRIBE Inc. All rights reserved. 5

라운드 로빈 방식의 로드밸런싱 설정

예) Was1 : server.xml<?xml version='1.0' encoding='utf-8'?><Server port="8317" shutdown="SHUTDOWN">.....<Service name="Catalina"><Connector port="8316“ protocol="HTTP/1.1“ maxThreads="300“ connectionTimeout="20000"

redirectPort="8443" URIEncoding="UTF-8"/><Connector port="8315" protocol="AJP/1.3" maxThreads="300" connectionTimeout="20000"

redirectPort="8443" URIEncoding="UTF-8"/>

<!-- jvmRoute 명 JK 커넥터에서 톰캣 프로세스를 구분하는데 사용.프로세스 별로 다르게 적용해야 함 -->

<Engine name="Catalina" defaultHost="localhost" jvmRoute="doosanheavyv21"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"

resourceName="UserDatabase"/><Host name="www.doosanheavy.com"

unpackWARs="false" autoDeploy="false"xmlValidation="false" xmlNamespaceAware="false">

<Context path="" docBase="/data01/app/was/doosanheavyv2_prod" debug="0" reloadable="false"/>

<Alias>org-www.doosanheavy.com</Alias><Alias>ssl.doosanheavy.com</Alias>

</Host></Engine>

</Service></Server>

© 2012 eTRIBE Inc. All rights reserved. 6

라운드 로빈 방식의 로드밸런싱 설정

예) Was2 : server.xml<?xml version='1.0' encoding='utf-8'?><Server port="8317" shutdown="SHUTDOWN">.....<Service name="Catalina"><Connector port="8316“ protocol="HTTP/1.1“ maxThreads="300“ connectionTimeout="20000"

redirectPort="8443" URIEncoding="UTF-8"/><Connector port="8315" protocol="AJP/1.3" maxThreads="300" connectionTimeout="20000"

redirectPort="8443" URIEncoding="UTF-8"/>

<!-- jvmRoute 명 JK 커넥터에서 톰캣 프로세스를 구분하는데 사용.프로세스 별로 다르게 적용해야 함 -->

<Engine name="Catalina" defaultHost="localhost" jvmRoute="doosanheavyv22"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"

resourceName="UserDatabase"/><Host name="www.doosanheavy.com"

unpackWARs="false" autoDeploy="false"xmlValidation="false" xmlNamespaceAware="false">

<Context path="" docBase="/data01/app/was/doosanheavyv2_prod" debug="0" reloadable="false"/>

<Alias>org-www.doosanheavy.com</Alias><Alias>ssl.doosanheavy.com</Alias>

</Host></Engine>

</Service></Server>