LNA Web Application Server

Guides -LENA 운영자 가이드

Session Server Standalone 모드

설치

설치는 "3.9.1 Session Server 설치" / "4.5.5 Session Server Install"에서 확인한다.

기동/중지 및 기동여부 확인

기동/중지 및 기동여부 확인은 "3.9.2 Session Server 실행"에서 확인한다.

환경설정

Session Server가 설치된 위치를 ${ZODIAC_HOME}이라 칭한다. Session Server는 LENA home 하위 /servers 폴더에 위치한다.

환경설정은 ${ZODIAC_HOME}/zodiac.conf 에 관리한다. 환경설정으로 변경 가능한 설정은 아래와 같다.

항목설명
server_idserver ID
server_nameserver Name
primary_port해당 Zodiac Session Server의 TCP listening port
session_max_count최대 HTTP세션수
send_queue_sizeNode, Slave Server 로 전송할 TmObject를 담는 Queue의 사이즈.
recv_queue_sizeTmData를 담는 Queue의 사이즈.
req_queue_sizeTmRequest를 담는 Queue 의 사이즈.
resp_queue_sizeTmResponse를 담는 Queue 의 사이즈.
keep_alive_timeApplication Server와 Session 서버간의 TCP연결을 유지하기 위해 더미메세지를 보내는 간격, so_timeout보다 작아야 한다. 각 Application Server Node의 설정과 일치시키는 것이 좋다.
so_timeoutApplication Server와의 연결에서 read timeout
server_req_queue_sizeTmRequest를 담는 Queue 의 사이즈.
server_recv_queue_sizeTmData를 담는 Queue 의 사이즈.
thread_request_handlerrequest Queue 에 쌓은 데이터 처리하는 Thread 개수.
thread_data_handlerrecieve Queue 에 쌓은 데이터 처리하는 Thread 개수.
debug_clusteringDebug용 Log 남길지 여부
enable_auto_was_synctrue 인 경우, wasInstance에 request의 jvmId가 없는 경우 SESSION_SYNC request를 request 보낸 server로 response한다.
enable_auto_peer_synctrue 인 경우, peer 정보를 담는 곳에 request의 jvmId가 없는 경우 SESSION_SYNC request를 request 보낸 server로 response한다.
server_expire_sec서버에서 HTTP세션 정보를 expire 시키는 시간
0인 경우, 각 session의 timeout 시간을 사용
server_expire_check_sec설정 초 마다 Entry의 accTime을 체크하여 expire.
secondary_hostZodiac Secondary 세션서버의 주소
secondary_portZodiac Secondary 세션서버의 주소
enable_ready_after_syncfalse인 경우, secondary와 sync가 되기 전에 client에 ready 상태를 전송한다. (true는 sync 후 ready 상태 전송)
wait_server_ready_timeout해당 시간 이 될 때까지 ready상태가 안되면 자동으로 ready 상태를 만들어준다.
server_ready_time해당 값 * 100 ms 만큼 기다리며 secondary와 sync 맞춤.
max_logoutset최대 로그아웃 된 HTTP 세션 수
enable_auto_logout_synctrue 인 경우, session entry 정보를 sync 할 때, logout 정보도 같이 sync 한다. (sticky가 아닌 round-robin일 경우 필요하다)

로그

로그는 ${LENA_HOME}/logs/session-server/lena-[Session Server Name]_[YYYYMMDD].log 로 남는다. 로그를 확인하고자 한다면 ${ZODIAC_HOME}/log.sh 파일을 실행시켜 확인 할 수도 있다.

[session_5002]$ ./log.sh
5월 09, 2016 02:55:50 오후 [ZODIAC] TCP listen 5002
5월 09, 2016 02:55:54 오후 [ZODIAC] ACCEPT NODE(Tomcat) /10.77.241.102:33138
5월 09, 2016 02:55:55 오후 [ZODIAC] SERVER_READY, no peer, time=5000
5월 09, 2016 02:59:57 오후 [ZODIAC] Zodiac Stop
5월 09, 2016 03:00:00 오후 [ZODIAC] Zodiac Session Server 1.2.0 20160420
5월 09, 2016 03:00:01 오후 [ZODIAC] TCP listen 5002
5월 09, 2016 03:00:01 오후 [ZODIAC] ACCEPT NODE(Tomcat) /10.77.241.102:33359
5월 09, 2016 03:00:03 오후 [ZODIAC] ACCEPT SERVER /10.77.241.101:46818
5월 09, 2016 03:00:04 오후 [ZODIAC] SYNC[session_5002] recv bulk sessions : #0 recv bulk logout sessions : #0 recv bulk dupInfo : #0 2ms
5월 09, 2016 03:00:04 오후 [ZODIAC] SERVER_READY sync is done
5월 09, 2016 03:00:05 오후 [ZODIAC] TCP Primary name=session_5002 /10.77.241.101:5002
5월 09, 2016 03:00:05 오후 [ZODIAC] SYNC start 10.77.241.101:5002
5월 09, 2016 03:00:05 오후 [ZODIAC] SYNC Send bulk sessions send to 10.77.241.101:5002 #0 and logout session send : 0 and dupInfo send : 0

Console

Zodiac Session Server는 JMX를 통해 Session Server 정보 조회 및 Application Server Sync 명령을 수행 할 수 있다. ${ZODIAC_HOME} 의 console.sh 파일을 실행시켜 Zodiac Session Server의 JMX 기능을 사용한다.

${ZODIAC_HOME} 디렉토리 조회
[session_5002]$ ll
합계 32
-rw-rw-r-- 1 youjkim youjkim 0 2016-05-09 15:00 31064.zodiac
-rwxr-xr-x 1 youjkim youjkim 3059 2016-05-09 10:59 console.sh
-rwxr-xr-x 1 youjkim youjkim 1464 2016-05-09 10:59 env.sh
drwxr-xr-x 2 youjkim youjkim 4096 2016-05-09 10:59 lib
-rwxr-xr-x 1 youjkim youjkim 130 2016-05-09 10:59 log.sh
-rwxr-xr-x 1 youjkim youjkim 187 2016-05-09 10:59 ps.sh
-rwxr-xr-x 1 youjkim youjkim 195 2016-05-09 14:26 session.conf
-rwxr-xr-x 1 youjkim youjkim 687 2016-05-09 10:59 start.sh
-rwxr-xr-x 1 youjkim youjkim 560 2016-05-09 10:59 stop.sh
${ZODIAC_HOME} Console 명령어 확인
[session_5002]$ ./console.sh
=====zodiac session server JMX Console=====
------------------------------------------------------------
- Usage: ./console.sh \<COMMAND\> -
- \<COMMAND\> is one of the following: -
- 1. was_list -
- 2. status -
- 3. was_serverq -
- 4. was_sync -
- 	It needs WAS ID -
- 	example: ./console.sh was_sync \<was id\> -
- 5. search -
- 	It needs SESSION ID. -
- 	example: ./console.sh search \<session id\> -
------------------------------------------------------------

Application Server List

현재 Session Server에 연결된 Application Server List를 보여준다. console.sh was_list 를 실행하면 된다.

[session_5002]$ ./console.sh was_list
=====zodiac session server JMX Console=====
RUN OPERATION: getServerInfoserver= {addr:/10.77.241.102:33359, name:7a32e73d86f120461, info:{server_name=ee_8201,pid=11532,hostname=solwas3,jvmName=7a32e73d86f120461,type=INSTANCE}}

Session Server Status

현재 Session Server의 상태 값을 보여준다. console.sh status 를 실행하면 된다.

[session_5002]$ ./console.sh status
=====zodiac session server JMX Console=====
RUN OPERATION: getStatusString{request_getfresh_logout:0,session_count:0,req_lost:0,request_ getfresh_not_new:0,request_getfresh_nodata:0,request_getnew_secondary:0,session_expired:0,request_getnew_logout:0,session_timeout:1800,request_getnew_nodata:0,session_max_count:2000000,logout_from_nodes:0,pid:32705,session_recv_lost:0,logout_from_secondary:0,request_getfresh_secondary:0,request_getfresh:0,request_getnew:0,logout_count:0,data_from_nodes:0,resp_lost:0,request_getfresh_data:0,data_from_secondary:0}

Session Server ServerQ Status

Zodiac Session Server의 ServerQ 상태를 보여준다. ServerQ는 Session Server에 연결된 Application Server의 접속을 관리하는 모듈이다. 여기서 보여주는 데이터는 Application Server 에서 보내는 Session 정보(data)와 Request 정보(Request)를 담는 Queue 정보이다. console.sh was_serverq 를 실행하면 된다.

[session_5002]$ ./console.sh was_serverq
=====zodiac session server JMX Console=====
PRINT ATTRIBUTEdataQ.size: 0requestQ.size: 0dataQ.overCnt: 0requestQ.overCnt: 0

입력한 Session ID와 일치하는 Session을 가지고 있는 Application Server List 를 보여준다. console.sh search [Session ID] 를 실행하면 된다.

[session_5002]$ ./console.sh search 8E9D290452E6C9B4D35A43E17C484A58.6ef7931859a220461
=====zodiac session server JMX Console=====
RUN OPERATION: search{6ef7931859a220461 /10.77.241.100:53046={lastAccessTime=145974562469 3,attr={selectedMenuId=[B@474785b9,selectedTopMenu=[B@289c593e,loginUser=[B@30a70a46,lastUpdateTime=1459745448906createTime=1459744140084}}

Application Server Session Sync

Application Server의 Session 정보를 Session Server로 sync하는 경우 실행한다. console.sh was_sync [Application Server Name(was_list에서 name으로 출력되는 값)]

[session_5002]$ ./console.sh was_list
=====zodiac session server JMX Console=====
RUN OPERATION: getServerInfoserver= {addr:/10.77.241.102:33359, name:7a32e73d86f120461, info:{server_name=ee_8201,pid=11532,hostname=solwas3,jvmName=7a32e73d86f120461,type=INSTANCE}}
[session_5002]$ ./console.sh was_sync 7a32e73d86f120461
=====zodiac session server JMX Console=====
RUN OPERATION: serverSyncsync complete

Session Server failover

Session Server는 Primary/Secondary로 구성되어있고, 실시간으로 Session 정보를 동기화된다. Application Server는 Primary/Secondary Session Server와 접속을 유지하고 있기 때문에 Primary Session Server 장애가 생겼을 경우, 장애 감지 시점 이후부터 Secondary Session Server로 Failover 된다.