ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 아파치 웹서버(2.4)와 톰캣 연계 및 WAS 이중화
    개발 2019. 4. 29. 13:51

    1. 톰캣 설치


    개요
    톰캣은 8.x으로 다운로드 받는다. 로드 밸런싱을 위한 것인데, 8버전이 아닌 다른 버전일 경우 테스트가 필요하다.

    다운로드
    # wget http://apache.tt.co.kr/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz

    압축해제
    # tar xvf apache-tomcat-8.5.32.tar.gz
    # mkdir /webapps
    # mv apache-tomcat-8.5.31 /webapps/tomcat8_was1

    튜닝
    톰캣의 성능 개선을 위해 /webapps/tomcat8_was1/bin/catalina.sh 안에 아래의 코드를 추가한다.
    힙메모리 설정인데, -Xms1024M -Xmx1024M 부분을 1024 혹은 2048로 설정한다.

    # vi catalina.sh

    JAVA_OPTS="-Xms1024M -Xmx1024M -XX:NewSize=256M -XX:MaxNewSize=256M -XX:PermSize=256M  -XX:+DisableExplicitGC"

    톰캣 기동 및 종료

    # cd /webapps/tomcat8_was1/bin/
    # sh startup.sh (기동)
    # sh shutdown.sh (종료)

    브라우저에서 정상적으로 동작하는지 확인한다. 톰캣은 기본포트를 8080을 이용한다.

    http://localhost:8080

     

    2. 아파치 설치


    아파치는 2.4 버전을 설치한다. 설치는 2.2와는 조금 다르다. 2.2설치시 기본적으로 포함되었던 것들이 2.4버전에는 별도로 빠지면서, 설치시 필요한 파일들을 직접 다운로드 받아 설치해야한다.

     

    apr 설치

    # wget http://apache.mirror.cdnetworks.com/apr/apr-1.5.0.tar.gz
    # tar -xvzf apr-1.5.0.tar.gz
    # cd apr-1.5.0

    # ./configure --prefix=/usr/local/apr
    # make
    # make install

     

    apr-util 설치

    # wget http://apache.mirror.cdnetworks.com/apr/apr-util-1.5.3.tar.gz
    # tar -xvzf apr-util-1.5.3.tar.gz
    # cd apr-util-1.5.3
    # ./configure --with-apr=/usr/local/apr --prefix=/usr/local/apr-util
    # make
    # make install

     

    pcre 설치

    # wget http://sourceforge.net/projects/pcre/files/pcre/8.31/pcre-8.31.tar.gz/download
    # mv download pcre-8.31.tar.gz
    # tar xvfz pcre-8.31.tar.gz
    # cd pcre-8.31
    # ./configure --prefix=/usr/local/pcre
    # make
    # make install

    apr 또는 apr-util은 yum으로도 설치가 가능하나 버전이 낮아서 아파치 설치시 동작하지 않는 경우가 있다. 꼭 소스 컴파일하자.
    Apache2.4 설치

    # wget http://apache.tt.co.kr/httpd/httpd-2.4.33.tar.gz
    # tar xvf httpd-2.4.33.tar.gz
    # mv  httpd-2.4.33
    # ./configure --prefix=/webapps/apache2 --enable-module=shared --enable-rewrite --enable-speling --enable-so --enable-ssl --with-pcre=/usr/local/pcre --with-apr=/usr/local/apr –with-apr-util=/usr/local/apr-util
    # make
    # make install

    컴파일시 make[2]: *** [exports.lo] 오류 1 오류가 생기는 경우가 있는데, yum으로 설치된 apr의 버전이 너무 낮은 경우이다. 이런 경우 yum 에서 패키지를 제거하자.

    # yum remove apr

    아파치 기동 및 종료
    # cd /webapps/apache2/bin
    # ./apachectl start (기동)
    # ./apachectl stop (종료)

    브라우저에서 확인한다. 기본 포트는 80이고 소스는 /webapps/apache2/htdocs 에서 수정가능하다.

    http://localhost

     

    3. 아파치와 톰캣의 연동


    컨넥터 설치

    # wget http://mirror.navercorp.com/apache/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.43-src.tar.gz
    # tar xvf tomcat-connectors-1.2.43-src.tar.gz
    # mv tomcat-connectors-1.2.43-src
    # mv native
    # ./buildconf.sh
    # ./configure --with-apxs=/webapps/apache2/bin/apxs 
# make
    # make install

    아파치와 톰캣의 연계

    tomcat-connectors-1.2.43-src/native/apache-2.0/mod_jk.so 파일을 /webapps/apache2/modules 에 복사한다. (설치시 자동으로 복사되는 듯 하기도 하다.)

    아파치 설정 파일 변경
    # cd /webapps/apache2/conf
    # vi httpd.conf

    아래코드를 추가한다.

    LoadModule jk_module modules/mod_jk.so
    Include conf/mod_jk.conf

    DocumentRoot 부분을 톰캣의 ROOT로 변경한다.

    # vi mod_jk.conf

    JkWorkersFile /webapps/apache2/conf/workers.properties
    JkShmFile     /webapps/tomcat8_was1/logs/mod_jk.shm
    JkLogFile     /webapps/tomcat8_was1/logs/mod_jk.log
    JkLogLevel    info
    JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
    JkMount  /* worker1

    # vi workers.properties

    worker.list=worker1

    worker.worker1.port=8009
    worker.worker1.host=localhost
    worker.worker1.type=ajp13

    아파치와 톰캣을 재기동하고 http://localhost 를 호출 했을 때 톰캣이 정상적으로 보이는지 확인한다.

     

    4. 톰캣 이중화 (로드 밸런싱)

    톰캣의 부하를 줄이기 위해 톰캣을 2개 설치하고 아파치에서 부하를 두개의 톰캣으로 나눈다.

    두 번째 톰캣 설치
    # cd /webapps/
    # cp -ap tomcat8_was1 tomcat8_was2

    톰캣을 두개 가동하면 포트가 충돌나므로 두 번째 톰캣의 포트를 변경해준다.

    # vi /webapps/tomcat8_was2/conf/server.xml

    shutdown port : 8006
    connect port : 8081
    ajp port : 8010

    두 번째 톰캣이 정상적으로 동작하는지 확인한다.
    http://localhost:8081 두번째 톰캣
    http://localhost:8080 첫번째 톰캣
    http://localhost 아파치 (첫번째 톰캣이 보여야 한다.)

    설정파일 변경

    # vi /webapps/apache2/conf/mod_jk.conf

    하단의 내용중 아래 내용을 변경한다.
    JkMount  /* loadballance

    # vi /webapps/apache2/conf/ workers.properties

    worker.list=worker1,worker2,loadballance

    worker.worker1.port=8009
    worker.worker1.host=localhost
    worker.worker1.type=ajp13
    worker.worker1.lbfactor=100             # 반드시 '0'보다 커야하며, 이것은 job에 대한 비율
    worker.worker1.socket_timeout=1800  # 30분
    worker.worker1.socket_keepalive=1     # 사용:1, 미사용:0
    worker.worker1.connection_pool_timeout=600

    worker.worker2.port=8010
    worker.worker2.host=localhost
    worker.worker2.type=ajp13
    worker.worker2.lbfactor=100             # 반드시 '0'보다 커야하며, 이것은 job에 대한 비율
    worker.worker2.socket_timeout=1800  # 30분
    worker.worker2.socket_keepalive=1     # 사용:1, 미사용:0
    worker.worker2.connection_pool_timeout=600

    # tomcat timeout에 따른 중복 발생 방지
    worker.loadballance.retries=0
    worker.worker1.retries=0
    worker.worker2.retries=0

    worker.loadballance.type=lb
    # sticky방식은 일정 시간(session time)동안 한 WAS에 지속적으로 접속하는 설정임
    # 사용: true OR 1, 미사용: false OR 0
    worker.loadballance.sticky_session=1
    worker.loadballance.balanced_workers=worker1,worker2

    vi /webapps/tomcat8_was1/conf/server.xml
    vi /webapps/tomcat8_was2/conf/server.xml

    위 두 파일을 같이 수정한다.

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" Server=""/>

    Server=”” 추가한다.


    각 파일의  jvmRoute 에 worker의 이름을 넣어준다.

    소스의 WEB-INF/web.xml 에 아래 코드를 추가한다.

     

    <distributable/>

    모든 서버를 재기동하고, WAS 2개의 로그를 확인하여 브라우저에서 호출시 각각 톰캣의 로그가 정상적으로 생성되는지 확인한다.

     

    댓글 0

Designed by Tistory.