사용 및 관리
본 장에서는 RCA 시스템을 사용하기 위한 Tmax 환경설정 과정과 관리 툴을 이용하는 방법에 대해서 설명한다.
1. 환경설정
제공되는 파일을 각각의 디렉터리에 알맞은 명칭으로 변경하여 복사한다. 아래의 예는 Tmax 3.7.6을 기준으로 한다.
Directory | 파일명 |
---|---|
$TMAXDIR/bin |
rcal |
$TMAXDIR/bin |
rcastat |
$TMAXDIR/bin |
rcakill |
$TMAXDIR/lib |
librcah.so |
$TMAXDIR/usrinc |
rca.h |
환경변수 설정
RCA 에서 사용되는 환경변수는 다음과 같다. 각 플랫폼에 맞게 설정한다.
환경변수 | 설명 |
---|---|
RCA_DIR |
RCAH가 설치되어 실행되는 홈 디렉터리의 절대 경로를 지정한다. RCAL은 RCA_DIR로 정의된 디렉터리에서 RCAH를 찾아 실행시킨다. |
RCA_SHMKEY |
RCAL과 RCAH 프로세스 사이에서 정보 공유를 위해 사용하는 공유 메모리 Key 값이다. (기본값: 74565) |
RCA_NRCAH |
RCAH 모듈의 수를 지정한다. (기본값: 4, 최댓값: 500) |
RCA_NTHR |
RCAH 마다 관리할 스레드 개수를 지정한다. (기본값: 32, 최댓값: 60) |
RCA_PORT |
RCAL이 기존 통신 프로그램(클라이언트)으로부터 연결을 받을 포트 번호이다. 포트는 최대 32개까지 지정이 가능하다. (기본값: 8899) 예) RCA_PORT="9000 9001 9002 9003" |
LD_LIBRARY_PATH |
로컬 모드인 경우에는 LD_LIBRARY_PATH에 Tmax Library Path를 추가한다. 반면 리모트 모드의 경우에는 librcah.so가 위치하는 디렉터리를 LD_LIBRARY_PATH에 지정한다. |
다음은 로컬 모드이며 korn shell를 사용할 경우 .profile 내에 RCA 관련 환경변수를 설정한 예제이다.
<.profile>
export RCA_DIR = /usr/tmax/appbin export RCA_SHMKEY = 79800 export RCA_PORT = 2001 export RCA_NRCAH = 5 export RCA_NTHR = 25 export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:$TMAXDIR/lib
환경설정 파일 수정
RCA를 로컬 모드로 운영하는 경우에는 다음과 같이 config.m 파일의 SERVER 절에 추가한다.
<config.m >
*SVRGROUP svg1 NODENAME = "tmax1" *SERVER RCASVR SVGNAME = svg1, TARGET = "rcal", SVRTYPE = SYS_SVR, CLOPT = "-n rcah -f /tmax/rca.env", MIN = 1
rcad 모듈 작성 및 준비
Customizing된 RCAH를 RCA_DIR 환경변수에 정의된 디렉터리에 복사한다.
2. 시스템 사용
RCA를 사용하기 위해서는 먼저 RCAH를 생성해야 한다. 사용자는 thrinit(), thrmain(), thrdone()의 루틴을 구현하여 RCAH 라이브러리와 링크하여 RCAH 실행 파일을 생성한다. 이와 같이 생성된 실행 파일은 RCA_DIR 환경변수에 설정한 위치에 존재해야 한다.
함수 | 설명 |
---|---|
thrinit() |
해당 스레드가 처음 기동될 때 불려진다. 일반적으로 thrinit() 부분에서 Tmax 시스템과의 연결을 처리하며 thrdone()에서는 Tmax 시스템과의 연결 해제를 처리한다. |
thrmain() |
새로운 클라이언트 소켓이 연결될 때 해당 소켓 FD와 포트 번호를 인수로 사용해서 호출된다(${TMAXDIR}/usrinc/rca.h의 RCAINFO 구조체 참조). |
thrdone() |
해당 스레드가 종료될 때 호출된다. |
RCA의 종료는 사용하는 모드에 따라 차이가 있다. RCA가 Tmax 시스템과 같은 노드에서 운영되는 로컬 모드(Local Mode)에서는 rcakill을 사용하여 RCA를 종료시키거나 Tmax 시스템 명령어인 tmdown으로 RCA도 함께 종료시킬 수 있다. 반면 RCA가 Tmax 시스템과 다른 노드에서 운영되는 리모트 모드(Remote Mode)에서는 RCA를 별도의 명령어로 기동시켜야 하기 때문에 강제종료 또는 rcakill을 사용하여 종료한다.
RCAH을 컴파일할 때는 usrinc/rca.h가 다른 어떤 Tmax 헤더 파일들보다 먼저 include되어야 한다는 것에 주의한다. |
2.1. 로컬 모드
로컬 모드는 Tmax 시스템과 RCA 모듈이 같은 노드에 있으며, 통합 관리가 필요한 경우에 사용한다.
RCAL을 하나의 Tmax 서버 형태로 등록되어 Tmax 시스템과 연결된다. RCAL은 별도의 실행이나 종료 명령어 없이 tmboot나 tmdown으로 기동 및 종료되고 Tmax 시스템과는 Pipe 통신을 한다.
tmboot 명령어에 의해 기동된 RCAL은 환경 파일에 지정된 파일로부터 RCA_DIR 환경변수를 읽어서 통신용 Pipe와 RCAH 실행 파일의 위치를 찾는다. 만약 RCA_DIR 환경변수가 정의되지 않은 경우에는 해당 노드 Tmax 시스템의 APPDIR을 RCA_DIR로 사용한다. 따라서 RCAL은 RCA_DIR 디렉터리에 통신용 Pipe를 생성하며 RCAH를 기동시킨다. RCA의 등록은 Tmax 시스템 서버 프로세스와 동일한 방법으로 처리하며, 관리는 Tmax 시스템 클라이언트와 동일한 방법으로 처리한다.
로컬 모드의 경우 RCA는 Tmax 시스템의 서버 프로세스 형태로 제어될 수 있기 때문에 관리가 편리하며 Tmax 시스템과 Stream Pipe를 통해서 연결되기 때문에 리모트 모드의 경우보다 빠른 데이터 송수신의 효과를 볼 수 있다. RCAL을 등록하는 방법은 일반 서버 프로세스를 등록하는 방법과 유사하다.
다음과 같이 rcal이라는 이름을 가진 SYS_SVR type의 서버 프로세스를 등록한다. 로컬 모드라는 것은 자동적으로 인식된다.
*SERVER rcal SVGNAME = svg1, SVRTYPE = SYS_SVR, CLOPT = "-n rcah -f /tmax/rca.env", MIN = 1
RCAL 프로세스는 2개 이상의 프로세스가 기동되면 같은 포트를 사용하게 되므로 1개만 기동될 수 있다. |
tmboot/tmdown 명령을 사용하는 경우 서버명을 rcal 외의 다른 이름으로 하고 싶은 경우에는 다음과 같이 지정한다.
*SERVER RCASVR SVGNAME = svg1, TARGET = "rcal", SVRTYPE = SYS_SVR, CLOPT = "-n rcah -f /tmax/rca.env", MIN = 1
다음은 CLOPT 항목의 설정 옵션에 대한 설명이다.
옵션 | 설명 |
---|---|
[-n] |
RCAH 실행 파일명을 지정한다. (기본값: rcah) |
[-f] |
RCA에서 사용할 환경 파일을 지정한다. (기본값: 없음) [-f] 옵션으로 설정될 파일은 RCA를 동작시키기 위한 기본적인 정보로 올바른 동작을 보장하기 위해서는 RCA를 기동시키 전에 설정해야 한다. 이에 대한 자세한 내용은 환경설정을 참고한다. |
2.2. 리모트 모드
리모트 모드는 RCA 모듈을 Tmax 시스템과는 별도로 관리하고 싶을 때 사용하는 방식으로, 일반 Tmax 클라이언트 모듈과 동일한 방식(TCP/IP 소켓)으로 Tmax에 접속한다. TMAX_HOST_ADDR, TMAX_HOST_PORT, TMAX_BACKUP_ADDR, TMAX_BACKUP_PORT, TMAX_CONNECT_TIMEOUT 등을 사용하여 접속한다. 리모트 모드의 경우에는 RCAL를 별도로 구동시켜야 한다.
다음은 리모트 모드의 실행 방법으로 로컬 모드에 대해서는 적용할 수 없다.
-
사용 방법
$ rcal [-n RCAH_NAME] [-f ENV_FILE ] [-m MODE]
항목 설명 [-n RCAH_NAME]
RCAH 실행 파일명을 지정한다. (기본값: rcah)
[-f ENV_FILE]
RCA에서 사용할 환경 파일을 지정한다. (기본값: 없음)
[ -m MODE]
로컬 모드와 리모트 모드 중 원하는 모드를 선택한다.
-
0 : 리모트 모드(기본값)
-
1 : 로컬 모드(Tmax 3.7.6에서는 지원하지 않음)
-
[-n]과 [-f] 옵션은 로컬 모드인 경우와 동일하며 환경변수에 대한 자세한 내용은 환경설정을 참고한다. |
3. 시스템 관리
본 절에서는 시스템 관리를 위한 기동 및 종료, 모니터링, 장애 대책 방법에 대해 설명한다.
3.1. 기동 및 종료
RCA는 멀티 스레드 클라이언트로 기동되어 처리된다. 리모트 모드인 경우에는 관리자가 직접 기동시켜야 하지만 로컬 모드인 경우에는 Tmax 시스템의 서버 프로세스의 형태로 등록되기 때문에 Tmax 시스템과 함께 기동 및 종료될 수 있다. 일반 서버 프로세스와 같이 [-s] 옵션을 사용하여 별도로 기동 및 종료될 수도 있다.
RCA 기동 및 종료는 tmboot와 tmdown 명령을 사용한다. 다음은 명령 사용에 대한 예제이다.
$ tmboot -s rcal
$ tmdown -s rcal
RCA 모듈은 기동되면서 thrinit() 루틴을 호출한다. 따라서 일반적으로 thrinit() 부분에 초기화에 관한 내용을 설정한다. thrinit()에서 설정하는 초기화에 관한 주된 작업은 Tmax 시스템과 연결을 맺는 것이다. 따라서 RCAH에 속하는 각각의 스레드는 기동과 동시에 Tmax 시스템과 연결을 맺고 클라이언트의 요청이 발생하는 시점에는 서비스만을 처리하게 된다. 실질적인 서비스 처리는 thrmain() 부분에 설정한다.
RCAH를 생성하고 5초가 지난 후에도 RCAL에 어떤 RCAH도 등록하지 않는 경우와 같이 RCAL이 RCAH를 구동시키다 실패하면 RCAL이 에러 메시지와 함께 종료된다. (에러 번호 [RCAL0002]).
RCA 모듈이 종료되면 thrdone() 루틴을 호출하게 된다. 따라서 이 루틴에서는 자원 해제와 같은 최종적인 작업을 처리한다. thrdone()에서 설정하게 되는 자원 해제의 대표적인 경우는 Tmax 시스템과 연결을 해제하는 것이다. 이 경우 주의할 점은 Tmax 시스템을 다운시키는 경우에는 thrdone()에서 Tmax 시스템에 관련된 함수 호출은 이루어질 수 없다. 왜냐하면 Tmax 시스템에게 RCA는 클라이언트 프로세스 형태로 관리되기 때문에 Tmax 시스템은 종료할 때 RCA와의 연결을 별도로 관리하지 않기 때문이다.
RCA는 장애 대책을 지원하기 위해 tmdown으로 정상적으로 시스템을 다운시킨 경우에도 공유 메모리가 삭제되지 않는다. 만약 공유 메모리를 삭제하려면 rcakill 명령어로 RCA를 다운시키면 된다. RCA 장애 대책에 대한 자세한 내용은 장애 대책을 참고한다.
3.2. 모니터링
3.2.1. rcastat
RCA는 Tmax 시스템 입장에서는 클라이언트 프로세스로 관리되기 때문에 Tmax 시스템 관리 툴인 tmadmin으로 모니터링이 가능하다. Tmax에서는 RCA를 모니터링하기 위한 rcastat이라는 별도의 툴을 제공한다. 툴을 사용해서 관리자는 현재 RCA의 설정 내용을 확인할 수 있으며 현재 RCA에 접속한 클라이언트의 수 등을 모니터링 할 수 있다.
다음은 명령어 사용법에 대한 설명이다.
-
사용 방법
$ rcastat [-h] [-p pid] [-n rcah_no] [-k shmkey]
항목 설명 [-h]
도움말을 조회한다.
[-p pid]
pid를 통한 특정 RCAH에 대한 상태 정보를 출력한다.
pid가 지정되지 않는다면 RCA에서 동작하고 있는 모든 RCAH에 대한 정보를 출력한다.
[-n rcah_no]
RCAH 번호를 통한 특정 RCAH에 대한 상태 정보를 출력한다.
rcah_no가 지정되지 않는다면 RCA에서 동작하고 있는 모든 RCAH에 대한 정보를 출력한다.
[-k shmkey]
RCA가 사용하는 공유 메모리 키값을 설정한다.
공유 메모리 키값이 지정되지 않는 경우에는 사용자 시스템 환경변수에서 설정된 RCA_SHMKEY 값을 읽어 들이며. 만약 시스템 환경변수에도 설정되어 있지 않다면 기본값인 74565가 사용된다. 잘못된 키값을 입력하는 경우에는 올바른 정보를 출력할 수 없다.
-
예제
------------------------------------------------ rca_dir: /user/tmax/server/ rca_mode: Local rca_port: 8123 rcal_name: rca rcal_pid: 1722 rcah_name: rcah shmkey: 74565, shmsize: 4832 #rcah: 2, #thread per rcah: 60 ------------------------------------------------ rcah_no pid #client ------------------------------------------------ 0 1724 0 1 1723 0 ------------------------------------------------
출력 항목명 설명 rca_dir
RCAH 실행 파일과 통신용 파이프가 생성될 디렉터리이다.
rca_mode
현재 사용되고 있는 모드 정보이다.
rca_port
사용 가능한 포트 번호이다.
rcal_name
RCAL의 이름이다.
rcal_pid
RCAL의 pid이다.
rcah_name
RCAH의 이름이다.
shmkey
RCA에서 사용하고 있는 공유 메모리 키값이다.
shmsize
공유 메모리 크기이다.
#rcah
사용되고 있는 RCAH의 개수이다.
#thread per rcah
하나의 RCAH당 기동되어 있는 스레드 개수이다.
rcah_no
RCA 내부적으로 관리되는 번호이며 각각의 RCAH별로 별도의 값이다.
pid
RCA에 기동되어 있는 RCAH별 pid이다.
#client
클라이언트의 수이다.
명령어를 사용해서 조회되는 시스템 설정 정보는 다음과 같다.
$ rcastat rcastat: RCA_SHMKEY env is not set, using default shmkey (74565)
4. 장애 대책
-
RCAH 장애
개발자가 직접 작성한 프로그램에 의해서 생성되는 RCAH는 프로그램 버그로 인하여 다운되는 경우가 발생할 수 있다.
RCAH에 클라이언트가 연결된 상태에서 RCAH가 다운되면 RCAL이 RCAH를 재기동시킨다. 그러나 RCAH에 클라이언트가 연결되지 않은 상황에서 RCAH가 다운되면 재기동시키지 않는다. 가장 빈번하게 발생할 수 있는 경우로, 이와 같이 RCAH가 다운되는 경우에는 개발자가 작성한 프로그램에 의해 문제가 발생한 것이기 때문에 RCAH에 대한 디버깅이 필요하다. 하지만 재기동된 RCAH가 실패한 업무를 다시 수행하지는 않는다.
-
RCAL 장애
관리자의 실수로 인하여 RCAL을 종료시키는(tmdown) 경우에 RCAH는 클라이언트가 접속되어 있는 한 계속 수행한다.
그러나 클라이언트가 연결되어 있지 않는 RCAH는 RCAL이 사라지면 자동으로 종료된다. 이를 위해 RCA가 사용하는 공유 메모리는 RCAL이 다운되어도 삭제되지 않는다. 이를 제거하려면 사용자가 ipcrm을 사용해야 한다. 단 rcakill을 사용하여 RCA를 다운시키는 경우에는 공유 메모리를 자동으로 삭제한다. 만약 RCAH 내의 스레드가 다운되는 경우 restart를 시킨다.
클라이언트와의 접속이 해제되고 업무의 수행을 완료하면 RCAH도 종료된다. 하지만 RCAL이 장애가 발생한 경우 새로운 클라이언트는 접속할 수 없다. 이 경우에는 RCAL은 재기동시켜야 한다.