기동 및 종료

본 장에서는 다양한 환경에서 Tmax 시스템의 기동과 종료 방법에 대하여 설명한다.

1. Tmax 기동

Tmax를 실행하기 위한 환경이 갖춰진 후 관리자는 Tmax 시스템을 기동(boot)할 수 있다. Tmax 시스템이 기동되면 시스템 소프트웨어의 특성상 아주 치명적인 원인(하드웨어 장애, 운영체제의 오류 등 외부적인 요인) 이외에는 비정상적으로 종료되지 않는다. 그러나 관리 측면에 있어서는 환경 파일의 재작성, 외부요소에 의한 시스템 비정상 종료 등의 이유로 시스템의 재기동이 필요할 수 있다.

Tmax 시스템을 기동하기 위해서는 기본 환경설정이 잘 갖추어져 있어야 한다. 시스템을 기동하기 전 다음 사항을 확인한다.

  • 이진 Tmax 환경 파일이 존재하는가?

  • 환경 파일의 NODE 절 TMAXDIR 항목에 설정된 디렉터리에 Tmax 실행 프로그램(TMM, CLL, CLH, TMS 등)이 존재하는가?

  • 환경 파일의 NODE 절 APPDIR 항목에 설정된 디렉터리에 SERVER 절에 등록된 서버 프로그램들이 존재하는가?

  • 중앙 관리를 위한 racd가 각 노드에서 동작 중인가?

일반적으로 Tmax 시스템은 여러 노드로 구성되며 이에 대한 중앙 관리가 필요하다. 중앙 관리를 위해서 Tmax 시스템에서는 racd(remote access control daemon)를 사용한다. 각 노드에 racd를 미리 설치해서 한 노드에서 전체 Tmax 시스템을 관리할 수 있으며 1번의 명령으로 환경 파일 컴파일, Tmax 시스템 기동 및 종료, 동적 환경 파일 변경 등이 가능해진다.

환경변수에 TMAX_RAC_PORT가 정의되어 있어야 racd가 기동된다. 중앙 관리에 사용된 racd의 포트 번호를 정의하고 "racd –k"를 사용해 racd를 기동하면 Tmax 환경 파일에서의 환경변수를 참조하지 않고 시스템을 기동할 수 있다.

1.1. racd

멀티 노드로 분산된 환경에서 각 노드를 중앙 관리하기 위한 명령어이다. racd는 여러 노드를 하나의 도메인으로 Tmax 시스템을 구축한 경우 한 노드에서 Tmax 시스템을 집중 관리하기 위해 각각의 노드에서 미리 기동되는 데몬 프로세스이다. Tmax 시스템을 관리하는 노드에서는 racd를 실행하지 않아도 된다.

racd는 도메인 내의 한 노드에서 tmadmin을 통하여 전체 노드를 관리하거나 또는 cfl로 환경 파일을 도메인 내의 모든 노드에 동일한 내용으로 적용 가능하도록 처리한다.

아래는 racd의 특징에 대한 추가 설명이다.

  • racd를 통해 tmdown, tmboot 명령어를 실행한 뒤 종료할 때까지 기본 60초를 대기하며, clh와 tdl 요청은 완료될 때까지 무제한 대기한다.

  • racd에서 명령 실행 중에 타임아웃이나 에러가 발생하면 cfl, tmboot, tmdown, racdr 유틸리티에서 이와 관련된 내용을 출력한다.

  • racd를 통해 실행한 cfl 에서 SIGPIPE가 발생하더라도 이를 무시한다.

IP 버전이 IPv6이거나 InfiniBand의 SDP(Socket Direct Protocol)일 경우에는 환경 파일에 다음을 반드시 지정해야 한다.

SYSTEM_PROTOCOL="IPV6"
SYSTEM_PROTOCOL="SDP"

만약 racd를 -k 옵션과 함께 사용한다면 환경변수에 다음을 지정해야 한다.

TMAX_RAC_IPV6="IPV6"
TMAX_RAC_IPV6="SDP"

다음은 명령어 사용법에 대한 설명이다.

  • 사용 방법

    $ racd [-d] [-f 이진 Tmax 환경파일명] [-h] [-k] [-i filename] [-l label]
           [-P umask] [-V] [-t wait_time]
    항목 설명

    [-d]

    디버그 모드로 racd를 수행할 때 설정한다.

    [-f 이진 Tmax 환경파일명]

    참조할 이진 Tmax 환경 파일명을 설정한다.

    cfl의 결과로 tmboottmdown에서도 참조되는 파일이다. 경로와 함께 지정될 수 있으며, 이 옵션이 생략되면 기본적으로 TMAXDIR로 지정된 디렉터리 하위의 config 디렉터리에서 tmconfig를 참고한다.

    tmboot, tmdown 명령어의 자세한 내용은 tmboot, tmdown의 설명을 참고한다.

    [-h]

    명령어 도움말 옵션이다.

    [-k]

    이진 Tmax 환경 파일의 참조 여부를 설정한다.

    옵션을 지정하면 이진 Tmax 환경 파일을 참조하지 않는다. 보통 racd는 이 옵션을 이용하여 실행한다. (passive listen mode)

    만약 IP 버전이 IPv6이거나 InfiniBand의 SDP(Socket Direct Protocol)일 경우에는 이 옵션을 사용할 경우 환경 파일을 참조하지 않기 때문에 환경변수에 'TMAX_RAC_IPV6=IPV6' 또는 'TMAX_RAC_IPV6=SDP’를 반드시 지정해야 한다.

    [-i filename]

    하나의 물리적 머신에서 여러 논리적 노드를 정의할 때 사용한다.

    논리 노드의 NODETYPE이 SHM_RACD일 경우 각 논리 노드당 하나씩의 racd를 실행해야 하며 RACPORT는 모두 달라야 한다.

    racd를 실행하기 전에 환경변수의 TMAX_RAC_PORT 변수를 설정해야 하는데, 논리 노드의 수가 많을 경우 이를 일일이 모두 변경할 수 없으므로 TMAXHOME, TMAXDIR, TMAX_RAC_PORT가 정의된 파일명을 지정할 수 있다. 자세한 내용은 예제를 참고한다.

    논리 노드 설정에 대한 자세한 내용은 Tmax Administration Guide의 NODE 절 에서 HOSTNAME 항목을 참고한다.

    [-l label]

    Label은 파일 내에 등록된 환경 정보의 구분자이다. 2개 이상의 시스템 정보를 하나의 파일에 등록할 경우에 각각의 시스템을 구별할 수 있는 값이다.

    [-P umask]

    racd를 통해 기동되는 프로세스의 경우 umask를 사용자가 설정하여 원하는 권한의 파일을 생성할 수 있도록 한다.

    [-V]

    실행 파일의 버전을 확인할 수 있다.

    [-t wait_time]

    racd를 통해 tmdown, tmboot 명령어를 실행한 뒤 종료시까지의 대기시간을 조절하는 옵션이다.

    음수를 설정하면 무제한 대기하며, 0은 지정이 불가하다. 1부터 지정한 값만큼 대기하게 된다.

  • 적용 환경

    Tmax가 설치된 운영 시스템 환경에서 사용할 수 있다.

  • 예제

    • 다음은 racd에 [-P] 옵션을 지정하여 원하는 umask를 설정하는 예제이다.

      <tmax.racd>

      [tmaxs1]
      TMAXHOME = /user2/starbj81/tmax32
      TMAXDIR = /user2/starbj81/tmax32
      TMAX_RAC_PORT = 3333
      
      [NODE1]
      TMAXHOME = /user2/starbj81/tmax32
      TMAXDIR = /user2/starbj81/proj1
      TMAX_RAC_PORT = 4335
      
      [NODE2]
      TMAXHOME = /user2/starbj81/tmax32
      TMAXDIR = /user2/starbj81/proj2
      TMAX_RAC_PORT = 4337
      1. 환경 파일을 작성한다.

        *DOMAIN
        tmax1      SHMKEY = @SHMEMKY@, MINCLH = 1, MAXCLH = 3,
                   TPORTNO = @TPORTNO@, BLOCKTIME = 30, RACPORT = 3255
        
        *NODE
        @HOSTNAME@ TMAXDIR = "@TMAXDIR@",
                   APPDIR = "@TMAXDIR@/appbin",
                   PATHDIR = "@TMAXDIR@/path",
        
        @RMTNAME@  TMAXDIR = "@RMTDIR@",
                   APPDIR = "@RMTDIR@/appbin",
                   PATHDIR = "@RMTDIR@/path",
        
        *SVRGROUP
        svg1       NODENAME = "@HOSTNAME@", COUSIN = "svg2"
        svg2       NODENAME = "@RMTNAME@"
        
        *SERVER
        svr2       SVGNAME = svg1, CLOPT = "-o $(SVR).out -e $(SVR).err"
        
        *SERVICE
        TOUPPER    SVRNAME = svr2
      2. 리모트 노드에 racd를 기동한다.

        $ export TMAX_RAC_PORT = 3255
        $ racd –k –P 055
      3. HOST 노드에서 전체 Tmax를 기동한다. (tmboot)

      4. RMT 노드의 ULOGDIR에 svr2.out의 파일 권한을 확인한다.

    • 다음은 NODE1의 RACD를 실행시키는 예제이다.

      $ racd -k -i tmax.racd -l NODE1
    • 다음은 환경 파일을 참조하지 않고 다른 명령어(tmboot)에서 사용한 정보만 이용하는 예제이다.

      $ racd -k

1.2. tmboot

Tmax 시스템의 전체나 또는 일부분을 실행시키는 명령어로 Tmax 환경 파일을 바탕으로 시스템을 실행한다. 옵션 없이 실행되거나 [-f] 옵션만이 사용되면, 모든 Tmax 관리 프로세스들과 Tmax 환경 파일의 SERVER 절에 등록된 모든 서버 프로세스들을 실행시킨다.

NODE 절에 등록된 모든 노드에서 Tmax 관리 프로세스인 TMM, CLL, CLH 프로세스가 순서대로 실행된다. SVRGROUP 절에 OPENINFO 항목이 등록된 서버 그룹이 존재한다면, 각 서버 그룹별로 TMSNANEMINTMS 항목을 참조하여 TMS 프로세스들이 실행된다. Tmax 관리 프로세스들은 노드별로 정의된 TMAXDIR 디렉터리 하위의 bin 디렉터리에서 실행된다.

Tmax 관리 프로세스들이 생성된 후에는 SERVER 절의 모든 응용 서버 프로세스들이 실행된다. 응용 서버 프로세스들은 SERVER 절에 등록된 순서대로 실행된다. tmboot는 실행된 서버 프로세스의 초기화를 실행한 후에 다음 서버 프로세스를 실행시킨다. 프로세스 초기화는 tpsvrinit()를 이용해서 진행한다. 모든 서버 프로세스들이 초기화를 모두 완료할 때까지 다음 프로세스가 실행되지 않는다. tmboot는 각 응용 서버 프로세스들을 그들의 MIN 항목에 정의된 개수만큼 실행시킨다. MIN 항목이 정의되지 않은 경우 기본값은 1개이다.

tmboot는 SERVER 절의 서버들에 대하여 CLOPT, MIN, MAX 항목의 값을 사용한다. 서버 프로세스가 실행될 때 tmboot에 의해 사용되는 서버의 boot 파라미터이며, 서버의 나머지 항목들은 서버가 실행된 후 시스템에 의해 실행되는 runtime 파라미터이다. 설정 정보는 소스 설정 파일의 SERVER 절을 참고한다.

모든 응용 서버 프로세스들은 동작하는 노드에 정의된 APPDIR 디렉터리에서 실행된다.

다음은 명령어 사용법에 대한 설명이다.

  • 사용 방법

    $tmboot [-A] [-b] [-c] [-f 이진 Tmax 환경파일명]
            [-g servergroup_name [-i] [-s] [-S]} [-h] [-V] [-n node_name]
            [-o clopt_string] [-q rq_svg_name] [-s server_name [-k count] [-a]]
            [-S server_name [-a]] [-t tms_name [-k all]] [-B trb_node] [-T] [-w]
            [-d boot_time] [-W] [-D] [-e clh | cas | tlm] [-R]
    항목 설명

    [-A]

    Tmax 환경 파일의 SERVER 절에 정의된 모든 응용 서버 프로세스를 실행하는 옵션이다.

    [-b]

    백업으로 지정된 서버 프로세스를 임의로 기동시킬 때 사용하는 옵션이다.

    [-c]

    CLH 프로세스를 하나 더 실행시키는 옵션이다.

    현재 동작 중인 CLH 프로세스 개수가 Tmax 환경 파일에 정의된 MAXCLH 값을 넘지 않는 범위 내에서만 사용 가능하다.

    [-f 이진 Tmax 환경파일명]

    참조할 이진 Tmax 환경 파일(소스 설정 파일을 cfl로 컴파일한 결과물)을 경로와 함께 지정해야 한다.

    [-f] 옵션이 생략될 경우 기본으로 TMAXDIR 디렉터리 하위의 config 디렉터리에서 tmconfig 파일을 참조한다.

    [-g servergroup_name [-a] [-i] [-s] [-S]]

    지정된 서버 그룹에 존재하는 서버 프로세스를 실행하는 옵션이다. 사용되는 서버 그룹명은 Tmax 환경 파일 내의 SVRGROUP절에 등록한다.

    [-a] 옵션을 함께 사용하면 서버의 기동을 TMBOOT 프로세스가 아닌 TMM 프로세스에 위임한다.

    [-i] 옵션을 함께 사용하지 않는다면 기본적으로 서버를 부팅시키는 과정에서 기동 과정 중간에 이미 max에 도달한 서버가 있을 때 전체 기동 과정이 중지된다. 그러나 [-i] 옵션을 함께 사용하면 max에 도달한 서버가 있더라도 다음 서버들을 기동할 수 있도록 중지하지 않고 계속 진행하게 된다. 대신 모든 서버들이 max에 도달했을 경우에는 다음과 같은 메시지를 출력한다.

    (I) BOOT3022 all servers in group (svgname) reached max [BOOT0039]

    [-s] 또는 [-S] 옵션과 함께 사용하면, 지정된 서버 그룹 내에서 지정한 서버명을 가진 프로세스만을 대상으로 기동된다.

    [-h]

    명령어 도움말 옵션이다.

    [-V]

    실행 파일의 버전을 확인할 수 있다.

    [-n node_name ]

    지정된 노드에 존재하는 서버 프로세스들을 실행시키는 옵션이다. 노드명은 Tmax 환경 파일 내의 NODE 절에 미리 등록되어 있어야 한다.

    [-o clopt_string]

    CLOPT string을 추가하기 위한 옵션이다.

    [-q rq_svg_name]

    RQS를 시동시키기 위한 옵션이다.

    [-s server_name [-k count] [-a]]

    지정된 서버 프로세스만을 실행시키는 옵션이다.

    사용되는 서버 프로세스명은 Tmax 환경 파일 내의 SVRGROUP 절에 미리 정의되어 있어야만 한다.

    [-k] 옵션을 함께 사용하여 서버 프로세스 개수를 지정할 수 있다. 서버 프로세스 개수는 현재 실행되어 있는 개수를 포함하여 SERVER 절의 MAX 항목에 정의된 개수를 넘어서는 안 된다. 만약 이미 기동된 서버 프로세스들이 존재한다면, [-k] 옵션으로 지정한 값이 그보다 클지라도 MAX를 넘지 않는 선까지만 추가로 기동한다.

    [-k] 옵션을 생략하면 해당 서버 프로세스는 하나만 실행된다. 만약 [-a] 옵션을 함께 사용하면 서버의 기동을 TMBOOT 프로세스가 아닌 TMM 프로세스에 위임한다.

    [-S server_name [-a]]

    지정된 서버 프로세스를 MIN 개수만큼 실행시키는 옵션이다. 만약 남은 slot보다 MIN 개수가 더 크다면 MAX를 넘지 않는 선까지만 추가로 기동한다.

    [-a] 옵션을 함께 쓰면 서버의 기동을 TMBOOT 프로세스가 아닌 TMM 프로세스에 위임한다.

    [-g] 옵션과 함께 쓰면 지정한 서버 그룹에 대해서만 기동되며, [-g] 옵션을 사용하지 않으면 동일한 서버명을 가진 모든 서버 그룹을 대상으로 하여 기동된다.

    [-t tms_name [-k all]]

    지정된 TMS 프로세스를 하나 더 실행시키기 위한 옵션이다.

    Tmax 환경 파일에 정의된 MAXTMS 값을 넘지 않을 경우에만 가능하다.

    [-k all]은 트랜잭션 Recovery 기능을 사용할 경우 필요한 옵션이다. 그룹 전체를 종료했다가 기동할 경우 Recovery가 수행되기 때문에 Recovery는 TMS 그룹 단위로 가능하다. 특정 이름을 가진 TMS 전체를 기동/종료할 경우 이 옵션을 사용할 수 있다.

    [-B trb_node]

    TRB 노드를 기동시킨다.

    [-T]

    Tmax 시스템 프로세스(TMM, CLL, CLH, TMS)만을 실행시키는 옵션이다.

    [-w]

    옵션이 없는 경우에는 등록된 서버 프로세스를 동시에 기동시킨다. 이 경우 운영체제에 따라 동시에 리소스를 만들어내지 못해 서버 프로세스가 올바르게 기동되지 못하는 경우가 발생한다. 이러한 문제를 해결하기 위해 프로세스를 하나씩 기동시켜 올바르게 기동시키는 옵션이다.

    • 서버 프로세스들이 TMM에 접속할 때 LOCK 사용 조건 (LOCK|NOLOCK)

    • 서버 프로세스가 기동될 때 WAIT 조건 (NO-WAIT|FINITE-WAIT)

      • "-d -1000000 (1sec)"와 동일한 효과를 가진다.

      • [-d] 옵션이 없는 경우에만 의미가 있다.

      • [–d] 옵션이 사용되면 [–w] 옵션은 무시된다.

    [-d boot_time]

    한 번에 많은 서버 프로세스를 기동시킬 때 CLH로의 등록요구가 폭주하여 생기는 문제를 해결하기 위해 서버 프로세스들이 기동하는 데 걸리는 총 시간을 지정하여 등록 간격을 조절할 수 있다.

    (기본값: LOCK, NO-WAIT, 단위: usec)

    • 서버 프로세스들이 TMM에 접속할 때 LOCK 사용 조건 (LOCK|NOLOCK)

    • 서버 프로세스 기동될 때 WAIT 조건 (NO-WAIT|FINITE-WAIT)

      • -d val < 0 : LOCK, |VAL| FINITE-WAIT *

      • -d val = 0 : NO-LOCK, NO-WAIT

      • -d val > 0 : NO-LOCK, |VAL| FINITE-WAIT

      • 기본적으로 [–d] 옵션의 val이 0이 아닌 경우 절대값(|VAL|)을 사용하며 단위는 usec이다.

    • FINITE-WAIT의 경우 |VAL| 값은 각 프로세스마다 최대의 WAIT시간이다. (전체 프로세스의 총 WAIT 시간이 아님)

    • 서버 프로세스가 signal을 줄 경우 WAIT은 해제된다. 즉, |VAL| 시간이 되지 않더라도 signal을 받으면 다음 프로세스의 기동을 시도한다. VAL이 음수인 경우 LOCK을 사용한다. 이 옵션이 사용되었을 경우 [-w] 옵션은 무시된다.

    [-D]

    [-d] 옵션과 거의 유사하지만 finite-wait될 때 signal이 오더라도 |VAL|까지는 무조건 WAIT한다.

    [-W]

    tmboot를 수행하는 경우 현재 기동 중인 서버 프로세스가 완전히 기동이 될 때까지 다음 프로세스를 기동시키지 않고 대기한다.

    [-e clh|cas|tlm|tsm]

    Tmax 엔진 프로세스 중 CLH, CAS, TLM을 부팅하기 위한 옵션으로 tmboot할 경우에 문제가 발생했거나, kill로 인하여 잘못하여 엔진 프로세스가 비정상 종료된 경우에 사용한다. tmdown에서는 이 옵션을 제공하지 않는다.

    • clh : CLH를 부팅한다.

    • cas : CAS를 부팅한다.

    • tlm : TLM을 부팅한다.

    • tsm : TSM을 부팅한다.

    [-R]

    리모트 셸(rsh 또는 remsh)을 사용하여 리모트 노드의 Tmax 시스템을 부팅시키는 경우 [-R] 옵션을 사용한다. 이 옵션을 사용하게 되면 tmboot로 기동되는 프로세스에게 tmboot의 stdin/stdout이 상속되지 못하도록 처리한다.

    • 사용 방법

      (remote)
       rsh $HOSTNAME tmboot.sh
       - tmboot.sh
       TMAXDIR=/data3/starbj81/tmax64; export TMAXDIR
       PATH=$PATH:$TMAXDIR/bin; export PATH
       export LD_LIBRARY_PATH=$LIBPATH:$TMAXDIR/ (BIT)
       export LIBPATH=$LIBPATH:$TMAXDIR/ (BIT)
       exec tmboot -R
       echo "tmboot success"
       exit 0
  • 적용 환경

    Tmax 시스템이 설치된 운영 시스템 환경에서 사용할 수 있다.

  • 예제

    • 다음은 TMAXDIR 디렉터리 하위의 config 디렉터리에 있는 tmconfig 파일을 참조하여 Tmax 프로세스와 응용 서버 프로세스들을 모두 실행하는 예제이다.

      $ tmboot
    • 다음은 tms_name으로 생성된 모든 TMS가 기동되는 예제이다.

      $ tmboot -t tms_name -k all
    • 다음은 서버 그룹의 설정 옵션을 사용한 예제이다.

      서로 다른 서버 그룹에서 tms_name을 동일하게 사용하는 경우 다음과 같이 [–g] 옵션으로 해당 TMS가 속해있는 서버 그룹명을 지정한다. 그렇지 않으면 해당 TMS명을 가진 가장 첫 번째 서버 그룹의 TMS가 기동된다.

      $ tmboot -t tms_name -k all -g svgname
    • 다음은 tmconfig 환경 파일을 참조하여 SERVER 절에 정의된 모든 응용 서버 프로세스들을 실행하는 예제이다.

      $ tmboot -A
    • 다음은 /user1/tmax/con 디렉터리의 exconfig 환경 파일을 참조하여 NODE 절에 등록된 cosmo 노드에 존재하는 응용 서버 프로세스들을 실행하는 예제이다.

      $ tmboot -n cosmo -f /user1/tmax/con/exconfig
    • 다음은 tmconfig2 환경 파일을 참조하여 svr1프로세스를 5개 실행하는 예제이다.

      $ tmboot -s svr1 -k 5 -f tmconfig2

cfl, tmdown 명령어에 대한 자세한 내용은 각각 Tmax Reference Guide의 cfl , tmdown을 참고한다.

tmboot를 실행할 때의 tmconfig 경로 참조

tmboot 명령어로 Tmax를 기동할 경우 이진 바이너리 환경 파일 ${TMAXDIR}/config/tmconfig를 ${TMAXDIR}/path/tmconfig에 복사한 후 ${TMAXDIR}/path 디렉터리에 있는 환경 파일을 사용한다.

하지만 이미 Tmax 엔진이 기동되어 있는 상황에서 tmboot –S 또는 –s 를 이용하여 특정 서버만을 기동할 경우에도 ${TMAXDIR}/config/tmconfig를 참조한다면 아래와 같은 환경에서 문제가 될 수 있다.

  • 환경 파일

    <기존 운영 환경 파일>

    *SVRGROUP
    svg1       NODENAME = "tmaxh4"
    *SERVER
    svr1       SVGNAME = svg1
    svr2       SVGNAME = svg1
    *SERVICE
    TOUPPER1   SVRNAME = svr1
    TOUPPER2   SVRNAME = svr2

    <운영 중 변경된 환경 파일>

    *SVRGROUP
    svg1       NODENAME = "tmaxh4"
    *SERVER
    svr1       SVGNAME = svg1
    svr3       SVGNAME = svg1
    svr2       SVGNAME = svg1
    *SERVICE
    TOUPPER1   SVRNAME = svr1
    TOUPPER3   SVRNAME = svr3
    TOUPPER2   SVRNAME = svr2

다음과 같이 운영 중 변경된 환경 파일을 CFL로 재컴파일한다.

$ cfl –i node1.m

새로 추가된 서버를 기동한다.

$ tmboot –S svr3

운영 중인 환경에서 환경 파일을 변경한 후 tmboot –S를 시도하려면 다음과 같은 에러가 발생할 수 있다.

(E) BOOT3007 maxsvr (1) is over for svr(svr3:svr2): nodeno = 0, svri = 5, cur = 1, ksvr = 1 [BOOT0015]

운영 환경에서 CFL을 수행하였을 경우 ${TMAXDIR}/config/tmconfig는 변경된 내용이 적용되지만 실제 공유 메모리에는 변경되기 이전인 ${TMAXDIR}/path/tmconfig와 동일하게 구성되어 있기 때문에 tmboot –S로 새로 추가한 서버 프로세스가 기동될 때 실제로는 기존에 이미 실행 중인 서버 프로세스를 추가로 기동하는 결과가 발생한다.

Tmax 엔진이 기동되어 있는 상황에서의 CFL은 허용되지 않지만 이 실수로 인한 에러가 발생하면 해당 에러는 디버깅하기가 쉽지 않다. 따라서 Tmax 엔진 동작 중 tmboot [–S], [-s], [–g], [-q], [-t], [-A] 등의 옵션으로 각 서버를 기동시킬 때 참조하는 tmconfig의 경로는 ${TMAXDIR}/config/tmconfig가 아닌 ${TMAXDIR}/path/tmconfig이다. 단, 엔진을 기동할 경우 ${TMAXDIR}/path/tmconfig를 참조한다.

$ cfl –i new_config.m –o tmchg
$ tmadmin : cfgadd –I tmchg
$ tmboot –S new_svr –f tmchg

tmboot를 수행할 때 [-f] 옵션을 사용하여 특정 이진 바이너리 환경 파일을 지정하면 ${TMAXDIR}/config/tmconfig를 참조하여 서버를 기동한다. 동적 서버를 추가할 때에는 반드시 [–f] 옵션으로 특정 환경 파일을 지정하여 ${TMAXDIR}/config/의 변경된 이진 바이너리 환경 파일을 참조하도록 한다.

2. Tmax 종료

Tmax 시스템 종료는 이진 Tmax 환경 파일을 기반으로 이루어진다. 시스템에서 사용하던 공유 메모리를 없애고, 기동된 Tmax 프로세스(TMM, TMS, CLL, CLH, RQS)와 응용 서버 프로세스를 종료한다.

2.1. tmdown

Tmax 시스템 전체나 또는 일부분을 종료시키는 명령어이다. tmdown은 Tmax 환경 파일을 바탕으로 하여 Tmax 시스템을 종료시키기 때문에 기본적으로 [-f] 옵션을 사용하여 참조할 이진 Tmax 환경 파일(소스 설정 파일)을 cfl로 컴파일한 결과물을 경로와 함께 지정해야 한다.

[-f] 옵션이 생략될 경우 기본값으로 TMAXDIR 디렉터리 하위의 config 디렉터리에 있는 tmconfig 파일을 참조한다. [-f] 이외의 옵션이 사용되지 않는다면 tmdown은 Tmax의 모든 관리 프로세스와 Tmax 환경 파일의 SERVER 절에 등록된 모든 서버 프로세스를 종료시키고 Tmax 시스템과 관련된 IPC 자원들을 제거한다. 종료 순서는 다음과 같다.

  1. SERVER 절에 등록된 응용 서버 프로세스들이 종료된다.

  2. 서버 그룹별로 TMS 프로세스가 동작 중이라면 TMS 프로세스가 종료된다.

  3. Tmax 시스템 관리 프로세스들이 종료된다. 프로세스 종료는 CLH, CLL, TMM 순서로 진행된다. 이 순서가 일반적인 시스템 관리 프로세스 종료 순서나 CLH의 MIN 값이 1이 아닌 경우에는 CLL이 CLH보다 먼저 종료될 수도 있다.

백업으로 기동된 서버에 동적으로 등록된 서비스가 있는데 이 서버가 모두 다운되어 동적으로 등록된 서비스가 공유 메모리에서 사라질 경우를 가정해본다. 이 경우 장애 복구 후(백업 서버들이 모두 종료되고 정상 노드의 서버들이 재기동되어 있는 상태), 백업 노드로 접속한 클라이언트에 대해서 naming 서비스를 제공할 수 없게 된다. 따라서 백업 서버의 동적 서비스는 해당 서버가 모두 종료된 후에도 공유 메모리에서 삭제되지 않도록 처리한다.

다음은 명령어 사용법에 대한 설명이다.

  • 사용 방법

    $tmdown [-A] [-f 이진 Tmax 환경파일명] [-g servergroup_name] [-h] [-V][-i] [-b]
            [-n node_name] [-p server_num] [-q rq_svg_name]
            [-s server_name [-k count]] [-S server_name] [-t tms_name[-k all]]
            [-w wait_time] [-B trb_node][-R] [-y]
    항목 설명

    [-A]

    모든 응용 서버 프로세스들을 종료시킨다.

    [-f 이진 Tmax 환경파일명]

    시스템이 종료될 때 참조할 이진 Tmax 환경 파일명을 지정하는 항목으로 파일명을 지정하지 않으면 기본값으로 TMAXDIR 디렉터리 하위의 config 디렉터리에 있는 tmconfig 파일을 참조한다.

    [-g servergroup_name]

    지정된 서버 그룹에 속한 서버 프로세스들을 종료한다.

    만약 [-s] 또는 [-S] 옵션과 함께 쓰면 지정한 서버 그룹 내에서 지정한 서버명에 대해서만 서버 프로세스를 종료한다.

    [-h]

    명령어 도움말 옵션이다.

    [-V]

    실행 파일의 버전을 확인할 수 있다.

    [-i]

    tmdown 명령을 즉시 수행한다. 기본적으로 tmdown 명령은 해당 업무를 모두 종료하고 수행되지만 [-i] (immediately) 옵션에 의한 종료는 현재 수행 중인 업무를 무조건 중단하기 때문에 신중하게 사용해야 한다.

    [-b]

    POD 서버가 명시적으로 tmboot를 호출하기 전에 ASQCOUNT에 의해서 자동으로 기동하지 않도록 방지한다. 반드시 [-S] 옵션이나 [–g] 옵션, [–A] 옵션과 함께 사용해야 한다.

    [-n node_name]

    지정된 노드에 존재하는 모든 서버 프로세스들을 종료시킨다. 노드명은 Tmax 환경 파일의 NODE 절에 등록되어 있어야 한다.

    [-p server_num]

    지정된 서버 프로세스를 종료시킨다. [-s] 옵션에 의한 종료와 달리 tmadmin에서 "st -p" 명령으로 확인할 수 있는 프로세스 번호(spr_no)를 사용하여 특정 프로세스를 종료시킨다.

    [-q rq_svg_name]

    RQS를 종료시킨다.

    [-s server_name [-k count]]

    지정된 서버 프로세스 하나만 종료시킨다. 사용되는 서버 프로세스명은 Tmax 환경 파일 내의 SERVER 절에 미리 등록되어 있어야 한다.

    [-k] 옵션을 함께 사용하여 서버 프로세스 개수를 지정할 수 있다. 서버 프로세스 개수를 현재 실행되어 있는 개수보다 크게 지정하여도 에러는 발생되지 않고 현재 실행되고 있는 모든 프로세스를 종료시킨다.

    [-k] 옵션을 생략하면 해당 서버 프로세스는 하나만 종료된다.

    [-S server_name]

    지정된 서버 프로세스들을 모두 종료시킨다. 하나 이상의 프로세스가 지정되어 있다면 해당되는 모든 프로세스를 종료시킨다.

    만약 -g 옵션과 함께 쓰면 지정한 서버 그룹에 대해서만 종료되며, -g 옵션을 사용하지 않으면 동일한 서버명을 가진 모든 서버 그룹을 대상으로 하여 종료된다.

    [-t tms_name [-k all] ]

    지정된 TMS 프로세스를 하나만 종료시킨다.

    [-k all ]은 트랜잭션 Recovery 기능을 사용할 경우 필요한 옵션이다. 그룹 전체를 종료했다가 기동할 경우 Recovery가 수행되기 때문에 Recovery는 TMS 그룹 단위로 가능하다. 특정 이름을 가진 TMS 전체를 기동/종료할 경우 이 옵션을 사용할 수 있다.

    [-w wait_time]

    wait_time에 지정된 시간이 지나면 tmdown을 수행한다.

    [-B trb_node]

    TRB 노드를 종료시킨다.

    [-R]

    Rolling Down될 때 사용한다.

    [-y]

    tmdown될 때 종료 여부(y| n)를 묻지 않고 바로 종료시킨다.

  • 예제

    • 다음은 TMAXDIR 디렉터리 하위의 config 디렉터리에 있는 tmconfig 파일을 참조하여 전체 Tmax 시스템을 종료하는 예제이다. Tmax 관리 프로세스와 응용 서버 프로세스들을 모두 종료한다.

      $ tmdown
    • 다음은 이름이 tms_name인 모든 TMS가 종료되는 예제이다.

      $ tmdown -t tms_name -k all
    • 다음은 서버 그룹을 설정 옵션을 사용한 예제이다. 서로 다른 서버 그룹에서 tms_name을 동일하게 사용하는 경우 위와 같이 [-g] 옵션으로 해당 TMS가 속해있는 서버 그룹명을 지정해 준다. 그렇지 않으면 해당 TMS 이름을 가진 가장 첫 번째 서버 그룹의 TMS가 종료된다.

      $ tmdown -t tms_name -k all -g svgname
    • 다음은 tmconfig2 환경 파일을 참조하여 전체 Tmax 시스템을 종료하는 예제이다.

      $ tmdown -f tmconfig2
    • 다음은 tmconfig 환경 파일을 참조하여 svr1이라는 응용 서버 프로세스를 모두 종료하는 예제이다.

      $ tmdown -S svr1
    • 다음은 tmconfig 환경 파일을 참조하여 svr1이라는 응용 서버 프로세스를 강제로 모두 종료하는 예제이다. svr1 중 특정 서버 프로세스의 서비스가 종료되지 않는 경우 [-i] 옵션을 사용하여 강제로 종료하는 예제이다.

      $ tmdown -S svr1 -i
    • 다음은 tmconfig 환경 파일을 참조하여 <spr_no>인 서버 프로세스만 강제로 종료하는 예제이다. 해당 서버의 서버 프로세스가 여러 개일 때 특정 서버가 looping인 경우 해당 프로세스만 강제로 종료하는 예제이다.

      $ tmdown -p <spr_no> -i
    • 다음은 /user1/tmax/con 디렉터리의 exconfig 환경 파일을 참조하여, NODE 절에 등록된 cosmo 노드에 존재하는 응용 서버 프로세스를 종료하는 예제이다.

      $ tmdown -n cosmo -f /user1/tmax/con/exconfig
    • 다음은 tmconfig2 환경 파일을 참조하여 동작 중인 svr1프로세스 하나만 종료하는 예제이다.

      $ tmdown -s svr1 -f tmconfig2

Rolling Down 기능

클라이언트의 요청을 처리하고 있던 Tmax 시스템이 비정상적으로 종료될 경우 기존 버전에서는 현재 처리 중인 요청에 대해서만 응답을 처리하여 전달한 후 큐에 쌓여 있는 요청에 대하여 TPECLOSE 에러를 전달하였다. 하지만 Tmax 5에서는 Tmax 엔진을 다운시키기 이전에 요청된 모든 클라이언트에 대하여 정상적으로 응답을 주는 Rolling Down 기능을 제공한다.

  • 사용 방법

    $ tmdown –R –n node_name
    항목 설명

    –n node_name

    종료되는 노드명을 지정한다.

  • 적용 환경

    Tmax 시스템이 설치된 운영 시스템 환경에서 사용할 수 있다.

  • 예제

    다음은 NODEA와 NODEB가 멀티 노드(또는 멀티 도메인)로 구성되어 있으며, 총 100개의 클라이언트가 NODEA에 접속되어 있다고 가정할 경우의 처리 과정을 설명하는 예제이다.

    • NODEA의 Tmax 시스템을 종료시킬 경우

      $ tmdown –R –n NODEA
      1. NODEA의 CLL은 클라이언트로부터의 Listen 포트를 막는다.

      2. NODEA에서 기존에 처리되고 있던 요청에 대해서는 처리를 완료한 후 클라이언트에게 처리 결과를 전달한다.

      3. 큐에 쌓여 있는 요청에 대해서는 TMAX_BACKUP_ADDR로 설정된 NODEB에 요청을 보낸다.

      4. NODEA의 Tmax 시스템이 종료된다.

      5. NODEB에서는 NODEA로부터 받은 요청을 처리한 후 처음 해당 request를 요청한 클라이언트에게 처리 결과를 직접 전달한다.

      6. NODEA에 접속되어 있는 모든 클라이언트는 정상 응답을 받는다.

    • NODEB의 Tmax 시스템을 종료시킬 경우

      $ tmdown –R –n NODEB
      1. 100개의 클라이언트 요청을 NODEA의 CLH가 약 50:50으로 NODEA와 NODEB에 분배된다.

      2. tmdown -R –n NODEB로 NODEB의 Tmax 시스템을 종료시킨다.

      3. NODEB의 CLL은 클라이언트부터 Listen 포트를 막는다.

      4. NODEB에서 기존에 처리되고 있던 요청에 대해서는 처리를 완료한다.

      5. 클라이언트는 NODEA에 접속되어 있는 상황이므로 해당 처리 결과를 NODEA의 CLH에게 전달하고, NODEA의 CLH는 클라이언트에게 처리 결과를 전달한다.

      6. NODEB의 큐에 쌓여 있는 요청에 대해서는 TMAX_BACKUP_ADDR로 설정된 NODEA에 요청을 보낸다.

      7. NODEB의 Tmax 시스템이 종료된다.

      8. NODEA에서는 NODEB로부터 받은 요청을 처리한 후 처음 해당 request를 요청한 클라이언트에게 처리 결과를 전달한다.

      9. NODEA에 접속되어 있는 모든 클라이언트는 정상 응답을 받는다. 100개의 클라이언트가 모두 정상 응답을 받아야 한다.

        NODEA의 요청을 NODEB가 처리하기 위해서는 NODEA에 접속한 클라이언트의 TMAX_BACKUP_ADDR, TMAX_BACKUP_PORT가 NODEB로 설정되어 있어야 한다. 그렇지 않을 경우 NODEA의 Tmax 시스템이 종료되는 순간 아직 처리되지 않은 클라이언트 요청에 대하여 TPESYSTEM 에러를 전달한다.