Apache + Tomcat (다중 클러스터 - Multipul Servers)

염상민·2022년 7월 12일
0

참고 사항

이 글은 apache(=httpd)가 깔려 있다는 전제 하에 적은 글입니다.
1개의 서버 내의 여러 Tomcat을 실행합니다.
같은 세션을 공유 합니다.
해당 내용은 Tomcat에서 지원하는 Tomcatcluster 기능을 이용하여 작성했습니다.

사용한 OS 및 버전
  • CentOS7 CentOS Linux release 7.9.2009 (Core)
  • Apache 2.4
  • openjdk version 1.8.0
  • Tomcat 10.0
  • Tomcat-connectors 1.2.48

시작 전 준비

방화벽 끄기

방화벽 자동 실행 제거
방화벽 끄기
방화벽 상태 확인 - Active: inactive (dead) 확인

# systemctl disable firewalld
# systemctl stop firewalld
# systemctl status firewalld

SElinux 끄기

# vi /etc/sysconfig/selinux

SELINUX=enforing >> SELINUX=disabled로 변경

컴파일을 하기 위해 필요한 패키지 목룍

httpd-devel
gcc
gcc-c++
libtool

설치예시
# yum -y install httpd-devel gcc gcc-c++ libtool

패키지 추천

vim
net-tools

Java 설치 및 경로 지정

리눅스 내에서 검색해보기

# yum search java-1.8.0-openjdk          

자바 버전 1.8 (== 8버전) openjdk, openjdk-devel 설치

# yum -y install java-1.8.0-openjdk-src.x86_64 java-1.8.0-openjdk-devel             

경로 알아보기

find [경로][표현식]
find == 찾으라는 명령어
/ == /(root)아래 파일 찾기 == 모든 파일 찾기랑 같은 뜻
-name == 이름으로 찾기

# find / -name java

find / -name java == 이 서버의 java라고 이름 붙은 모든 파일 찾아라.

찾은 내용 중 경로/bin/~ 위치가 java 위치

/etc/profile에 경로 저장

# vi /etc/profile

들어가서 가장 밑 부분에 추가 후 저장

JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.332.b09-1.el7_9.x86_64
PATH=$JAVA_HOME/bin:$PATH

적용

# source /etc/profile

Tomcat 설치

필요한 패키지 목록
Tomcat
Tomcat-connectors

톰캣 공식 사이트 : https://tomcat.apache.org/
톰캣 10.0 다운로드 페이지 : https://tomcat.apache.org/download-10.cgi
톰캣 커넥터 다운로드 페이지 : https://tomcat.apache.org/download-connectors.cgi/

리눅스에서 컴파일 방식으로 설치 - wget

wget 안될 경우 다운로드 받으세요.

# yum -y install wget

리눅스 예시 (Tomcat 10.0 버전으로 받았습니다.)

wget 다운받을 디렉토리로 이동 ( 제 경우 /root에서 받음)

# cd /root

tomcat 10.0 버전 압축파일로 다운로드

# wget https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.22/bin/apache-tomcat-10.0.22.tar.gz

tomcat-connectors 1.2.48 압축파일로 다운로드

# wget https://dlcdn.apache.org/tomcat/tomcat-connectors/jk/tomcat-connectors-1.2.48-src.tar.gz

압축파일 해제

해제 방법 = # tar -옵션 해제할 압축파일 명

zxvf == gzip으로 압축된 tar 아카이브를 현재 디렉토리에 풀기

# tar zxvf apache-tomcat-10.0.22.tar.gz
# tar zxvf tomcat-connectors-1.2.48-src.tar.gz

파일이동

압축해제한 파일을 /usr/local/ 으로 이동(보통 컴파일로 설치할 경우 보편적으로 여기로 이동시킨다.)
이름 변경하면서 이동 apache-tomcat-10.0.22 > tomcat

# mv apache-tomcat-10.0.22.tar.gz /usr/local/tomcat

tomcat-connectors을 /usr/local/tomcat/tomcat-connectors 이동

# mv tomcat-connectors-1.2.48-src /usr/local/tomcat/

연동하기 설정 순서

Apache server

mod_jk.so 설치
httpd.conf 파일 수정
vhosts.conf 작성
mod_jk.conf 작성
workers.properties 작성

Tomcat server

Tomcat instance 별로 나누기
Tomcat 시작 스크립트 작성
server.xml 파일 수정
web.xml 파일 수정

Apache SERVER

mod_jk.so 설치 방법

연동에 필요한 소스파일 환경설정하기 - ./configure
컴파일 하기 - make
설치하기 - make install

Tomcat-connectors 안의 native 디렉토리 안으로 이동

apxs 찾고 경로 기억해두기

# find / -name apxs


/usr/local/apache/bin/apxs

환경설정 하기 (./configure)

native 이동 되어있는 상태에서 환경설정

#  ./configure --with-apxs=/usr/local/apache/bin/apxs

참고 : apxs=경로는 find로 찾은 apxs 경로입니다.

컴파일 하기

# make

설치하기

# make install

mod_jk.so 설치 확인 방법

# find / -name mod_jk.so

웹 모듈디렉토리에서 확인 가능 - 경로/modules/mod_jk.so 를 확인할 수 있다.

Apache + Tomcat 환경파일 설정하기

참고

해당 설정은 여러가지 방식으로 설정 가능 합니다.
다른 분들과 설정이 다를 수 있습니다.

파일 설정 구성도


부연설명
httpd.conf 파일에서 vhosts.conf, mod_jk.conf 파일을 포함시킨다. (Incldue)
vhosts.conf에서 mod_jk.so 모듈을 불러 온다.
mod_jk.conf에서 workers.properties 파일을 적용한다.

httpd.conf 수정

수정을 위해 찾기

# find / -name httpd.conf

참고 - ( 패키지 매니저로 설치 했을 시 기본 경로 | yum 혹은 apt-get )
CentOS - /etc/httpd/conf/httpd.conf
Ubuntu - /etc/apache2/apache2.conf

httpd.conf 파일 들어가기

# vi /etc/local/apache/conf/httpd.conf

해당 내용 맨 아래 작성

Include conf/vhosts.conf
Include conf/mod_jk.conf

저장 후 나가기

ESC :wq

주의 : 반드시 위에 적힌 순서에 맞게 vhosts.conf 가 mod_jk.conf 보다 윗 라인에 위치해야 합니다.

vhosts.conf 작성

httpd.conf 가 위치에 있는 곳에서 작성 (저의 경우 /usr/local/apache/conf/httpd.conf)

# vi /usr/local/apahce/conf/vhosts.conf

vhosts.conf에 적용되는 내용

LoadModule jk_module modules/mod_jk.so    # 모듈 mod_jk.so 불러오기
<VirtualHost *:80>                        # 모든 ip주소에서 요청을 기다림
ServerName Apache 서버 IP                      # server이름 - 웹서버 주소
JkUnmount /*.html tomcat_lb   # *.html 부분은 tomcat_lb 에서 처리 안함 (apache에서 처리)
JkMount /* tomcat_lb 		 # 나머지 전부 tomcat_lb 에서 처리(workers.porperties 참고)
</VirtualHost> 

붙여넣기 - ServerName Apache IP가 125.125.125.125 일 경우

LoadModule jk_module modules/mod_jk.so
<VirtualHost *:80> 
ServerName  125.125.125.125
JkUnmount /*.html tomcat_lb
JkMount /* tomcat_lb
</VirtualHost> 

mod_jk.conf 작성

httpd.conf 가 위치에 있는 곳에서 작성 (저의 경우 /usr/local/apache/conf/httpd.conf)

# vi /usr/local/apahce/conf/mod_jk.conf
<ifModule jk_module> 
JkWorkersFile conf/workers.properties 
JkLogFile logs/mod_jk.log                        # log 저장
JkLogLevel info 
JkShmFile /var/log/httpd/jk-runtime-status 
JkWatchdogInterval 30 
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"        # 날짜/시간을 스트링으로 변환
</ifModule> 

붙여넣기

<ifModule jk_module> 
JkWorkersFile conf/workers.properties 
JkLogFile logs/mod_jk.log  
JkLogLevel info 
JkShmFile /var/log/httpd/jk-runtime-status 
JkWatchdogInterval 30 
JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"  
</ifModule> 

workers.properties 작성

httpd.conf 가 위치에 있는 곳에서 작성 (저의 경우 /usr/local/apache/conf/httpd.conf)

# vi /usr/local/apahce/conf/workers.properties
worker.list=tomcat_lb                  # 사용할 tomcat_work의 대표 이름
worker.tomcat_lb.type=lb               # lb == loadbalancer
worker.tomcat_lb.balance_workers=tomcat01,tomcat02,tomcat03,tomcat04

worker.tomcat01.port=8011              # tomcat01의 포트 (tomcat02와 겹치면 안됩니다.)
worker.tomcat01.host=                  # tomcat-server1 의 ip
worker.tomcat01.type=ajp13             # ajp13 통신 프로토콜
worker.tomcat01.lbfactor=100           # 부하 분산  

worker.tomcat02.port=8012              # tomcat02의 포트 (tomcat01과 겹치면 안됩니다.)
worker.tomcat02.host=                  # tomcat-server1 의 ip
worker.tomcat02.type=ajp13             # ajp13 통신 프로토콜
worker.tomcat02.lbfactor=100           # 부하 분산

worker.tomcat03.port=8013              # tomcat03의 포트 (tomcat04와 겹치면 안됩니다.)
worker.tomcat03.host=                  # tomcat-server2 의 ip
worker.tomcat03.type=ajp13             # ajp13 통신 프로토콜
worker.tomcat03.lbfactor=100           # 부하 분산  

worker.tomcat04.port=8014              # tomcat04의 포트 (tomcat03과 겹치면 안됩니다.)
worker.tomcat04.host=                  # tomcat-server2 의 ip
worker.tomcat04.type=ajp13             # ajp13 통신 프로토콜
worker.tomcat04.lbfactor=100           # 부하 분산 

붙여넣기

worker.list=tomcat_lb                  
worker.tomcat_lb.type=lb               
worker.tomcat_lb.balance_workers=tomcat01,tomcat02,tomcat03,tomcat04

worker.tomcat01.port=8011              
worker.tomcat01.host=                 
worker.tomcat01.type=ajp13           
worker.tomcat01.lbfactor=100          

worker.tomcat02.port=8012
worker.tomcat02.host=
worker.tomcat02.type=ajp13 
worker.tomcat02.lbfactor=100 

worker.tomcat03.port=8013 
worker.tomcat03.host=
worker.tomcat03.type=ajp13 
worker.tomcat03.lbfactor=100

worker.tomcat04.port=8014
worker.tomcat04.host=
worker.tomcat04.type=ajp13 
worker.tomcat04.lbfactor=100
         

Tomcat SERVER

  • 각 서버당 1개의 톰캣만 실행하면 Tomcat instance별 나누기, Tomcat 스크립트 작성은 제외해도 됩니다.

Tomcat instance별로 나누기

한 개의 서버에서 여러 톰캣을 실행 할 경우
톰캣 파일 중 engine 부분을 제외하고 복사

  • tomcat engine 부분 : bin, lib
  • tomcat instance 부분 : conf, logs, temp, work, webapps

우선적으로 instance용 폴더 생성

  • 편의를 위해 tomcat 폴더 내에 생성하였습니다.
# mkdir /usr/local/tomcat/tomcat_instance01
# mkdir /usr/local/tomcat/tomcat_instance02

이후 톰캣 instance 부분 이동

# mv /usr/local/tomcat/conf /usr/local/tomcat/tomcat_instance01/
# mv /usr/local/tomcat/logs /usr/local/tomcat/tomcat_instance01/
# mv /usr/local/tomcat/temp /usr/local/tomcat/tomcat_instance01/
# mv /usr/local/tomcat/work /usr/local/tomcat/tomcat_instance01/
# mv /usr/local/tomcat/webapps /usr/local/tomcat/tomcat_instance01/

Tomcat02로 복사

# cp -aurp /usr/local/tomcat/tomcat_instance01/* /usr/local/tomcat/tomcat_instance02/
  • -aurp 옵션이란?
    -a 파일속성 복사
    -u 최신 파일이면 복사
    -r 하위 디렉토리 및 파일까지 모두 복사
    -p 소유자, 그룹, 권한 등 정보까지 복사

Tomcat 시작 스크립트 작성

통상적으로 기본 톰갯의 경우 톰캣경로/bin/에 위치한 startup.sh 스크립트를 실행하지만 톰캣을 여러개 사용함으로 Tomcat을 구분하여 실행하여야 한다.

  • 구분을 위해 시작은 start 가 들어가 있는 이름의 스크립트 파일을 만든다.
  • 종료는 shutdown 이 들어가 있는 이름의 스크립트를 만든다.
  • 경로는 상관 없지만 보관의 용의성을 위해 Tomcat 기본 시작 스크립트가 존재하는 톰캣경로/bin/에 위치해서 작성을 추천한다.

간단히 만들어 본 시작 스크립트 - instance 별로 작성

# vi startup_tomcat01.sh
# vi startup_tomcat01.sh
작성 내역
#!/bin/sh
export  CATALINA_HOME=/usr/local/tomcat
export  CATALINA_BASE=/usr/local/tomcat/tomcat_instance01      #인스턴스별로 달리 넣기
export  CATALINA_OPTS="-Denv=product -Denv.servername=server1"
cd $CATALINA_HOME/bin
./startup.sh
#!/bin/sh
export  CATALINA_HOME=/usr/local/tomcat
export  CATALINA_BASE=/usr/local/tomcat/tomcat_instance02      #인스턴스별로 달리 넣기
export  CATALINA_OPTS="-Denv=product -Denv.servername=server1"
cd $CATALINA_HOME/bin
./startup.sh

간단히 만들어 본 종료 스크립트 - instance 별로 작성

# vi shutdown_tomcat01.sh
# vi shutdown_tomcat02.sh
작성 내역
#!/bin/sh
export  CATALINA_HOME=/usr/local/tomcat
export  CATALINA_BASE=/usr/local/tomcat/tomcat_instance01       #인스턴스별로 달리 넣기
export  CATALINA_OPTS="-Denv=product -Denv.servername=server1"
cd $CATALINA_HOME/bin
./shutdown.sh
#!/bin/sh
export  CATALINA_HOME=/usr/local/tomcat
export  CATALINA_BASE=/usr/local/tomcat/tomcat_instance02       #인스턴스별로 달리 넣기
export  CATALINA_OPTS="-Denv=product -Denv.servername=server1"
cd $CATALINA_HOME/bin
./shutdown.sh

적용하기

스크립트에 실행 권한 주기

# chmod +x /usr/local/tomcat/bin/*.sh

server.xml 수정

server.xml 수정 부분

  • AJP13 프로토콜 사용하기 위한 수정
  • TomcatCluster 기능 이용

설명

  • 같은 서버 내에 Tomcat이 여럿 위치할 경우 8005, 8009, 8080 Port를 따로 변경해 줘야 한다.
  • 다른 서버 Tomcat 일 경우 Port가 겹쳐도 상관없지만 구분을 위해 다르게 변경하였습니다.
  • TomcatCluster 기능 시 jvmRoute="톰캣이름"을 넣어야 한다. workers.properties 참고
  • TomcatCluster 기능을 이용할 경우 Cluster Reciver 내의 Port 역시 변경해 줘야 한다.
  • TomcatCluster 기능에서 Membership의 경우 address와 Port는 전부 같아야 한다.
  • 가끔 server.xml에 한글을 주석 처리해도 오류가 나는 경우가 있어 주석은 제거 한다.

수정 내용은 각 인스턴스 별 server.xml 수정

Tomcat 세팅한 예시 Port
  • tomcat 클러스터 기본 사용 port - server.xml 8005, 8009, 8080, 4000
  • 위 4개의 포트를 변경해 줘야 한다.

수정

# vi /usr/local/tomcat/tomcat_instance01/conf/server.xml
# vi /usr/local/tomcat/tomcat_instance02/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">              # instance port 다르게 지정
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"   ### instance 별로 port 다르게 지정
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector protocol="AJP/1.3" address="0.0.0.0" port="8010" redirectPort="8443" secretRequired="false" />                      # instance 별로 port 다르게 지정
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat01">  #instance별로 jvmRoute 다르게 지정
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
      <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
      <Channel className="org.apache.catalina.tribes.group.GroupChannel">
        <Membership className="org.apache.catalina.tribes.membership.McastService"
                    address="228.0.0.4"       ### address는 동일 해야한다.
                    port="45564"              ### port는 동일 해야한다.
                    frequency="500"
                    dropTime="3000"/>
        <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                  address="해당 tomcat ip"    ### 톰캣 ip
                  port="4000"                ### instance별로 달라야한다.
                  autoBind="100"
                  selectorTimeout="5000"
                  maxThreads="6"/>
        <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
            <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
        </Sender>
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
    </Channel>
    <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
    <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
            tempDir="/tmp/war-temp/"
            deployDir="/tmp/war-deploy/"
            watchDir="/tmp/war-listen/"
            watchEnabled="false"/>
    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

복사용 - 주의 30 line 해당 Tomcat ip 부분만 수정

<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector protocol="AJP/1.3" address="0.0.0.0" port="8010" redirectPort="8443" secretRequired="false" />
    <Engine name="Catalina" defaultHost="localhost" jvmRoute="tomcat01">
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">
      <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>
      <Channel className="org.apache.catalina.tribes.group.GroupChannel">
        <Membership className="org.apache.catalina.tribes.membership.McastService"
                    address="228.0.0.4"
                    port="45564"
                    frequency="500"
                    dropTime="3000"/>
        <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
                  address="해당 tomcat ip"
                  port="4000"
                  autoBind="100"
                  selectorTimeout="5000"
                  maxThreads="6"/>
        <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
            <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
        </Sender>
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
        <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor"/>
    </Channel>
    <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
    <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>
    <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
            tempDir="/tmp/war-temp/"
            deployDir="/tmp/war-deploy/"
            watchDir="/tmp/war-listen/"
            watchEnabled="false"/>
    <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

web.xml 파일 수정

세션을 유지하기 위해서는 web.xml 파일을 수정해야 한다.

# find / -name web.xml

web.xml 파일을 찾아보면 여러개 나오지만 수정해야할 web.xml 파일은 개별 톰캣 instance경로/webapps/ROOT/WEB-INF/안의 web.xml 파일들만 수정

  • 수정 내용은 web.xml 내용 가장 밑에 부분 에서

</web-app> 위에 <distributable/>

예시

# vi /usr/local/tomcat/tomcat_instance01/webapps/ROOT/WEB-INF/web.xml
# vi /usr/local/tomcat/tomcat_instance02/webapps/ROOT/WEB-INF/web.xml

적용 완료 후 확인하기

시작 전 웹 서비스 확인하기

# netstat -nlp | grep 80

80 port가 있을 시
중지 > 시작 또는 재시작 명령어를 통하여 설정한 것을 적용 해준다.

# systemctl stop httpd              # 한 다음
# systemctl start httpd             # 시작 

혹은

# systemctl restart httpd           # 재시작

Tomcat port 확인 | 개인적으로 세팅한 Port

  • tomcat_instance01 - 설정한 port - server.xml 8001, 8011, 8081 | 4001
  • tomcat_instance02 - 설정한 port - server.xml 8002, 8012, 8082 | 4002
  • tomcat_instance03 - 설정한 port - server.xml 8003, 8013, 8083 | 4003
  • tomcat_instance04 - 설정한 port - server.xml 8003, 8014, 8084 | 4004

Tomcat 세션 클러스터 확인용 페이지 작성

session 값을 확인하기 위해 간단한 페이지 작성
페이지 위치는 톰캣인스턴스 경로/webapps/ROOT/에 위치합니다.
예 ) 테스트 페이지 이름을 test.jsp 로 작성 한다 했을 때

# vi /usr/local/tomcat/tomcat01/webapps/ROOT/test.jsp
# vi /usr/local/tomcat/tomcat02/webapps/ROOT/test.jsp
# vi /usr/local/tomcat/tomcat03/webapps/ROOT/test.jsp
# vi /usr/local/tomcat/tomcat04/webapps/ROOT/test.jsp
test.jsp 내용
<%@ page contentType="text/html; charset=utf-8" %>
 <%
System.out.println( "세션 ID : " + session.getId() );
 %>
<HTML>
<HEAD>
    <TITLE>Tomcat Session Test Clustering</TITLE>
</HEAD>
<BODY>
<h1><center>Tomcat Session Clustering</center></h1>
<%
    Integer Value = (Integer)session.getAttribute("session_count");
    if(Value==null) {
        Value = new Integer(1);
    }
    else {
        Value = new Integer(Value.intValue() + 1);
    }
    session.setAttribute("session_count", Value);
    System.out.println("no session");
%>
<br />
<br />
<center>Session Count = [<b> <%= Value %> </b>]</center><br />
<center>Current Session ID : <%= request.getRequestedSessionId() %><center><br />
<br />
<br />
<center><h3>[ 세션 관련 정보]</h3></center>
<br />
<br />
<%
String id_str=session.getId();
long lasttime=session.getLastAccessedTime();
long createdtime=session.getCreationTime();
long spend_time=(lasttime-createdtime)/60000;
int maintain=session.getMaxInactiveInterval()/60;
boolean new_session=session.isNew();
%>
<center><table border="2" >
<tr>
<td>[1] 세션ID = <%=session.getId()%> 입니다.</td>
<th rowspan="3">
<%
if(new_session)
 out.println("새로운 세션 시작");
else
 out.println("세션이 유지 되고 있습니다.");
%>
</th>
</tr>
<tr>
<td>[2] 웹 사이트에 유지한 시간은  <%=spend_time%> 입니다.</td>
</tr>
<tr>
<td>[3] 이 세션의 유효시간은  <%=maintain%> 분입니다.</td>
</tr>
</center>
</BODY>
</HTML>

Tomcat 시작해보기

Tomcat 실행 스크립트가 있는 톰캣경로/bin/ 으로 이동

# cd /usr/local/tomcat/bin/

안에 있는 ./startup_tomcat0?.sh 실행

# ./startup_tomcat01.sh
# ./startup_tomcat02.sh
# ./startup_tomcat03.sh
# ./startup_tomcat04.sh

이후 netstart -nlp | grep 80 으로 확인

# netstat -nlp | grep 80

정상적으로 진행이 되었으면

확인 가능 !

다른 곳에서 확인해보기

windows 에서 접속해보기

1 Server - IP가 125.125.125.125 (+ apache 서버)
2 Server - IP가 125.125.125.126

해당 주소 : http://125.125.125.125/test.jsp
해당 주소 : http://125.125.125.125:8081/test.jsp
해당 주소 : http://125.125.125.125:8082/test.jsp
해당 주소 : http://125.125.125.126:8083/test.jsp
해당 주소 : http://125.125.125.126:8084/test.jsp

확인사항
  • Server1 Session ID와 Server2 Session ID 값은 다르다.
  • 새로고침을 눌렀을 때 보라색 Session Count 값이 3개의 창 모두 공유 되는지 여부
  • 하늘색 ID 받아오는 값이 설정한 톰캣 포트 마다 port 8081, 8082가 다른지 여부
  • 80 port에서 Server1 연결이 끊어졌을 때 자동으로 Server2 Tomcat으로 연결되는지 여부

Server1 톰캣 종료 했을 때

Server1 톰캣 다시 시작했을 때

profile
엔지니어를 꿈꿔요

0개의 댓글