Tomcat 6.0을 가지고 고가용성, 즉 클러스터링을 따라해 보았습니다.
시나리오.
tomcat 인스턴스는 weblogic, oc4j와 비슷하게 제품 바이너리와 인스턴스를 분리해 본다. cluster 구성으로 생성한다. 애플리케이션 배포 시나리오를 생각해 본다. 테스트 애플리케이션 준비 Apache mod_proxy_jk 세팅 Tomcat 바이너리와 인스턴스 분리 톰캣 바이너리는 app/apache/apache-tomcat-6.0.32 경로에 있습니다. 인스턴스 경로는 아래와 같은 구성을 시도해봅니다.
app/apache/user_projects - 톰캣 인스턴스묶음용? 경로 app/apache/user_projects/cluster_domain - 톰캣이 만들어질 도메인? app/apache/user_projects/cluster_domain/bin - 도메인용 스크립트 디렉토리 ( startup.sh, shutdown.sh 존재 ) app/apache/user_projects/cluster_domain/servers - 톰캣 인스턴스용 디렉토리 app/apache/user_projects/cluster_domain/servers/tomcat1 - 'tomcat1'이란 이름의 톰캣 인스턴스 app/apache/user_projects/cluster_domain/servers/tomcat1/bin,conf,logs,temp,webapps,work - 'tomcat1'인스턴스 구성요소 app/apache/user_projects/cluster_domain/servers/tomcat2 - 'tomcat2'이란 이름의 톰캣 인스턴스 app/apache/user_projects/cluster_domain/servers/tomcat2/bin,conf,logs,temp,webapps,work - 'tomcat2'인스턴스 구성요소 app/apache/user_projects/cluster_domain/webapps - 이 도메인에서 사용할 애플리케이션 준비 디렉토리 인스턴스 구성.
웹로직에서 웹애플리케이션을 개발하고 배포를 하는 과정에서 재배포 혹은 서버 점검에 따라 인스턴스를 재기동할 경우 사용자 세션이 끊기는 현상이 발생합니다.
이에 대하여 웹로직 배치 기술자 조정을 통해 세션을 유지하는 방법을 찾아보고 글 남깁니다.
보통 세션 퍼시스턴스의 설정은 클러스터 환경에서 서로 다른 서버간 세션 공유에 활용되는 것이 많으리라 생각됩니다.
아래 설정은 단일 서버에서 파일에 세션 상태를 기록하여 세션을 유지하는 예제입니다.
<?xml version='1.0' encoding='UTF-8'?> <weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <session-descriptor> <persistent-store-type>file</persistent-store-type> </session-descriptor> </weblogic-web-app> 세션에 사용자 정의 클래스를 넣을 경우, 해당 클래스를 serializable을 구현하도록 해야 합니다.
리눅스에서는 이미 네트워크 설정에 프로필(?) 기능이 있어서, 노트북과 같이 이동하는 장비에서 IP설정(IPv6에서는 달라지겠지만)을 기록해 두는 기능이 있습니다.
저와 같이 여러 사이트를 방문하는 엔지니어에게는 IP주소 세팅이 업무의 시작이라 할 수 있습니다.
보통은 ipchanger같은 툴을 통해서 프로필 기능과 비슷하게 활용하고 계실 것입니다. ( 저는 ip를 메모해두고 윈도우 자체네트워크 설정으로 일일이 입력합니다만.. )
netsh 명령을 통해서 프로필 기능과 비슷한 시도를 해보았습니다.
아래 명령을 쉘스크립트로 작성하여 사용하는 방법입니다.
@echo off set INTERFACE="eth0" set IPADDRESS=192.168.20.10 set NETMASK=255.
웹로직을 사용하면서, 에러의 원인을 쉽게 찾을 수 없을 때, 원인을 추적하는 방법을 나열해 봅니다.
dispatcher forward 사용시 해당 리소스가 없을 경우 추적하기.( 알 수 없는 404 에러 ) 웹개발 프레임워크를 사용할 때 주로 개발하는 형태가, controller를 작성하여 비즈니스 로직을 수행한 후, 사용자에게 보여질 페이지(JSP)로 RequestDispatcher.forward 하는 형태이리라 생각됩니다. ( 물론 다른 형태도 많겠지만, RequestDispatcher.forward 하는 형태를 가정한 상황으로 글을 씁니다. )
아래는 그렇게 사용한 java servlet 예제입니다.
RequestDispatcher rd = null; rd = request.
JDeveloper와 WebLogic을 사용하는 개발환경에서 Integrated Server를 쓰지 않고, 테스트 혹은 운용서버에 배포후 Remote Debugging을 하는 방법을 간략히 소개합니다.
1. 대상 서버의 Remote Debugging JVM 옵션 세팅. 먼저 JVM에서 Remote Debugging을 받아들이기 위한 설정을 추가합니다. 아래 세팅을 서버의 구동 스크립트에 포함되도록 합니다. ( 저는 편의상 개발서버의 .profile을 사용하고 있습니다. nodemanager 등을 사용중인 경우에는 콘솔에서 세팅 가능하겠습니다. )
# JDK 1.4 이하 기본 형태 # -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=[port] # JDK 1.5 이상 기본 형태 # -agentlib:jdwp=transport=dt_socket,server=y,address=[port] JAVA_OPTIONS=$JAVA_OPTIONS\ "-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=4000,server=y,suspend=n" 2.