이 글은 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
# 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
리눅스 내에서 검색해보기
# 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-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 파일 수정
연동에 필요한 소스파일 환경설정하기 - ./configure
컴파일 하기 - make
설치하기 - make installTomcat-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 를 확인할 수 있다.
참고
해당 설정은 여러가지 방식으로 설정 가능 합니다.
다른 분들과 설정이 다를 수 있습니다.파일 설정 구성도
부연설명
httpd.conf 파일에서 vhosts.conf, mod_jk.conf 파일을 포함시킨다. (Incldue)
vhosts.conf에서 mod_jk.so 모듈을 불러 온다.
mod_jk.conf에서 workers.properties 파일을 적용한다.
수정을 위해 찾기
# find / -name httpd.conf
참고 - ( 패키지 매니저로 설치 했을 시 기본 경로 | yum 혹은 apt-get )
CentOS - /etc/httpd/conf/httpd.conf
Ubuntu - /etc/apache2/apache2.confhttpd.conf 파일 들어가기
# vi /etc/local/apache/conf/httpd.conf
해당 내용 맨 아래 작성
Include conf/vhosts.conf
Include conf/mod_jk.conf저장 후 나가기
ESC :wq
주의 : 반드시 위에 적힌 순서에 맞게 vhosts.conf 가 mod_jk.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>
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>
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
한 개의 서버에서 여러 톰캣을 실행 할 경우
톰캣 파일 중 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 소유자, 그룹, 권한 등 정보까지 복사
통상적으로 기본 톰갯의 경우 톰캣경로/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 수정 부분
- 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 "%r" %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 "%r" %s %b" /> </Host> </Engine> </Service> </Server>
세션을 유지하기 위해서는 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
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 실행 스크립트가 있는 톰캣경로/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 톰캣 다시 시작했을 때