제2장 사용 및 관리

본 장에서는 RCA 시스템을 사용하기 위한 Tmax 환경설정 과정과 관리 툴을 이용하는 방법에 대해서 설명한다.

2.1. 환경설정

제공되는 파일을 각각의 디렉터리에 알맞은 명칭으로 변경하여 복사한다. 아래의 예는 Tmax 3.7.6을 기준으로 한다.

Directory파일명
$TMAXDIR/binrcal
$TMAXDIR/binrcastat
$TMAXDIR/binrcakill
$TMAXDIR/liblibrcah.so
$TMAXDIR/usrincrca.h

환경변수 설정

RCA 에서 사용되는 환경변수는 다음과 같다. 각 플랫폼에 맞게 설정한다.

환경변수설명
RCA_DIRRCAH가 설치되어 실행되는 홈 디렉터리의 절대 경로를 지정한다. RCAL은 RCA_DIR로 정의된 디렉터리에서 RCAH를 찾아 실행시킨다.
RCA_SHMKEYRCAL과 RCAH 프로세스 사이에서 정보 공유를 위해 사용하는 공유 메모리 Key 값이다. (기본값: 74565)
RCA_NRCAHRCAH 모듈의 수를 지정한다. (기본값: 4, 최댓값: 500)
RCA_NTHRRCAH 마다 관리할 스레드 개수를 지정한다. (기본값: 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.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.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.1. 환경설정”을 참고한다.

2.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] 옵션은 로컬 모드인 경우와 동일하며 환경변수에 대한 자세한 내용은 “2.1. 환경설정”를 참고한다.

2.3. 시스템 관리

본 절에서는 시스템 관리를 위한 기동 및 종료, 모니터링, 장애 대책 방법에 대해 설명한다.

2.3.1. 기동 및 종료

RCA는 멀티 스레드 클라이언트로 기동되어 처리된다. 리모트 모드인 경우에는 관리자가 직접 기동시켜야 하지만 로컬 모드인 경우에는 Tmax 시스템의 서버 프로세스의 형태로 등록되기 때문에 Tmax 시스템과 함께 기동 및 종료될 수 있다. 일반 서버 프로세스와 같이 [-s] 옵션을 사용하여 별도로 기동 및 종료될 수도 있다.

RCA 기동 및 종료는 tmboottmdown 명령을 사용한다. 다음은 명령 사용에 대한 예제이다.

$ 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 장애 대책에 대한 자세한 내용은 “2.4. 장애 대책”을 참고한다.

2.3.2. 모니터링

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_dirRCAH 실행 파일과 통신용 파이프가 생성될 디렉터리이다.
    rca_mode현재 사용되고 있는 모드 정보이다.
    rca_port사용 가능한 포트 번호이다.
    rcal_nameRCAL의 이름이다.
    rcal_pidRCAL의 pid이다.
    rcah_nameRCAH의 이름이다.
    shmkeyRCA에서 사용하고 있는 공유 메모리 키값이다.
    shmsize공유 메모리 크기이다.
    #rcah사용되고 있는 RCAH의 개수이다.
    #thread per rcah하나의 RCAH당 기동되어 있는 스레드 개수이다.
    rcah_noRCA 내부적으로 관리되는 번호이며 각각의 RCAH별로 별도의 값이다.
    pidRCA에 기동되어 있는 RCAH별 pid이다.
    #client클라이언트의 수이다.

    명령어를 사용해서 조회되는 시스템 설정 정보는 다음과 같다.

    $ rcastat
        rcastat: RCA_SHMKEY env is not set, using default shmkey (74565)

2.4. 장애 대책

2.4.1. rcakill

RCA를 종료하고자 하는 경우 RCA가 사용하는 자원을 제거하기 위하여 사용한다.

  • 사용 방법

    rcakill [-h] [-p pid] [-n rcah_no] [-k shmkey]
    항목설명
    [-h]도움말을 조회한다.
    [-p pid]pid를 통한 특정 RCAH에 대한 상태 정보를 지운다.
    [-n rcah_no]RCAH 번호를 통한 특정 RCAH에 대한 상태 정보를 지운다.
    [-k shmkey]RCA가 사용하는 공유 메모리 키값의 정보를 지운다.