JEUS7 운영자가이드
Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ JEUS7 특징구성요소 JEUS 기동 / 종료기본환경설정로그및모니터링
Ⅰ. JEUS7 특징 1. What's New? JEUS7 2. Java EE 6 특징과주요표준명세 3. JEUS6 VS JEUS7
What s New? JEUS7 JEUS7 은 WAS Trend 변화를수용하여클라우드아키텍처지원, 기능및성능개선, Java EE 6 Full Spec. 을구현하였습니다. 클라우드아키텍처지원 Domain 아키텍처 Dynamic Clustering Graceful Redeployment 기능및성능개선 Hot Swap Light-Weight 엔진 분산세션클러스터링 강화된캐싱 JMS MQ 순서보장 웹서비스트랜잭션 개선된관리화면 Java EE 6 Full Spec. 구현 Servlet 3.0 Dependency Injection Extensions EJB 3.1 JAX-RS 1.1 Bean Validation 1.0 3
Java EE 6 특징과주요표준명세 EJB 3.1 과 Servlet 3.0 을포함, Java Full Spec. 을구현하여경량화및유연성, 확장성, 개발생산성을향상시켰습니다. Java EE 6 의변화와주요특징 JEUS 7 주요표준지원명세 Java EE Roadmap 분류 세부명세 Java EE 5 개발생산성향상 Java EE 6 Java EE 7,8 for Cloud Enterprise Application EJB 3.1 JMS 1.1 CDI 1.0 Bean Validation 1.0 Managed Beans 1.0 Dependency Injection 1.0 경량화 & 유연성확장성개발생산성 불필요한 API 제거 표준기반의 Dependency Injection 프레임워크와의손쉬운연동과확장지원 POJO 프로그래밍지원 Annotation 확장 더적어진 XML 구성 Web App Servlet 3.0 JSP 2.2 Resource JDBC 4.0 Web Services WS-Coordination 1.0 WS-Atomic Transaction1.0 JAX-WS 2.2 JAX-RS 1.1 4
JEUS6 VS JEUS7 [JEUS6 와 JEUS7 의내부아키텍처등주요관점비교 ] 구분 JEUS6 JEUS7 논리적구성의최상위단위 Node Domain 최상위단위의구성요소 Node 의개념 Manager Containers 논리적구성의최상위단위 DAS Managed Servers Clusters JEUS 설치단위 (JEUS_HOME) Domain 과포함관계없음 Cluster 의개념 Node 간서비스및자원의연결구조 MS 간서비스및자원의연결구조 Engine(Servlet, EJB, JMS) 서비스 Container Managed Server 세션관리 Container( 분산식 ) Manager( 중앙식 ) Managed Server( 분산식 ) 공통서비스 Manager Managed Server 시스템모니터링및재기동 Manager Node Manager 설정관리 배포관리 개별노드설정 Admin Tools 개별노드배포 Admin Tools 중앙집중도메인설정 Admin Tools + DAS 중앙집중도메인배포 Admin Tools + DAS Context Group 제공 미제공 Launcher 미지원 지원 5
Ⅱ. 구성요소 1. Domain 2. Domain Administration Server(DAS) 3. Managed Server(MS) 4. Node Manager 5. 디렉터리구조 6. 환경파일
Domain(1/2) 도메인은 Domain Administrator Server(DAS) 와 Managed Server(MS) 로구성됩니다. 7
Domain(2/2) 도메인은관련있는서버들의그룹으로기본관리단위입니다. 하나의도메인내에서만보안설정, 필요한애플리케이션및리소스등이공유되는점을고려하려도메인을구성해야합니다. JEUS 와도메인의관계 하나의머신에는하나의 JEUS(JEUS_HOME) 가필요하고, 하나의 JEUS(JEUS_HOME) 에는한개이상의도메인이존재할수있습니다. 또한, 도메인은하나의 JEUS(JEUS_HOME) 내에구성될수도있고, 여러개의머신, 즉여러개의 JEUS(JEUS_HOME) 에걸쳐구성될수도있습니다. 8
Domain Administration Server(DAS) DAS 는도메인을관리하는서버로도메인에서오로지하나만존재합니다. DAS 의역할은도메인설정을관리하고, 도메인에속하는 MS 및애플리케이션을관리하고제어합니다. 주요서비스 WebAdmin 서비스 동적설정반영서비스 도메인애플리케이션관리서비스 도메인데이터소스관리서비스 클러스터관리서비스 Managed Server(MS) 서비스 DAS 에서 MS 의역할을할수있으나이를권장하지않습니다. 개발서버나소규모의운영서버의경우에는도메인에 DAS 하나만존재하더라도서비스에무리가없을수있지만, 대부분의경우 DAS 는관리의역할만할수있도록두고애플리케이션서비스를하는 MS 를별도로두는것이일반적입니다. 9
Managed Server(MS) MS 는실제애플리케이션을서비스하기위한엔진들과여러서비스들을관장하는서버인스턴스를의미합니다. MS 는도메인에여러개존재할수있습니다. 주요서비스 엔진서비스 JNDI 서비스 Management 서비스 보안 (Security) 서비스 Http 세션클러스터링서비스 Class FTP 서비스 Scheduler 서비스 Logging 서비스 데이터베이스연결서비스 트랜잭션서비스 외부리소스 (External Resources) 엔터프라이즈정보시스템 (EIS) 연결서비스 엔진은 Java EE 에서정의한 EJB 컨테이너, 웹컨테이너와매핑되는개념으로사용자가 Deploy 한컴포넌트를관리하고서비스하는역할을합니다. 엔진은서버에포함되는서비스이며, 사용자가굳이설정하지않아도서버가기동할때항상기본설정으로실행됩니다. 10
Node Manager 서버모니터링, 서버프로세스제어및 Patch 전달을주목적으로하는인스턴스를의미합니다. 노드매니저의종류로 JAVA 타입과 SSH 타입이있습니다. 제약사항 도메인내에서사용되는노드매니저의이름은유일해야합니다. 설치한하나의 JEUS 내에서는하나의노드매니저만존재합니다. 하나의도메인에서는같은타입의노드매니저를사용해야합니다. Windows 환경에서는 JAVA 타입의노드매니저만사용이가능하고서비스로등록해서사용할것을권장합니다. 노드매니저관련환경파일은다음과같다. JEUS_HOME/nodemanager/jeusnm.properties usenodemanager=true // 이값이 true 이면 JAVA 타입, false 이면 SSL 타입노드매니저 host=localhost port=7730 usessllistener=false servermonitoringperiod=500 serverautorestart=true serverrestarttrycount=5 serverrestartdurationtime=120000 serverretryrestart=false $JEUS_HOME/domains/nodes.xml <?xml version="1.0" encoding="utf-8" standalone="yes"?> <nodes xmlns="http://www.tmaxsoft.com/xml/ns/jeus"> <node> <name>stech</name> <host>localhost</host> <java> <port>7730</port> <use-ssl>false</use-ssl> </java> </node> </nodes> 11
디렉터리구조 (1/2) 서버의시작 / 종료스크립트등실행파일들이위치합니다. 샘플애플리케이션이나테스트에서쉽게사용할수있도록 Apache Derby 를포함합니다. JEUS 에서제공하는 API 에대한 Javadoc 이존재합니다. JEUS 가기동하는데필요한라이브러리가존재합니다. shared 디렉터리에는애플리케이션에서사용하는라이브러리가존재합니다. shared 디렉터리의라이브러리를사용하려면 libraries.xml 에라이브러리의정보를추가해야합니다. 그리고해당라이브러리를사용할애플리케이션의 JEUS Deployment Descriptor(DD) 에서해당라이브러리에대한레퍼런스정보를지정해야합니다. JEUS 라이선스파일이위치합니다. NodeManager 설정파일이위치합니다. JEUS 설치후환경구축을위해필요한파일들이위치합니다. 각종설정과환경등의 template 파일이위치합니다. JEUS 의예제파일들이위치합니다. 12
디렉터리구조 (2/2) 도메인별로 DOMAIN_HOME 과 JEUS_HOME 에서사용하는노드정보가포함된 nodes.xml 이존재합니다. 해당도메인에서관리하는애플리케이션파일이존재합니다. install-application, uninstall-application 명령을통해서추가 / 삭제가능합니다. 해당도메인에속한 DAS 와 MS 의시작및종료스크립트가위치합니다. 도메인설정파일 (domain.xml ) 및 domain.xml 백업파일디렉터리가위치합니다. 도메인전체에적용하고싶은애플리케이션라이브러리를위치시키는디렉터리입니다. JEUS 가사용하는서버별공간으로사용자가변경해서는안됩니다. 서버의시작 / 종료스크립트를포함하고있습니다. JEUS_HOME/bin 의스크립트와동일한기능을수행하지만도메인이름과서버이름을설정할필요가없습니다. 서버에적용하고싶은애플리케이션라이브러리가존재합니다. 도메인범위의라이브러리 (DOMAIN_HOME/lib/application) 보다우선순위가높습니다. 서버의 Launcher 로그, 서버로그, 엑세스로그파일이남습니다. 13
환경파일 JEUS7 의주요설정파일은다음과같습니다. domain.xml 파일명 위치및설명 JEUS_HOME/domains/<domain_name>/config/ 도메인의전체환경을설정하는파일 jeus-web-dd.xml 웹애플리케이션 Archive 의 WEB-INF JEUS 웹애플리케이션 (Servlet app) DD(Deployment Descriptors) 파일 jeus-ejb-dd.xml EJB 애플리케이션 Archive 의 META-INF JEUS EJB Module DD(Deployment Descriptors) 파일 policies.xml JEUS_HOME/domains/<domain_name>/config/security JEUS Security 정책을설정한파일 accounts.xml JEUS_HOME/domains/<domain_name>/config/security JEUS Security 계정을설정한파일 jeus-webservices-config.xml Webservice client archive 의 META-INF 웹서비스클라이언트 Ant Task 에서사용하는설정파일 14
Ⅲ. JEUS 기동 / 종료 1. 사용자프로파일 2. DAS 기동 / 종료 3. NodeManager 기동 / 종료 4. Managed Server 기동 / 종료 5. 윈도우서비스로기동 / 종료
사용자프로파일 (1/2) JEUS7 운영시사용자 profile 에 alias 를설정함으로써작업효율을높일수있습니다. 본문서에서는 alias 가설정된환경으로가정하고설명합니다. ##### JEUS7 Path ##### export PATH="/home/jeus/jeus7/bin:/home/jeus/jeus7/lib/system:/home/jeus/jeus7/webserver/bin:${PATH} // JEUS 인스톨시자동으로설정됨 ########## JEUS7 Environment Setting ########## export JEUS_HOME=/home/jeus/jeus7 // JEUS 홈디렉터리 export JEUS_LOG_HOME=/home/jeus/jeus7/domains/jeus_domain/servers // JEUS 로그디렉터리 alias dsa='jeusadmin -host 192.168.XX.XX:9736 -f ${JEUS_HOME}/bin/scripts/jeusEncode // jeusadmin -host [DAS IP:DAS PORT] -f [ 암호화파일 ]. 콘솔툴실행 alias dsboot='startdomainadminserver -domain jeus_domain -server adminserver -f ${JEUS_HOME}/bin/scripts/jeusEncode // startdomainadminserver -domain [ 도메인명 ] server adminserver -f [ 암호화파일 ]. DAS 기동 alias dsdown='jeusadmin -host 192.168.XX.XX:9736 -f ${JEUS_HOME}/bin/scripts/jeusEncode local-shutdown // jeusadmin -host [DAS IP:DAS PORT] -f [ 암호화파일 ] local-shutdown. DAS 종료 alias nmboot='nohup startnodemanager > ${JEUS_HOME}/nodemanager/logs/JeusNodeManager.log & // nohup startnodemanager > [ 노드매니저로그경로 ] &. 백그라운드로노드매니저기동 alias nmdown='stopnodemanager -host localhost -port 7730 // stopnodemanager -host localhost -port [ 노드매니저포트 ]. 노드매니저종료 alias msboot_server1='startmanagedserver -dasurl 192.168.XX.XX:9736 -domain jeus_domain -server server1 -f ${JEUS_HOME}/bin /scripts/jeusencode // startmanagedserver -dasurl [DAS IP:DAS PORT] -domain [ 도메인명 ] -server [MS명] -f [ 암호화파일 ]. 스크립트로서버기동 alias msdown_server1='jeusadmin -host 192.168.XX.XX:9936 -f ${JEUS_HOME}/bin/scripts/jeusEncode local-shutdown' // jeusadmin -host [MS IP:MS PORT] f [ 암호화파일 ] local-shutdown. 스크립트로서버종료 16
사용자프로파일 (2/2) 위 alias 설정중, ${JEUS_HOME}/bin/scripts/jeusEncode 는 JEUS 계정 / 패스워드가암호화된파일입니다. - [EX] jeusencode 파일 ( 파일내용의우선순위는상관없음 ) jeus_domain:adminserver +4tJt8A6YAIm4jsryCSsyWMunC3OaLlfX64fPLsolGQmR31SDR0cPYtK22gdg6cc //[ 도메인명 : 서버명 ][ 공백 ][ 암호화된계정 / 패스워드문자열 ] jeus_domain:server1 +4tJt8A6YAIm4jsryCSsyWMunC3OaLlfX64fPLsolGQmR31SDR0cPYtK22gdg6cc //[ 도메인명 : 서버명 ][ 공백 ][ 암호화된계정 / 패스워드문자열 ] localhost:9736 +4tJt8A6YAIm4jsryCSsyWMunC3OaLlfX64fPLsolGQmR31SDR0cPYtK22gdg6cc // [DAS IP:DAS PORT][ 공백 ][ 암호화된계정 / 패스워드문자열 ] localhost:9936 +4tJt8A6YAIm4jsryCSsyWMunC3OaLlfX64fPLsolGQmR31SDR0cPYtK22gdg6cc // [MS IP:MS PORT][ 공백 ][ 암호화된계정 / 패스워드문자열 ] - JEUS_HOME/bin 디렉터리에위치한 encryption 툴로암호화가가능합니다. stech:/home/jeus>encryption AES administrator:jeusadmin // encryption [ 암호화알고리즘 ] 계정 : 패스워드 [AES] : [administrator:jeusadmin] --> [encode:+4tjt8a6yaim4jsrycssywmunc3oallfx64fplsolgqmr31sdr0cpytk22gdg6cc] [AES] : [+4tJt8A6YAIm4jsryCSsyWMunC3OaLlfX64fPLsolGQmR31SDR0cPYtK22gdg6cc] --> [decode:administrator:jeusadmin] 17
DAS 기동 / 종료 Domain Admin Server(DAS) 시작 stech:/home/jeus>dsboot *************************************************************** - JEUS Home : /home/jeus/jeus7 - Java Vendor : Sun - Added Java Option : *************************************************************** + /usr/java/jdk1.6.0_30/bin/java -server -Xmx512m -Xbootclasspath/p:/home/jeus/jeus7/lib/system/extension.jar -classpath /home/jeus/jeus7/ lib/system/jeus-launcher.jar:/home/jeus/jeus7/lib/system/xalan.jar:/home/jeus/jeus7/lib/ system/jaxb-impl.jar:/home/jeus/jeus7/lib/system/woodstox-core-asl.jar:/home/jeus/jeus7/lib/system/xml_resource.jar:.... [2014.08.06 16:15:15][2] [adminserver-1] [SERVER-0248] The JEUS server is RUNNING. [2014.08.06 16:15:15][2] [adminserver-1] [SERVER-0401] The elapsed time to start: 6593ms. [2014.08.06 16:15:15][2] [launcher-10] [Launcher-0034] The server[adminserver] initialization completed successfully [pid : 18864]. [2014.08.06 16:15:15][0] [launcher-1] [Launcher-0040] Successfully started the server. The server state is now RUNNING. // 정상기동된상태 Domain Admin Server(DAS) 종료 stech:/home/jeus>dsdown Attempting to connect to 192.168.XX.XX:9736. The connection has been established to Domain Administration Server adminserver in the domain jeus_domain. The server [adminserver] has been shut down successfully. // 정상종료된상태 18
NodeManager 기동 / 종료 NodeManager 시작 stech:/home/jeus>nmboot [1] 18110 // 백그라운드로실행 stech:/home/jeus/jeus7/nodemanager/logs>cat JeusNodeManager.log more [2014.08.11 13:02:57][2] [nodemanager-1] [NodeManager-0101] The node manager is starting. [2014.08.11 13:02:57][2] [nodemanager-1] [NodeManager-0102] Initializing the node manager configuration. [2014.08.11 13:02:57][2] [nodemanager-1] [NodeManager-0108] Beginning to listen: localhost/127.0.0.1:7730. [2014.08.11 13:02:57][2] [nodemanager-9] [NodeManager-0109] Processing the request... // 정상기동된상태 NodeManager 종료 stech:/home/jeus>nmdown Succeed to stop the node manager. // 정상종료된상태 19
Managed Server 기동 / 종료 (1/3) Managed Server(MS) 시작 스크립트로기동 stech:/home/jeus>msboot_server1 *************************************************************** - JEUS Home : /home/jeus/jeus7 - JEUS Base Port : - Java Vendor : Sun - Added Java Option : *************************************************************** + /usr/java/jdk1.6.0_30/bin/java -server -Xmx512m -Xbootclasspath/p:/home/jeus/jeus7/lib/system/extension.jar -classpath /home/jeus/jeus7/lib/system/jeus-launcher.jar:/home/jeus/jeus7/lib/system/xalan.jar:/home/jeus/jeus7/lib/ system/jaxb-impl.jar:/home/jeus/jeus7/lib/system/woodstox-core-asl.jar:/home/jeus/jeus7/lib/system/xml_resource.jar:.... [2014.08.06 16:35:44][2] [server1-1] [SERVER-0401] The elapsed time to start: 9003ms. [2014.08.06 16:35:44][2] [launcher-10] [Launcher-0034] The server[server1] initialization completed successfully [pid : 21097]. [2014.08.06 16:35:44][0] [launcher-1] [Launcher-0040] Successfully started the server. The server state is now RUNNING. // 정상기동된상태 DAS 를통해서기동 stech:/home/jeus>dsa Attempting to connect to 192.168.XX.XX:9736. The connection has been established to Domain Administration Server adminserver in the domain jeus_domain. JEUS7 Administration Tool To view help, use the 'help' command. [DAS]jeus_domain.adminServer>startserver server1 // 사전에 NodeManager 가기동되어있어야함 The server [server1] was successfully started. // 정상기동된상태 20
Managed Server 기동 / 종료 (2/3) Managed Server(MS) 종료 스크립트로종료 stech:/home/jeus>msdown_server1 Attempting to connect to 192.168.XX.XX:9936. The connection has been established to the managed server server1 in the domain jeus_domain. The server [server1] has been shut down successfully. // 정상종료된상태 DAS 를통해서종료 stech:/home/jeus>dsa Attempting to connect to 192.168.XX.XX:9736. The connection has been established to Domain Administration Server adminserver in the domain jeus_domain. JEUS7 Administration Tool To view help, use the 'help' command. [DAS]jeus_domain.adminServer>stopserver server1 // 사전에 NodeManager 가기동되어있어야함 Server [server1] was successfully stopped. // 정상종료된상태 21
Managed Server 기동 / 종료 (3/3) 도메인내 Managed Server(MS) 전체시작 / 종료 DAS 를통해서시작 [DAS]jeus_domain.adminServer>startdomain Starting servers [server1, server2, server3]. All managed servers in the domain have been successfully started. // 정상기동된상태 DAS 를통해서종료 [DAS]jeus_domain.adminServer>stopdomain Stopping servers [adminserver, server1, server2, server3]. All managed servers in the domain were successfully stopped. // 정상종료된상태 Unable to shut down Domain Administration Server. To shutdown Domain Administration Server, use the local-shutdown command instead. // DAS 는종료되지않음 22
윈도우서비스로기동 / 종료 윈도우서비스등록 C:\TmaxSoft\JEUS7\bin>svcinstall.exe jeus.ini administrator jeusadmin // JEUS_HOME/bin 디렉터리에서 svcinstall.exe jeus.ini [JEUS 계정 ] [JEUS 패스워드 ] JEUS Windows service installer Ver. 4.1.0 Copyright (c) 2014, TmaxSoft Co., Ltd. JEUS Service[jeusservice-jeus] installed 윈도우서비스삭제 C:\TmaxSoft\JEUS7002\bin>svcremove.exe jeus // JEUS_HOME/bin 디렉터리에서실행 JEUS Windows service remover Ver. 4.1.0 Copyright (c) 2014, TmaxSoft Co., Ltd. Removing windows service 'jeus'... Successfully done. 서비스로시작시 DAS 와 NodeManager 가같이기동됨 23
Ⅳ. 기본환경설정 1. JEUS 관리툴 2. Node 설정 3. MS 설정 4. Cluster 설정 5. Application 설정 6. DataSource 설정 7. Session Clustering 설정
JEUS 관리툴 (1/2) JEUS7 에서는환경파일설정시 xml 을직접수정하지않고관리자를사용하는것을권장합니다. Webadmin - 웹을통해 JEUS 를관리하는사용자인터페이스로 DAS 가기동되어있어야합니다. - 접속방법 - http://das IP:DAS PORT/webadmin - [EX] http://192.168.xx.xx:9736/webadmin 관리자 ID/PW 입력 각서버의현재설정확인 Read Only 모드 설정변경모드로전환 수정사항도메인에반영수정사항모두취소 25
JEUS 관리툴 (2/2) jeusadmin - Command prompt 에서 JEUS 를관리하는데사용합니다. - jeusadmin 스크립트는 JEUS_HOME/bin 디렉터리에위치합니다. stech:/home/jeus>jeusadmin // 서버에접속하지않은상태 JEUS7 Administration Tool To view help, use the 'help' command. offline> stech:/home/jeus>dsa // DAS 에접속한상태로 DAS 가기동되어있어야함 Attempting to connect to 192.168.XX.XX:9736. The connection has been established to Domain Administration Server adminserver in the domain jeus_domain. JEUS7 Administration Tool To view help, use the 'help' command. [DAS]jeus_domain.adminServer>help modify-cluster // help [command name] 로명령어도움말조회 설정변경시동적반영되는항목 [DAS]jeus_domain.adminServer>ti -repeat 3 -interval 1 // ti 명령어를 1 초간격으로 3 번실행. 명령어반복수행 [DAS]jeus_domain.adminServer>p // 이전명령어재실행 26
Node 설정 (1/2) Node 추가 서버모니터링, 서버프로세스제어가가능하도록 JAVA 타입의 Node 를추가하는방법입니다. - Webadmin 사용 Webadmin 메인화면의오른쪽메뉴... MS 가속한원격지서버 IP 노드의기본포트는 7730 이므로해당포트가사용중일경우변경필요... 27
Node 설정 (2/2) - 콘솔툴사용 [DAS]jeus_domain.adminServer>addjavanode infrasvr -host 192.168.XX.XX -port 7730 // addjavanode [ 노드명 ] -host [MS 가속한원격지서버 IP] port [ 노드매니저포트 ] The node [infrasvr] was successfully added. [DAS]jeus_domain.adminServer>listnodes // 노드리스트확인 [DAS]jeus_domain.adminServer>modifyjavanode infrasvr -port 7731 // modifyjavanode [ 노드명 ] -port [ 노드매니저포트 ]. JAVA 노드설정수정 The node [infrasvr] was modified successfully. Check the results using "show-node [DAS]jeus_domain.adminServer>rmnode infrasvr // rmnode [ 노드명 ]. JAVA 노드삭제 The node [infrasvr] was successfully removed. 28
MS 설정 (1/25) MS 추가 신규로 MS 를추가 (ADD) 하거나기존 MS 를복사 (DUP) 하여 MS 추가가가능합니다. 본문서에서는신규 MS 추가 (ADD) 에대해설명합니다. - Webadmin 사용 2 1 설정변경모드로전환 29
MS 설정 (2/25) - Webadmin 사용 Cont. 1 MS 가속하는노드명선택 2 MS 에서서비스할엔진선택 30
MS 설정 (3/25) - Webadmin 사용 Cont. 추가한 MS 의 Base 포트는기본적으로 9736 으로설정됨 해당포트가사용중일경우변경필요 31
MS 설정 (4/25) - 콘솔툴사용 [DAS]jeus_domain.adminServer>addserver server2 -addr 192.168.XX.XX -baseport 9936 -node infrasvr // addserver [MS 명 ] -addr [ 서버 IP] -baseport [MS 포트 ] -node [ 노드명 ]. MS 추가 Successfully performed the ADD operation for server (server2). Check the results using "list-servers or add-server" [DAS]jeus_domain.adminServer>si // 서버정보확인 [DAS]jeus_domain.adminServer>startserver server2 // startserver [MS 명 ]. 192.168.XX.XX 에 NodeManager 가기동되어있어야함 The server [server2] was successfully started. [DAS]jeus_domain.adminServer>si [DAS]jeus_domain.adminServer>remove-server server2 // remove-server [MS 명 ]. MS 삭제 Successfully performed the REMOVE operation for server (server2). Check the results using "list-servers or remove-server" 32
MS 설정 (5/25) MS 환경설정 운영환경에적합하도록 MS 의세부항목을설정하는방법입니다. 2 1 33
MS 설정 (6/25) MS 로그경로변경 - 기본적으로 MS 로그는 SERVER_HOME/logs 디렉터리에생성되는데, 로그경로를수정하는방법은다음과같습니다. - Webadmin 사용 로그경로지정 - 콘솔툴사용... [DAS]jeus_domain.adminServer>modify-server server2 -logdir /user/jeus/logs // modify-server [MS명] -logdir [ 경로 ] Successfully performed the MODIFY operation for server (server2), but all changes were non-dynamic. They will be applied after restarting. Check the results using "list-servers server2 or modify-server server2 [DAS]jeus_domain.adminServer>list-servers server2 // list-servers [MS명] MS 재기동시반영됨 34
MS 설정 (7/25) JVM 옵션설정 - JEUS6 버전까지컨테이너의 <command-option> 에설정했던 JVM 옵션 (Heap Size, GC 로그, HeapDump 등 ) 을설정하는방법입니다. - Webadmin 사용...... 35
MS 설정 (8/25) - 콘솔툴사용 [DAS]jeus_domain.adminServer>listjvmopt server2 // listjvmopt [MS 명 ]. jvm option list 확인 jvm option list(1) jvm option list(2) [DAS]jeus_domain.adminServer>addjvmopt -server server2 -opt "-Xms512m // addjvmopt -server [MS 명 ] -opt 옵션값. jvm 옵션추가 // 옵션값추가시기존 jvm option list 와비교하여동일한값이없으면추가 Successfully performed the ADD operation for JVM configuration for the server(server2)., but all changes were non-dynamic. They will be applied after restarting. Check the results using "list-jvm-options or add-jvm-option" [DAS]jeus_domain.adminServer>listjvmopt server2 jvm option list(3) 36
MS 설정 (9/25) - 콘솔툴사용 Cont. [DAS]jeus_domain.adminServer>listjvmopt server2 [DAS]jeus_domain.adminServer>modifyjvmopt -server server2 -old "-Xmx512m" -new "-Xmx1024m" // modifyjvmopt -server [MS 명 ] -old 기존값 new 신규값. jvm 옵션수정 // Max Heap Size 를변경하고자할때위와같이할경우적용되지않음 // 기존 jvm option list 와비교하여동일한옵션일경우수정 [DAS]jeus_domain.adminServer>modifyjvmopt -server server2 -old "-Xmx512m -XX:MaxPermSize=128m" -new "-Xmx1024m -XX:MaxPermSize=128m Successfully performed the MODIFY operation for JVM configuration for the server(server2)., but all changes were non-dynamic. They will be applied after restarting. Check the results using "list-jvm-options or modify-jvm-option" [DAS]jeus_domain.adminServer>listjvmopt server2 [DAS]jeus_domain.adminServer>rmjvmopt -server server2 -opt "-Xmx1024m -XX:MaxPermSize=128m // rmjvmopt -server [MS 명 ] -opt 옵션값. jvm 옵션삭제 // 옵션삭제시에도 jvm option list 와비교하여동일한값을삭제 37
MS 설정 (10/25) 사용자 Class Path 설정 - JEUS6 버전까지컨테이너의 <user-class-path> 에설정했던 Class Path 를설정하는방법입니다. - Webadmin 사용... 클래스패스로설정할파일명까지명시 클래스패스로설정할디렉터리명까지명시 38
MS 설정 (11/25) - 위에서설정한클래스패스의클래스로딩순서는 SERVER_HOME/lib/application 보다낮습니다. - 특정클래스의클래스로더및로딩된위치를확인하는샘플 (findclass.jsp) <% %> ClassLoader loader = Thread.currentThread().getContextClassLoader(); try { java.net.url url = loader.getresource("com/tmax/testsample.class"); out.print("<h3>location</h3>" + url.tostring()); Class cls = Class.forName("com.tmax.TestSample"); loader = cls.getclassloader(); out.println("<p><p>used ClassLoader : "+ loader.getclass().getname()); } catch(exception e) { out.println("exception : "+e); e.printstacktrace(); } 39
MS 설정 (12/25) MS 로그설정 - MS 의로그설정을변경하는방법입니다. - Webadmin 사용 jeus 로거는기본적으로존재 동적반영되는항목 MS 로그레벨의기본값은 INFO 임 로그양증가... File 로남는로그에대한세부 ( 로그파일명, 파일 Rotation, Buffer Size 등 ) 설정 40
MS 설정 (13/25) - 콘솔툴사용 [DAS]jeus_domain.adminServer>listloggers server2 // listloggers [MS 명 ]. logger list 확인 [DAS]jeus_domain.adminServer>modifylogger -server server2 jeus -level FINE // modifylogger -server [MS 명 ] [ 로거명 ] -level [ 로그레벨 ]. MS logger 수정 Successfully performed the MODIFY operation for The logger[ jeus] information for the server [server2]. Check the results using "modify-logger" [DAS]jeus_domain.adminServer>listloggers server2 41
MS 설정 (14/25) Engine 환경설정 인코딩설정 - Web Engine 내의모든컨텍스트에의해사용될수있는인코딩설정방법입니다. - Webadmin 사용... 각항목의세부설명확인 HTTP 요청 URL 을위한인코딩 HTTP Request Header 의 Query String, Cookie 및 Body 에사용되는인코딩 전체응답 HTTP 메시지에적용되는인코딩 42
MS 설정 (15/25) - 콘솔툴사용 [DAS]jeus_domain.adminServer>webcfg -server server1 enc // webcfg server [MS 명 ] -enc. 인코딩확인 [DAS]jeus_domain.adminServer>addenc -server server1 -default -url EUC-KR // addenc server [MS 명 ] [ 디폴트인코딩 ] [Request Url 인코딩 ] [ 인코딩타입 ]. 인코딩추가 Successfully applied part of the changes. Restart the server to apply the remaining changes. For detailed encoding information, use the 'show-web-engine-configuration -enc' command. [DAS]jeus_domain.adminServer>addenc -server server1 -default -req EUC-KR // addenc server [MS 명 ] [ 디폴트인코딩 ] [Request 인코딩 ] [ 인코딩타입 ] [DAS]jeus_domain.adminServer>addenc -server server1 -default -res EUC-KR // addenc server [MS 명 ] [ 디폴트인코딩 ] [Response 인코딩 ] [ 인코딩타입 ] [DAS]jeus_domain.adminServer>webcfg -server server1 enc [DAS]jeus_domain.adminServer>modenc -server server1 -default -url UTF-8 // modenc server [MS 명 ] [ 디폴트인코딩 ] [Request Url 인코딩 ] [ 인코딩타입 ]. 인코딩수정 [DAS]jeus_domain.adminServer>rmenc -server server1 -url // rmenc -server [MS 명 ] [ 인코딩타입 ]. 인코딩삭제 43
MS 설정 (16/25) JSP 컴파일위치설정 - JSP 가컴파일되는위치는기본적으로 SERVER_HOME/.workspace/deployed/_generated_/AP 명 /~ 하단에남게되는데, 해당경로를수정하는방법입니다. - Webadmin 사용 - 콘솔툴사용... [DAS]jeus_domain.adminServer>modjsp -server server1 -jwd /home/jeus/jspworkdir // modjsp -server [MS 명 ] -jwd [ 디렉터리경로 ] Successfully applied part of the changes. Restart the server to apply the remaining changes. For detailed JSP engine information, use the 'show-web-engine-configuration -jsp' command. [DAS]jeus_domain.adminServer>webcfg -server server1 -jsp // webcfg server [MS 명 ] -jsp. jsp 엔진설정확인... 44
MS 설정 (17/25) http listener 설정 - WebServer 를사용하지않고, JEUS 에웹서비스포트 (http-listener) 를설정하여테스트가능한방법입니다. - Webadmin 사용 해당포트가사용중인지확인필요 45
MS 설정 (18/25) - Webadmin 사용 Cont. 앞서추가한 Listener 명선택 Thread 수설정 46
MS 설정 (19/25) - 콘솔툴사용 [DAS]jeus_domain.adminServer>addlistener -server server2 -name http-server2 -port 8089 // addlistener -server [MS 명 ] name [ 리스너명 ] port [ 리스너포트 ] Executed Successfully Check the result using 'list-server-listeners -server server2 -name http-server2. [DAS]jeus_domain.adminServer>listener -server server2 // 등록된리스너확인 [DAS]jeus_domain.adminServer>addwebl -server server2 -name http1 -tmin 10 -http -slref http-server2 // addwebl server [MS 명 ] name [http 리스너명 ] -tmin [min 값 ] [ 리스너타입 ] -slref [ 리스너명 ] Successfully applied the configuration changes. For detailed web connection information, use the 'show-web-engine-configuration -cn' command. [DAS]jeus_domain.adminServer>webcfg -server server2 cn... [DAS]jeus_domain.adminServer>modwebl -server server2 -name http1 -tmin 20 // modwebl -server [MS 명 ] -name [ 리스너명 ] -tmin [ 스레드수 ]. 리스너설정수정 [DAS]jeus_domain.adminServer>rmwebl -server server2 http1 // rmwebl -server [MS 명 ] [ 리스너명 ]. 리스너삭제 47
MS 설정 (20/25) WebtoB 연동설정 - JEUS 와 WebtoB 는 Reverse Connection 연결방식이다. 즉, JEUS(client) 에서 WebtoB(server) 로붙는구조로 JEUS 와 WebtoB 사이에방화벽이있을경우방화벽의 Out-Bound 포트 (JSVPORT) 를오픈해야합니다. - WebtoB 가정상적으로기동된상태임을가정합니다. - Webadmin 사용 48
MS 설정 (21/25) - Webadmin 사용 Cont. *NODE stech WEBTOBDIR="/home/webtob",.. JSVPORT = 9900, JEUS 연동포트 HTH = 1, TCP 연동방식... *SVRGROUP htmlg jsvg SVRTYPE = HTML SVRTYPE = JSV WebtoB 서버 IP *SERVER html MyGroup SVGNAME = htmlg, MinProc = 20, MaxProc = 20 SVGNAME = jsvg, MinProc = 20, MaxProc = 20 49
MS 설정 (22/25) - 콘솔툴사용 [DAS]jeus_domain.adminServer>addwebtobcon -server server2 -name webtob1 -regid MyGroup -num 10 -addr 192.168.XX.XX -port 9900 // addwebtobcon server [MS 명 ] name [ 리스너명 ] regid [WebtoB *Server 절의서버명 ] num [ 스레드수 ] -addr [WebtoB 서버 IP] -port [ 연동포트 ] Successfully changed only the XML. Restart the server to apply the changes. For detailed web connection information, use the 'show-web-engine-configuration -cn' command. [DAS]jeus_domain.adminServer>webcfg -server server2 -cn WebtoB connector[webtob1] configuration for [server2]... [DAS]jeus_domain.adminServer>modwebtobcon -server server2 -name webtob1 -num 20 // modwebtobcon -server [MS명] -name [ 리스너명 ] num [ 스레드수 ] Successfully applied the configuration changes. For detailed web connection information, use the 'show-web-engine-configuration -cn' command. 50
MS 설정 (23/25) - 콘솔툴사용 Cont. [DAS]jeus_domain.adminServer>ti -server server2 -li webtob1 // ti -server [MS 명 ] -li [ 리스너명 ]. 연동확인 20 개의 thread 중, idle( 사용가능한 ) thread 는 20 개 51
MS 설정 (24/25) Session Timeout 설정 - Application 의세션타임아웃을설정하는방법입니다. - 설정한세션타임아웃은, AP 경로 /WEB-INF/web.xml 에설정한세션타임아웃보다우선순위가낮습니다. - Webadmin 사용 분단위로설정... 52
MS 설정 (25/25) - 콘솔툴사용 [DAS]jeus_domain.adminServer>msc -server server1 -to 60 // msc -server [MS 명 ] -to [ 타임아웃값 ( 분단위 )]. 세션타임아웃수정 53
Cluster 설정 (1/4) Cluster 추가 JEUS7 에서 Cluster 는동일한서비스를수행하는여러개의서버들의집합을의미합니다. Cluster 의기능으로서비스부하분산 (Load Balancing) 및안정성을위한장애극복 (Failover) 등이있습니다. Cluster 설정시, Cluster 내의모든서버에같은 Application 을 Deploy 하고, 같은리소스를사용하고, 같은서비스를등록할것을권장합니다. - Webadmin 사용 2 1 54
Cluster 설정 (2/4) - Webadmin 사용 Cont.... server1 과 server2 를 Cluster 로설정 Cluster 에서사용할 Data Source 선택... 55
Cluster 설정 (3/4) - 콘솔툴사용 [DAS]jeus_domain.adminServer>add-cluster cluster1 -servers server1,server2 //add-cluster [ 클러스터명 ] servers [MS 명 1,MS 명 2 ] Successfully performed the ADD operation for cluster (cluster1). Check the results using "list-clusters or add-cluster" [DAS]jeus_domain.adminServer>list-clusters // 클러스터 list 확인 [DAS]jeus_domain.adminServer>si // 서버정보확인 56
Cluster 설정 (4/4) - 콘솔툴사용 [DAS]jeus_domain.adminServer>add-servers-to-cluster cluster1 -servers server3 // add-servers-to-cluster [ 클러스터명 ] -servers [MS 명 ]. 기존클러스터에 MS 추가 Successfully performed the ADD operation for The server list for cluster(cluster1).. Check the results using "list-clusters cluster1 or add-servers-to-cluster cluster1 [DAS]jeus_domain.adminServer>list-clusters [DAS]jeus_domain.adminServer>remove-cluster cluster1 // remove-cluster [ 클러스터명 ]. 클러스터삭제 Successfully performed the REMOVE operation for cluster (cluster1). Check the results using "list-clusters or remove-cluster [DAS]jeus_domain.adminServer>remove-servers-from-cluster cluster1 -servers server3 // remove-servers-from-cluster [ 클러스터명 ] -servers [MS 명 ]. 클러스터에속해있던 MS 삭제 Successfully performed the REMOVE operation for The server list for cluster(cluster1).. Check the results using "list-clusters cluster1 or remove-servers-from-cluster cluster1" 57
Application 설정 (1/6) Application 추가 클라이언트 PC 에서 Archive 형태 (EAR, EJB, WAR 등 ) 의 Application 을 DAS 로 Deploy 하는방법입니다. - Webadmin 사용 1 해당 Id 는도메인내에서유일해야함 2 Application 을 Deploy 하기전 DAS 로 install 업로드할파일선택 58
Application 설정 (2/6) - Webadmin 사용 Cont. 배포하기전해당 MS 는기동되어있어야함... 컨텍스트패스지정 59
Application 설정 (3/6) - Webadmin 사용 Cont. MS 재기동없이테스트가능 앞서지정한컨텍스트패스 60
Application 설정 (4/6) - 콘솔툴사용 [DAS]jeus_domain.adminServer>installapp /home/jeus/myweb/webapps7.war -id webapps7 // installapp [ 애플리케이션경로 ] -id [ 애플리케이션 ID]. DAS 로 Application install Successfully installed the application [webapps7]. [DAS]jeus_domain.adminServer>appinfo // Application 정보확인 [DAS]jeus_domain.adminServer>deploy webapps7 -servers server1 // deploy [ 애플리케이션 ID] -servers [MS 명 ] deploy the application for the application [webapps7] succeeded. [DAS]jeus_domain.adminServer>appinfo [DAS]jeus_domain.adminServer>undeploy webapps7 // undeploy [ 애플리케이션 ID]. MS 에서 Application undeploy Undeploying [webapps7] (This may take time due to graceful undeployment)... undeploy the application for the application [webapps7] succeeded. successfully undeployed (elapsed = 6062ms) [DAS]jeus_domain.adminServer>uninstall webapps7 // uninstall [ 애플리케이션 ID]. DAS 에서 Application uninstall // MS 에서 Application 을참조하는경우, undeploy 수행후 uninstall 해야함 uninstall the application for the application [webapps7] succeeded. : Successfully deleted [webapps7]. 61
Application 설정 (5/6) 디렉터리모드의 Application(Exploded 모듈 ) 을 Deploy 하는방법으로, DAS 에서접근가능한경로에위치한경우에만가능합니다. - Webadmin 사용 1 2 Id 를명시하지않으면 Application 파일명으로생성 배포하기전해당 MS는기동되어있어야함... 컨텍스트패스지정 62
Application 설정 (6/6) - Webadmin 사용 Cont. MS 재기동없이테스트가능 - 콘솔툴사용 [DAS]jeus_domain.adminServer>deploy -path /home/jeus/webapps -servers server1 -ctxp / // deploy -path [ 애플리케이션경로 ] servers [MS 명 ] ctxp [ 컨텍스트패스 ] deploy the application for the application [/home/jeus/webapps] succeeded. [DAS]jeus_domain.adminServer>appinfo Application information for the domain [ jeus_domain]. 63
DataSource 설정 (1/7) DataSource 추가 DataSource 는 Application 에 JDBC Connection 을제공하는 Factory 로추상화된객체를의미합니다. DriverManager 처럼 Application 에서 driver 정보를 Hard Coding 할필요가없고, J2EE 표준이므로모든 WAS 에서동일한코드를사용합니다. 본문서에서는 Oracle 연동설정방법을다루고, 설정전에 JEUS_HOME/lib/datasource 경로에 JDBC 드라이버를위치시킨후 DAS 를재기동합니다. - Webadmin 사용 2... 1 64
DataSource 설정 (2/7) - Webadmin 사용 Cont. DataSource ID 지정 Export Name을설정하지않을경우 DataSource ID가 JNDI명임... DB서버 IP DB서버 PORT SID 계정 DataSource Type DataSource Connection Pooling 을지원하지않는 DataSource Connection Pool DataSource Connection Pool 제공 XA 를사용할필요가없는환경이나 Auto Commit 을 false 로설정하고직접로컬트랜잭션을컨트롤하는경우사용 XA DataSource Connection Pooling 과글로벌트랜잭션연동지원 이기종 DB 간의트랜잭션처리또는, 하나의 DB 에접근하더라도관련로직이하나의트랜잭션으로묶여야하는경우사용 패스워드 65
DataSource 설정 (3/7) - Webadmin 사용 Cont.... 66
DataSource 설정 (4/7) - Webadmin 사용 Cont. 2... 1 67
DataSource 설정 (5/7) - Webadmin 사용 Cont.... MS 재기동없이테스트가능 68
DataSource 설정 (6/7) - 콘솔툴사용 [DAS]jeus_domain.adminServer>addds -id datasource1 -vendor oracle -dst ConnectionPoolDataSource -dn orcl -dscn oracle.jdbc.pool.oracleconnectionpooldatasource -sn 192.168.XX.XX -pn 1521 -user scott -pw tiger -prop drivertype:java.lang.string=thin // addds -id [datasource id] -vendor [db vendor] -dst [datasource 타입 ] -dn [DB SID] -dscn [datasource 클래스명 ] -sn [DB IP] -pn [DB Port] -user [ 계정 ] -pw [ 패스워드 ] -prop [ 프로퍼티, name:type=value]. DataSource 추가 Successfully performed the ADD operation for data source [datasource1] to domain. Check the results using "add-data-source [DAS]jeus_domain.adminServer>modifyds -id datasource1 -min 10 -max 30 -step 5 -cq "select 1 from dual -ew true // DataSource 수정 Successfully performed the MODIFY operation for configuration of the data source [datasource1]. Check the results using "modify-data-source -id datasource1" [DAS]jeus_domain.adminServer>adddstosvr -server server1 -ids datasource1 // adddstosvr -server [MS 명 ] -ids [datasource id]. server1 에서 datasource1 을사용하도록설정 Successfully performed the ADD operation for data sources to the server [server1]. Check the results using "add-data-sources-to-server -server server1" [DAS]jeus_domain.adminServer>cpinfo -server server1 // cpinfo -server [MS 명 ]. MS 에서사용하는컨넥션풀확인 [DAS]jeus_domain.adminServer>rmds -id datasource1 // rmds -id [datasource id]. DataSource 삭제 Successfully performed the REMOVE operation for data source [datasource1] from the domain. 69
DataSource 설정 (7/7) - DB 연동테스트샘플 (ds.jsp) <%@ page contenttype="text/html; charset=euc-kr" %> <%@ page import="javax.naming.*" %> <%@ page import="javax.sql.*" %> <%@ page import="java.sql.*" %> <% Context ctx = null; DataSource ds = null; Connection con = null; PreparedStatement ps = null; ResultSet rs = null; String sql = "select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual"; try { ctx = new InitialContext(); ds = (DataSource)ctx.lookup("datasource1"); // 앞서등록한 JNDI 명 con = ds.getconnection(); ps = con.preparestatement(sql); rs = ps.executequery(); while (rs.next()){ out.print(rs.getstring(1)); } } catch ( Exception e ) { e.printstacktrace(); } finally { if ( ps!= null ) try { ps.close(); } catch(exception e) {} if ( con!= null ) try { con.close(); } catch(exception e) {} } %> 70
Session Clustering 설정 (1/6) 세션서버구조 JEUS7 에서는세션데이터의관리방식으로분산식세션서버를운용합니다. 분산세션서버방식은클러스터링에참여하는모든엔진 ( 웹엔진, EJB 엔진 ) 내에독립적인분산세션서버가존재하고, 이들분산세션서버들이 Peer-to-Peer 로다른엔진의분산세션서버와통신하여지속적인세션서비스를제공합니다. 위그림에서화살표는분산세션서버간의소켓연결을나타낸것으로 장애발생의경우를제외하고연결은보통하나씩만갖게됨 분산세션서버특징 여러개의서블릿엔진으로구성된클러스터링환경에서지속적인세션유지가능 바로이전의요청을처리하던서블릿엔진이다운되어도다른서블릿엔진들이이후의요청을처리할때세션이끊기지않도록함 분산식프로토콜을사용하기때문에클러스터링규모가커지더라도확장성용이 71
Session Clustering 설정 (2/6) Session Clustering 설정 EX(1) 동일업무를수행하는 MS 를클러스터로구성할경우별도의설정없이세션공유가가능합니다. - server1 과 server2 를 cluster1 로설정한다. ( 환경설정 > Cluster 설정참고 ) Backup Level... 클러스터의세션세부항목설정 Set 세션의 setattribute/putvalue/ removeattribute/removevalue 함수호출이발생한경우에만세션객체백업 Get 세션의 setattribute/putvalue/ removeattribute/removevalue/ getattribute/getvalue 함수호출이발생한경우에만세션객체백업 All 사용된세션모두백업 세션객체가 HttpServletRequest.getSession() API 로호출될경우세션객체백업 72
Session Clustering 설정 (3/6) - cluster1 에 WEB Application 을배포한다. ( 환경설정 > Application 설정참고 ) - Webadmin 에서세션정보확인 server1 의 backup server server2 의 backup server 73
Session Clustering 설정 (4/6) - 콘솔툴에서세션정보확인 [DAS]jeus_domain.adminServer>st -s -server server1 // st -s -server [MS 명 ] - server1 만기동된상태에서세션을생성하는 set.jsp 를호출한다. [SessionID].[ 엔진명 ] - server2 기동및 server1 종료후 get.jsp 를호출한다. - SessionID 는유지되고엔진명만변경 Session 객체에저장한 id 값정상적으로불러옴 Application 의세션타임아웃 74
Session Clustering 설정 (5/6) Session Clustering 설정 EX(2) 각각다른업무를처리하는 server1(www.test.com/) 과 server2(www.test.com/webapps7) 의세션을공유하는방법입니다. - 각 MS 에 WEB Application 을배포한다. ( 환경설정 > Application 설정참고 ) Http Session Config EJB 와관계가없고, 웹애플리케이션에만영향을미침 클러스터링과동시에설정할경우클러스터의설정은무시됨 도메인내 (domain.xml) 의모든서버에대해적용 ( 일부서버만을대상으로설정불가능 )... <shared> 옵션이 true 로설정되어모든서버내의애플리케이션의세션공유 - 세션을생성하는 http://www.test.com/set.jsp?id=stech 을호출한다. (server1 로요청 ) - 세션을가져오는 http://www.test.com/webapps7/get.jsp 를호출한다. (server2 로요청 ) - SessionID 는유지되고엔진명만변경되는지확인 - Session 객체에저장한 id 값을정상적으로불러오는지확인 75
Session Clustering 설정 (6/6) - 세션테스트샘플 (set.jsp) <%@page contenttype="text/html; charset=euc-kr" %> <% out.println("<font color=red size=5>session Set</font><br><p>"); out.println("container ID : " + System.getProperty("jvmid") + "<br>"); out.println("session ID : " + session.getid() + "<br><p>"); String id=request.getparameter("id"); out.println("request Parameter : " + id + "<br>"); session.setattribute("id", id); out.println("session Set : " + id + "<br>"); out.println("session Get : " + (String) session.getattribute("id") + "<br><p>"); %> <a href=get.jsp> 세션확인 </a> - 세션테스트샘플 (get.jsp) <%@page contenttype="text/html; charset=euc-kr" %> <% out.println("<font color=red size=5>session Get</font><br><p>"); out.println("container ID : " + System.getProperty("jvmid") + "<br>"); out.println("session ID : " + session.getid() + "<br>"); out.println("session Get : " + (String) session.getattribute("id") + "<br><p>"); out.println("session Timeout : " + session.getmaxinactiveinterval() + " sec.<br>"); out.println("session Timeout : " + session.getmaxinactiveinterval()/60 + " min.<br>"); out.println("session Timeout : " + (double)session.getmaxinactiveinterval()/3600 + " hour.<br><p>"); out.println("session.getlastaccessedtime() : " + new java.util.date(session.getlastaccessedtime()).tostring() + "<br>"); out.println("session.getcreationtime() : " + new java.util.date(session.getcreationtime()).tostring() + "<br>"); %> 76
Ⅴ. 로그및모니터링 1. 로그디렉터리및종류 2. 로거포맷 3. 서버모니터링 4. Thread 모니터링 5. 메모리모니터링 6. Connection Pool 모니터링 7. Application 모니터링 8. Session 모니터링
로그디렉터리및종류 (1/2) JEUS Logging 은실행중시스템에서수행되었던일련의작업들에대한내용을순서대로보관, 기록하는작업입니다. JEUS 는 Java SE 에서기본으로제공되는표준 Logging API(java.util.logging) 를사용합니다. 서버에로거를설정하지않아도최상위로거인 jeus 로거는기본적으로존재합니다. 파일핸들러 (File Handler) 를사용하고일일단위로로그파일이로테이션될수있도록합니다. 서버로그의디렉터리구조는다음과같습니다. WEB Application 요청에대한액세스로그파일 서버의모든 WEB Application 으로요청한내용기록 Launcher 에서서버를부팅할때발생하는로그메시지 서버에서 logging 하는기본로그파일 서버 JVM 에서발생하는 GC 로그나 Thread Dump 등이기록 Launcher 에서서버를시작할때특정 JVM 옵션을설정하기때문에생성되는파일 78
로그디렉터리및종류 (2/2) 참고사항 JEUS6 까지는콘솔핸들러설정이가능했지만 JEUS7 부터는설정할수없습니다. JEUS7 에서는 Launcher 를통해서버를부팅하기때문에 Launcher 프로세스의콘솔이지서버프로세스의콘솔은아닙니다. 서버에서발생하는로그메시지를콘솔로출력하기위해서는 Launcher 프로세스는서버가 shutdown 될때까지다운되지않아야합니다. 서버를기동할때 -verbose 옵션을설정하면 Launcher 프로세스는서버가다운될때까지다운되지않고서버에서발생하는로그메시지들을파이프를통해읽어콘솔로출력합니다. 79
로거포맷 [EX]Jeus Server log [ 시간 ] [ 레벨 ] [Thread 정보 ] [ 로그메시지 ID] 로그메시지 구분 설명 시간 " 년. 월. 일시간 : 분 : 초 " 의형식으로출력된다. 레벨 Thread 정보 로그메시지 ID 로그레벨이그에매핑되는숫자로출력된다. 0: SEVERE 1: WARNING 2: INFO 3: CONFIG 4: FINE 5: FINER 6: FINEST 7: ALL 로그메시지를 logging 하는 Thread 정보를나타냅니다. logging 하는프로세스와 Thread 번호로표현되며, 이둘은하이픈 (-) 으로구분됩니다. Thread 정보가같은로그메시지는같은 Thread 에서 logging 한것입니다. 로그를출력하는각모듈에대한정보로모듈이름과메시지번호로표현되며, 이둘은하이픈 (-) 으로구분됩니다. 로그메시지운영중에발생한일에대한의미를함축하고있는로그메시지입니다. 80
서버모니터링 (1/2) 서버상태확인 Webadmin 및콘솔툴을사용하여서버의상태를모니터링하는방법입니다. - Webadmin 사용 서버에등록된 Application 이 deploy 를실패한상태에서서버가기동된상태 서버시작시 Force 옵션을설정하면 Application deploy 여부에상관없이기동 일반적인서버상태 서버기동이완료되고등록된 Application 이정상적으로서비스가능한상태 서버가아직기동되지않았거나정상종료된상태 서버가시작명령 ( 실행스크립트나노드매니저에의해서기동 ) 을받고기동중인상태 81
서버모니터링 (2/2) - 콘솔툴사용 [DAS]jeus_domain.adminServer>si // 서버상태확인 82
Thread 모니터링 (1/5) Thread 상태확인 서비스호출시장시간로딩되지않을경우, Thread 가어떤작업을수행중인지확인이필요합니다. Webadmin 및콘솔툴을사용하여 Thread 를모니터링하는방법입니다. - Webadmin 사용 83
Thread 모니터링 (2/5) - Webadmin 사용 WebtoB 와연동된 thread 상태확인 hang.jsp 페이지를 41 초간수행중으로 tid 선택시해당 Thread 의 Stack Trace 확인 _700_hang_5fjsp.java(hang.jsp 의컴파일된.java 파일 ) 의 63 라인에서 Thread.sleep() 처리중... 10 개의 thread 중, idle( 사용가능 ) thread 는 7 개 84
Thread 모니터링 (3/5) - 콘솔툴사용 [DAS]jeus_domain.adminServer>ti -server server1 -li webtob1 // ti -server [MS 명 ] -li [ 리스너명 ]. thread 상태확인 hang.jsp 페이지를 35 초간수행중 10 개의 thread 중, idle( 사용가능한 ) thread 는 7 개 [DAS]jeus_domain.adminServer>p // 위명령어재실행 85
Thread 모니터링 (4/5) - 콘솔툴사용 Cont. [DAS]jeus_domain.adminServer>strace -server server1 -li webtob1 // strace -server [MS 명 ] -li [ 리스너명 ]. webtob1 전체 thread 에대한 Stack Trace 확인... [DAS]jeus_domain.adminServer>strace -server server1 87 // strace -server [MS 명 ] [tid]. 특정 thread 에대한 Stack Trace 확인... 86
Thread 모니터링 (5/5) - 관리자접속이불가능할경우해당 MS 의 thread dump 발생 stech:/home/jeus>ps -ef grep java // ps -ef grep java 로해당 MS 의 PID 확인 stech:/home/jeus>kill -3 15781 // kill -3 [PID]. 3 초간격으로 3 번정도실행 stech:/home/jeus>kill -3 15781 stech:/home/jeus>kill -3 15781 // 발생한 thread dump 는 SERVER_HOME/logs/jvm.log 에생성됨 stech:/home/jeus/jeus7/domains/jeus_domain/servers/server1/logs>cat jvm.log more... 87
메모리모니터링 (1/3) Heap Memory 사용량확인 서버의 Jvm Config 에설정한 Heap Memory 를모니터링하는방법입니다. - Webadmin 사용 88
메모리모니터링 (2/3) - 콘솔툴사용 [DAS]jeus_domain.adminServer>meminfo -servers server1 // meminfo -servers [MS 명 ] Total memory Free memory OutOfMemory Error - Heap Memory 가부족하거나 GC 가정상적으로일어나지않을경우, OutOfMemory 가발생할수있습니다. 원인분석을위해서버의 jvm-config 에 OutOfMemory 발생시자동으로 HeapDump 가발생하도록 Dump 및 GC log 옵션을설정해야합니다. - [EX]HotSpot JVM 옵션 domain.xml <jvm-config> <jvm-option>-xms512m -Xmx1024m</jvm-option> <jvm-option>-xx:permsize=128m -XX:MaxPermSize=256m</jvm-option> <jvm-option>-xx:+disableexplicitgc</jvm-option> <jvm-option>-verbose:gc -Xloggc:/home/jeus/jeus7/domains/jeus_domain/servers/gclog/server1_gc.log</jvm-option> // GC 로그경로 <jvm-option>-xx:+printgcdetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC</jvm-option> <jvm-option>-xx:+heapdumponoutofmemoryerror</jvm-option> // OutOfMemory 발생시 HeapDump 생성 <jvm-option>-xx:heapdumppath=/home/jeus/jeus7/domains/jeus_domain/servers/heapdump/</jvm-option> // HeapDump 경로 </jvm-config> 89
메모리모니터링 (3/3) - [EX] IBM JVM 옵션 domain.xml <jvm-config> <jvm-option>-xms1024m -Xmx1024m</jvm-option> <jvm-option>-xdisableexplicitgc</jvm-option> <jvm-option>-verbose:gc -Xverbosegclog:/home/jeus/jeus7/domains/jeus_domain/servers/gclog/server1_gc.log</jvm-option> </jvm-config> 사용자 profile export IBM_HEAPDUMP=true export IBM_HEAP_DUMP=true export IBM_HEAPDUMP_OUTOFMEMORY=true // OutOfMemory 발생시 HeapDump 생성 export IBM_JAVADUMP_OUTOFMEMORY=true // OutOfMemory 발생시 JavaCore 생성 export IBM_HEAPDUMPDIR=/home/jeus/jeus7/domains/jeus_domain/servers/heapdump // HeapDump 경로 export IBM_JAVACOREDIR=/home/jeus/jeus7/domains/jeus_domain/servers/heapdump // JavaCore 경로 90
Connection Pool 모니터링 (1/3) DB Connection Pool 상태확인 페이지호출시 DB 접속이안될경우, DB Connection 상태를확인해야합니다. - Webadmin 사용 Export Name Min Max Active Idle Disposable Total Wait Enabled 소스에서사용하는 JNDI 명 pooling 되는객체의최소값 pooling 되는객체의최대값현재사용중인 Connection 수현재사용가능한 Connection 수임시 Connection 생성수 ( 생성후반납되지않는 Connection) 현재 Connection Pool 에생성되어있는전체 Connection 수 Connection Pool 에사용가능한 Connection 이없을경우대기할지여부 (true : Connection 이반납될때까지기다림 / false : Disposable 한 Connection 생성 ) Connection Pool 의활성화 / 비활성화상태 (true : 활성화 / false : 비활성화 ) 91
Connection Pool 모니터링 (2/3) - 콘솔툴사용 [DAS]jeus_domain.adminServer>cpinfo -server server1 // cpinfo -server [MS 명 ] WaitTimeoutException stech:/home/jeus/jeus7/domains/jeus_domain/servers/server1/logs>cat JeusServer.log more 92
Connection Pool 모니터링 (3/3) - getconnection 요청후, 사용가능한 Connection 이없어 Connection 이반납되기를대기하다가 JEUS 환경파일 (domain.xml) 의 database 설정중 wait-time(default : 10 초 ) 이초과한경우입니다. [DAS]jeus_domain.adminServer>cpinfo -server server1 30 개의 Connection 중, Idle Connection 이없음 - 갑작스러운과부하나 DB 응답지연으로발생할수있는데, DB 및 Thread 상태를확인해야합니다. - Thread 수대비 DB Connection 수가적게설정되어있다면, DB Connection 수를증가시킵니다. - Active thread 가없는데 DB Connection Idle 이 0 인경우, Connection 누수를의심해야합니다. 이경우, Jeus Server log 에 getconnection 후 close 하지않은소스확인이가능합니다. [2014.08.10 16:23:42][1] [server1-86] [SERVER-0396] The resources were not closed: JeusConnection@fa8363[PHY_ID=datasource1-19,actual=oracle.jdbc.driver.LogicalConnection@c80d66] subject : /dbtest.jsp - 서버에서 action-on-resource-leak 옵션을 AutoClose 로설정하면 JEUS 에서메소드가종료하는시점에 close 를하지만모든경우에적용되는것은아니므로소스에서 close 하는것을권고합니다. 93
Application 모니터링 (1/2) Application 상태확인 JEUS7 에서는도메인단위로 Application 을관리하기때문에 DAS 에서모든 Application 모니터링및동작을제어합니다. JEUS 는 Application 을 DAS 로 Install 시킨후 2 Phase deployment 과정을거쳐 Target 서버나클러스터로배포합니다. - Webadmin 사용 Running 상태인경우에만세부내용확인가능 도메인에서 Application 을식별할수있는 ID 94
Application 모니터링 (2/2) - 콘솔툴사용 [DAS]jeus_domain.adminServer>appinfo // Application 정보확인 RUNNING Application 을서비스할수있는서버가하나이상 Running 인상태 INSTALLED DEPLOYED Application 파일이도메인으로 upload 된상태이상태에서 Deploy 대상을지정해서 Deploy 나 distribute 명령수행가능 Deploy 된이력이있는 Application 의대상서버가모두 RUNNING 상태가아닌경우 DISTRIBUTED Application 이 Distribute 를성공적으로완료한상태 (Client 에서요청할수없는상태 ) 이때대상서버들이모두 SHUTDOWN 상태이더라도 DISTRIBUTED 로보여짐 95
Session 모니터링 (1/2) Session 상태확인 서버의 Session 상태를모니터링하는방법은다음과같습니다. - Webadmin 사용 세션클러스터링을사용하지않을경우 - 콘솔툴사용 [DAS]jeus_domain.adminServer>st -s -server server1 // st -s -server [MS 명 ] 96
Session 모니터링 (2/2) - Webadmin 사용 세션클러스터링을사용할경우 백업서버명 - 콘솔툴사용 [DAS]jeus_domain.adminServer>st -s -server server1 // st -s -server [MS 명 ] 97
Total enterprise solution provider, TmaxSoft Q & A 98
Total Enterprise Solution Provider, TmaxSoft Thank you! 99