[JAVA] Tomcat Session 유지 하는 방법 및 테스트
출처 : http://www.programkr.com/blog/MQjM2ADMwYTy.html
session 세션 유지 의 session 서버 -tomcat + msm + memcached
위상 다이어그램
준비 환경:
때문에 컴퓨터 구성 썩어 가상 기계 유한 때문에 한 가상 머신 동시에 대해 다양한 서버 사용 유형.
두 tomcat 노드: 172.16.19.1(tomcatA.luo.com), 172.16.19.21(tomcatB.luo.com)
두 memcached 노드: 172.16.19.21, 172.16.19.22
한 부하 균형 노드(httpd): 172.16.19.1
쌍방이 모두 대한 기본적인 jdk 및 tomcat 설치
설치jdk
패키지 다운로드 설치 및 설치:
# rpm -ivh jdk-7u9-linux-x64.rpm Preparing... ########################################### [100%] 1:jdk ########################################### [100%] Unpacking JAR files... rt.jar... Error: Could not open input file: /usr/java/jdk1.7.0_09/jre/lib/rt.pack jsse.jar... Error: Could not open input file: /usr/java/jdk1.7.0_09/jre/lib/jsse.pack charsets.jar... Error: Could not open input file: /usr/java/jdk1.7.0_09/jre/lib/charsets.pack tools.jar... Error: Could not open input file: /usr/java/jdk1.7.0_09/lib/tools.pack localedata.jar... Error: Could not open input file: /usr/java/jdk1.7.0_09/jre/lib/ext/localedata.pack
설명: 이 오류 무시 잠시 돼, 안 영향을 사용
설치 디렉터리 보기 java
# ll /usr/java/
total 4
lrwxrwxrwx 1 root root 16 Sep 26 06:03 default -> /usr/java/latest
drwxr-xr-x 10 root root 4096 Sep 26 06:03 jdk1.7.0_09
lrwxrwxrwx 1 root root 21 Sep 26 06:03 latest -> /usr/java/jdk1.7.0_09
latest링크 지정한 최신 버전
수정 환경 변수
# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/latest
export PATH=$JAVA_HOME/bin:$PATH
# . /etc/profile.d/java.sh
버전 정보 보기
# java -version
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
설치Tomcat
압축을 풀 결코 링크
# tar -xf apache-tomcat-7.0.42.tar.gz -C /usr/local
# cd /usr/local
# ln -sv apache-tomcat-7.0.42 tomcat
`tomcat' -> `apache-tomcat-7.0.42'
수정 환경 변수
# vim /etc/profile.d/tomcat.sh
export CATALINA_HOME=/usr/local/tomcat
export PATH=$CATALINA_HOME/bin:$PATH
# . /etc/profile.d/tomcat.sh
시작tomcat
# catalina.sh start # 혹은 명령어 사용하기 startup.sh, 기본 포트 사용 8080 먼저 포트 결정 안 점용되었다 Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
보기 시작 포트
# netstat -tnlp |grep java
tcp 0 0 :::8080 :::* LISTEN 4357/java
tcp 0 0 ::ffff:127.0.0.1:8005 :::* LISTEN 4357/java
tcp 0 0 :::8009 :::* LISTEN 4357/java
보기 버전
# cd /usr/local/tomcat # catalina.sh version 또는 version.sh Using CATALINA_BASE: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp Using JRE_HOME: /usr/java/latest Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar Server version: Apache Tomcat/7.0.42 Server built: Jul 2 2013 08:57:41 Server number: 7.0.42.0 OS Name: Linux OS Version: 2.6.32-431.el6.x86_64 Architecture: amd64 JVM Version: 1.7.0_09-b05 JVM Vendor: Oracle Corporation
테스트 tomcat 성공적으로 실행:
둘째, 설정 대리, 부하 균형, memcached
memcached-session-manager프로젝트 주소, http://code.google.com/p/memcached-session-manager/
다음 파일을 다운로드 jar ~ 각 tomcat 노드 tomcat 설치 디렉터리 아래 lib 디렉터리에 중 소프트웨어 버전 번호 나랑 tomcat 같은 버전 번호.
node, node1 노드:
memcached-session-manager-1.8.2.jar memcached-session-manager-tc7-1.8.2.jar msm-javolution-serializer-1.8.2.jar spymemcached-2.10.2.jar javolution-5.5.1.jar
각각 두 tomcat 위의 어떤 host 위에 정의 테스트 하는 context 용기 있으며 이 가운데 만듭니다. 세션 관리자, 다음과 같이 하는 지시 (node, node1 노드):
<Context path="/test" docBase="/usr/local/tomcat/webapps/test" reloadable="true"> <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes="n1:172.16.19.21:11211,n2:172.16.19.22:11211" failoverNodes="n1" requestUriIgnorePattern=".*\.(ico|png|gif|jpg|css|js)$" transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"/> </Context>
각각 두 context 제공 테스트 페이지:
node(tomcatA):
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}
# vim /usr/local/tomcat/webapps/test/index.jsp
다음 컨텐츠 추가:
<%@ page language="java" %> <html> <head><title>TomcatA</title></head> <body> <h1><font color="red">TomcatA.luo.com</font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("luo.com","luo.com"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html>
node1(tomcatB):
# mkdir -pv /usr/local/tomcat/webapps/test/WEB-INF/{classes,lib}
# vim /usr/local/tomcat/webapps/test/index.jsp
다음 컨텐츠 추가:
<%@ page language="java" %> <html> <head><title>TomcatB</title></head> <body> <h1><font color="red">TomcatB.luo.com</font></h1> <table align="centre" border="1"> <tr> <td>Session ID</td> <% session.setAttribute("luo.com","luo.com"); %> <td><%= session.getId() %></td> </tr> <tr> <td>Created on</td> <td><%= session.getCreationTime() %></td> </tr> </table> </body> </html>
지금 node 노드 (172.16.19.1) 에서 설정 역방향 대리 부하 균형 내용
새 파일 수 mod_http.con 비슷한 다음과 같다 개 주시기 바랍니다:
설정 apache mod_proxy 모듈 및 Tomcat 연결을 통해서
관련 보기 모듈 사용 여부
[root@node ~]# httpd -M |grep proxy
Syntax OK
proxy_module (shared)
proxy_balancer_module (shared)
proxy_ftp_module (shared)
proxy_http_module (shared)
proxy_ajp_module (shared)
proxy_connect_module (shared)
# vim /etc/httpd/conf.d/mod_http.conf
<Proxy balancer://tomcat> BalancerMember http://172.16.19.1:8080 loadfactor=1 BalancerMember http://172.16.19.21:8080 loadfactor=1 # 사용하면 사용 ajp 은 아래 위 현행 현행 바꿀 수 있다 # BalancerMember ajp://172.16.19.1:8009 loadfactor=1 # BalancerMember ajp://172.16.19.21:8009 loadfactor=1 ProxySet lbmethod=byrequests </Proxy> <Location /status> SetHandler balancer-manager ProxyPass ! Order allow,deny Allow from all </Location> ProxyPass / balancer://tomcat/ ProxyPassReverse / balancer://tomcat/
mod_jk 있는 부하 균형 기반
# yum -y install httpd-devel # rpm -ql httpd-devel |grep apxs # tar xf tomcat-connectors-1.2.40-src.tar.gz # cd tomcat-connectors-1.2.40-src/native # ./configure --with-apxs=/usr/sbin/apxs # make && make install
# cat /etc/httpd/conf.d/mod_jk.conf #새 파일 추가, 그 전에 추가 mod_http.conf 잠시 고쳐 후속 개
LoadModule jk_module modules/mod_jk.so JkWorkersFile /etc/httpd/conf.d/workers.properties JkLogFile logs/mod_jk.log JkLogLevel debug #디버그 할 때 사용하는 것을 JkMount /* lbA JkMount /status/ statA
# cat /etc/httpd/conf.d/workers.properties
worker.list = lbA,statA worker.TomcatA.type = ajp13 worker.TomcatA.host = 172.16.19.1 worker.TomcatA.port = 8009 worker.TomcatA.lbfactor = 1 worker.TomcatB.type = ajp13 worker.TomcatB.host = 172.16.19.21 worker.TomcatB.port = 8009 worker.TomcatB.lbfactor = 1 worker.lbA.type = lb worker.lbA.sticky_session = 0 worker.lbA.balance_workers = TomcatA,TomcatB worker.statA.type = status 지금 양쪽 주 설정 파일에 더하기 jvmRoute 인자를 받음 # cat /usr/local/tomcat/conf/server.xml <Engine name="catalina" defaultHost="localhost" jvmRoute="TomcatA "> <Engine name="catalina" defaultHost="localhost" jvmRoute="TomcatB "> # catalina.sh start # service httpd restart
세, 설정 node1 및 node2 것이다memcached
# yum install –y install memcached
# service memcached start
# ss –tnl |grep 11211
네, 테스트 결과
브라우저에서 방문, 결과는 다음과 같다 개 보이다, 그 session ID 는 부하 균형 환경에서 바꾸지 않기.
부하 균형 및 session 바인딩 이미 이룰 수 있다
2, 아날로그 node2 고장, 정지 node2 볼 수 있는 memcached, 이미 이동 n1 (memcached1) 위에 거야 그리고 session 바꾸지 않기
[root@node2 ~]# service memcached stop
글쓴이 준호 작성일 2014-10-03 01:22