제5장 관리 도구

내용 목차

5.1. 개요
5.2. tmadmin
5.3. 환경 정보 조회
5.3.1. tmaxinfo(ti)
5.3.2. history
5.3.3. config(cfg)
5.3.4. configopt(cfgopt)
5.4. 동작 상태 정보
5.4.1. stat(st)
5.4.2. gwinfo
5.4.3. txgwinfo(txgwi) / nontxgwinfo(ntxgwi)
5.4.4. jgwinfo / ajgwinfo
5.4.5. wsgwinfo
5.4.6. smtrc
5.4.7. clhsinfo
5.4.8. tmmsinfo
5.4.9. repeat(r)
5.4.10. clientinfo(ci)
5.4.11. svrinfo(si)
5.4.12. txquery(txq)
5.4.13. rqstat(rqs)
5.5. 운용 관리
5.5.1. suspend(sp)
5.5.2. resume(rs)
5.5.3. advertise/unadvertise
5.5.4. restat
5.5.5. rebootsvr(rbs)
5.5.6. cfgadd(ca)
5.5.7. set
5.5.8. setopt
5.5.9. qpurge(qp)
5.5.10. discon(ds)
5.5.11. logstart / logend
5.5.12. chtrc
5.5.13. chlog
5.5.14. txcommit / txrollback
5.5.15. wsgwreload
5.5.16. restart
5.5.17. notify_reconnect_clh(nrc)
5.5.18. cleandynsvc
5.5.19. reconnect_clh
5.5.20. admnoti(an)

본 장에서는 Tmax의 효율적인 관리를 위해 제공되는 관리 도구에 대해서 설명한다.

Tmax 시스템이 동작하고 있다면 현재 환경설정에 대한 정보를 확인해 보고 이를 동적으로 변경하거나 서버 프로그램에 서비스를 추가하는 등의 시스템에 대한 관리가 필요하다. 또한 제공되는 서비스 중 특정 서비스에 대하여 현재 처리 상태 즉, 몇 건의 서비스를 처리해 왔으며, 평균 처리 시간이 얼마나 되며, 몇 건의 요청이 대기하고 있는지, 그 서비스를 제공받기 위해서는 얼마나 기다려야 하는지 등의 정보를 확인할 필요가 있다. 이 정보에 따라 서버 프로세스를 더 기동하거나 종료시키는 등의 조치도 필요하다.

Tmax 시스템은 명령어 인터프리터 형태의 명령어를 이용하여 동적 시스템 관리를 할 수 있도록 tmadmin을 제공한다.

tmadmin 프로그램은 UNIX 환경의 셸과 비슷한 명령어 인터프리터이다. 항상 프롬프트(prompt) 상태로 대기 중이다가 입력되는 명령어를 해석하여 이를 실행한다. 여러 노드를 한 도메인으로 사용하는 경우 tmadmin으로 전체에 대한 중앙 관리가 가능하며, 각각의 노드별로 로컬에서 관리가 가능하다.

  • 사용방법

    $ tmadmin [-ㅣ] [-s|m] [-h] [-f [config_file]] 
              [-n [node_name]] [-v] [-V]  [-p] [-t]
    옵션설명
    [-l]racd를 통해 여러 노드로 구성된 시스템이 중앙에서 집중 관리될 경우에 로컬 노드만을 관리하기 위해서 사용하는 옵션이다. 각각의 노드들은 이 옵션으로 자신의 시스템만을 관리할 수 있다.
    [-s]읽기 전용 모드로 각각의 tmadmin 툴을 10개까지 사용할 수 있는 옵션이다. 이 옵션을 사용하면 환경을 동적으로 변경시킬 수 없다. (기본값)
    [-m]마스터 모드로 동적으로 환경을 변경할 수 있다. 1명의 사용자만이 마스터 모드를 사용할 것을 권장한다. 1명 이상의 사용자가 환경을 변경할 경우 심각한 시스템 문제가 발생할 수 있다. 환경 파일은 변경하지 않고 정해진 매뉴얼을 따른다.
    [-h]명령어 도움말 옵션이다.
    [-f [config_file]]지정해 준 이진 파일을 관리한다. 환경 파일을 기본값인 tmconfig가 아닌 다른 이름으로 이진 파일을 생성한 경우 tmadmin을 구동할 때 이진 파일명을 지정한다.
    [-n [node_name]]특정 노드에 대한 모니터링이 가능하도록 한다. 멀티 노드 환경에서 tmadmin을 구동하는 경우 이 옵션을 설정하면 지정된 노드에 대한 정보만을 확인하므로 보다 편리하게 시스템을 관리할 수 있다.
    [-v]Tmax의 버전을 확인한다. 이 옵션을 설정하면 Tmax 기동과 상관없이 어느 위치에서나 버전 확인이 가능하다.
    [ -V ]실행 파일의 버전을 확인할 수 있다.
    [-p]st –p, st –s, si, ci, cfg의 명령어가 수행될 때 결과가 화면 단위로 출력되도록 하는 옵션이다(more 기능).
    [-t]명령어 수행에 대한 시작 및 종료시간을 출력한다. 옵션에 대한 자세한 내용은 아래 설명을 참고한다.

    -t 옵션을 주고 tmadmin을 실행하면 다음과 같은 형식으로 시간을 출력한다.

    [TIME][타입   ] : hh:MM:ss:millisec
    타입설명
    START콘솔에서 명령어를 실행할 때 시작시간을 출력한다.
    END콘솔에서 명령어 실행이 종료되면 종료시간을 출력한다(리모트 노드의 명령까지 수행한 이후의 시간이다).
    R_END콘솔에서 명령어 실행 시 리모트 노드의 수행이 종료되면 종료한 시간(tmadmin을 실행한 로컬의 시간으로, 리모트 노드의 시간이 아니다)을 출력한다.
    RP_STARTtmadmin의 repeat 명령어를 사용하여 수행할 경우 한 건의 명령을 시작하기 전 시간을 출력한다.
    RP_ENDtmadmin의 repeat 명령어를 사용하여 수행할 경우 한 건의 명령이 종료되면 종료시간을 출력한다(리모트 노드의 명령까지 수행한 이후의 시간이다).

명령어 실행

tmadmin에서는 명령어를 통해 Tmax 시스템을 기동 또는 종료시킬 수 있으며, 현재 동작 중인 시스템의 환경설정 내용을 조회 및 수정할 수 있다. 또한 각 서버 프로세스의 상태와 서비스의 처리 상태 등을 확인할 수 있다.

tmadmin 프로그램은 다음과 같이 실행한다.

$tmadmin

아래와 같은 메시지와 함께 프롬프트(prompt)가 나타난다. 이것은 tmadmin 프로그램이 실행 상태임을 나타낸다.

--- Welcome to Tmax Admin (Type "quit" to leave) ---
$$1 tmax1 (tmadm):

tmadmin을 종료하기 위해서는 'quit'이나 'q' 명령을 사용한다.

$$1 tmax1 (tmadm):quit

다음은 tmadmin을 실행한 후 사용할 수 있는 명령어 목록이다.

  • 환경 정보 조회

    명령어설명
    tmaxinfo(ti)Tmax 시스템 정보를 확인한다.
    history(hist)이전에 저장된 명령어를 조회한다.
    config(cfg)환경설정 내용을 조회한다.
    configopt(cfgopt)TMMOPT 등의 환경설정에 정의된 옵션 중 동적 변경이 가능한 설정의 현재 설정값을 조회한다.
  • 동작상태 정보 조회

    명령어설명
    stat(st)프로세스 및 서비스 상태의 통계를 낸다.
    gwinfoGATEWAY 절에 정의한 게이트웨이들의 채널 상태를 확인한다.
    txgwinfo(txgwi)Tmax 게이트웨이의 정보를 확인한다.
    nontxgwinfoTmax Non 트랜잭션 게이트웨이의 정보를 확인한다.
    jgwinfoJEUS 게이트웨이의 정보를 확인한다.
    ajgwinfoJEUS Async 게이트웨이의 정보를 확인한다.
    wsgwinfo웹 서비스 게이트웨이의 정보를 확인한다.
    smtrcGID를 이용하여 해당 서비스의 수행 상태를 조회한다.
    clhsinfo멀티 노드 환경에서 CLH 사이의 연결 상태 정보를 확인한다.
    tmmsinfo멀티 노드 환경에서 TMM 사이의 연결 상태 정보를 확인한다.
    repeat(r)명령어를 반복한다.
    clientinfo(ci)접속 클라이언트를 확인한다.
    svrinfo(si)서버 정보를 확인한다.
    txquery(txq)트랜잭션 처리 정보를 확인한다.
    rqstat(rqs)RQ의 상태를 확인하거나 디스크 큐에 쌓여있는 서비스를 처리한다.
  • 운용 관리

    명령어설명
    suspend(sp)동작 중인 서버 프로세스를 중지한다.
    resume(rs)중지된 서버 프로세스를 재개한다.
    advertise/unadvertise특정 서비스명을 advertise / unadvertise한다.
    restat특정 서버 프로세스 혹은 모든 서버 프로세스의 통계정보를 초기화한다.
    rebootsvr(rbs)서버 프로그램을 교체한다.
    cfgadd(ca)동적으로 서비스를 추가한다.
    set현재 설정된 환경설정값을 동적으로 변경한다.
    setoptTMMOPT 등의 환경설정에 정의된 옵션 중 동적 변경이 가능한 환경설정값을 동적으로 변경한다.
    qpurge(qp)큐에 쌓인 업무를 삭제한다.
    discon(ds)접속 중인 클라이언트를 강제로 해제한다.
    logstart / logend로깅을 시작 / 종료한다.
    chtrcTrace 관리를 한다.
    chlogTMM, CLH, 특정 서버의 로그 레벨을 런타임 도중 동적으로 변경한다.
    txcommit / txrollback트랜잭션 처리 중에 장애가 발생하는 경우 Commit / Rollback을 재이슈하여 해당 트랜잭션을 종료하는 기능이다.
    wsgwreload웹 서비스 게이트웨이의 서비스 정보, 설정 변경을 적용한다.
    restart서버 프로세스를 재기동한다.
    notify_reconnect_clh(nrc)특정 CLH 프로세스로 재접속하라는 통지를 서버 프로세스에 전달한다.
    cleandynsvcmksvr로 빌드된 서버가 비정상 종료로 재기동 되는 경우에는 동적 등록된 서비스를 삭제하지 않는다
    reconnect_clhCLH와 다른 노드의 재연결을 시도한다.
    admnoti(an)admin을 통해서 TCS, UCS, RDP 서버로 이벤트를 전송한다.

  • 기타

    명령어설명
    !바로 전에 사용한 명령어를 반복한다.
    quit(q)tmadmin을 종료한다.
    help(h)사용 가능한 옵션 리스트를 조회한다.
    nodeset(ns)멀티 노드 환경에서 특정 노드에 대한 정보만을 얻고자 하는 경우에 사용한다.
    nodeunset(nus)멀티 노드 환경에서 특정 노드에 대한 정보만을 얻고자 설정한 것을 해제한다.
    tmd가상의 클라이언트 애뮬레이터로서 서비스 프로그램의 유효성을 검토하는 경우 클라이언트 프로그램을 별도로 작성하지 않고 이 유틸리티를 이용한다.

현재 동작 중인 시스템의 환경 정보를 알려준다. 환경 파일에서 정의된 도메인, 노드, 서버 그룹, 서버, 서비스별로 기본값까지 포함한 모든 환경 정보를 확인할 수 있다. 출력되는 항목에 대한 자세한 설명은 “제3장 환경 파일 설정”을 참고한다.

  • 사용 방법

    $$1 tmax1 (tmadm): config (cfg) [-d] [-n] [-g[server_group_name]]
                                    [-v[service_name]][-s [service_name] [-x]] 
                                    [-w [gateway_name]] [-r] [-b] [-f] [-pr]
    옵션설명
    [-d]도메인에 대한 환경 정보를 조회한다. 환경 파일의 DOMAIN 절과 관련된 모든 항목 내용과 도메인에 존재하는 정보를 확인할 수 있다.
    [-n]전체 노드에 대한 환경 정보를 조회한다.환경 파일의 NODE 절과 관련된 모든 항목 내용과 시스템에서 내부적으로 정의된 정보를 확인할 수 있다.
    [-g [server_group_name]]서버 그룹에 대한 환경 정보를 조회한다. 서버 그룹명을 지정하면 그 서버 그룹에 대한 정보만을 조회하고 서버 그룹명을 지정하지 않으면 모든 서버 그룹에 대한 정보를 조회한다. 그룹별로 각 서버 그룹에 대하여 환경 파일의 SVRGROUP 절과 관련된 모든 항목 내용을 확인할 수 있다.
    [-v [service_name]]서버에 대한 환경 정보를 조회한다. 서버명을 지정하면 그 서버에 대한 정보만을 조회하고 서버명을 지정하지 않으면 모든 서버에 대한 정보를 출력한다. 서버별로 각 서버에 대하여 환경 파일의 SERVER 절과 관련된 모든 항목 내용과 내부적으로 정의된 서버 번호(svr_no), 서버와 관련된 데이터 의존형 라우팅 정보(ddri)를 확인할 수 있다.
    [ -s [service_name] [-x] ]서비스에 대한 환경 정보를 조회한다. 서비스명을 지정하면 그 서비스에 대한 정보만을 조회하고 이름을 지정하지 않으면 모든 서비스에 대한 정보를 출력한다. 서비스별로 각 서비스에 대하여 환경 파일의 SERVICE 절과 관련된 모든 항목 내용을 확인할 수 있다. [-x] 옵션을 사용할 경우 txtime 정보를 추가로 출력한다.
    [-w [gateway_name]]게이트웨이에 대한 환경 정보를 조회한다. 게이트웨이명을 지정하면 그 게이 트웨이에 대한 정보만을 조회하고 이름을 지정하지 않으면 모든 게이트웨이에 대한 정보를 출력한다.
    [-r]라우팅 환경 정보를 조회한다.
    [-b]백업 환경 정보를 조회한다.
    [-f]Topend의 함수 정보를 조회한다.
    [-pr]Topend의 product 정보를 조회한다.

실질적인 시스템 동작 상태를 나타내며, 동작 중인 서버 프로세스와 서비스에 대한 정보를 알 수 있다. 서버 프로세스의 현재 상태, 처리 중인 서비스명, 처리한 서비스 개수, 서비스에 대한 상태, 서비스 큐에 존재하는 서비스 요청 개수 등과 같은 동적인 정보를 확인할 수 있다. stat 명령어의 약어는 st이다.

  • 사용 방법

    $$1 tmax1 (tmadm): stat (st) [-p [server_process_name]] [-s [service_name]]
                                 [-t [TMS_name]] [-v [server_process_name] [-pod]]
                                 [-o [sort할 조건]] [-n [출력되는 메시지 라인]]
                                 [-x] [-X] [-q [destination_name [-c]]] [-d] [-j]
    
    옵션설명
    [-p [server_process_name]]

    서버 프로세스에 대한 정보를 조회한다. Tmax 환경 파일에 등록된 서버는 MIN과 MAX 항목을 사용하여 여러 개 동작할 수 있는데, 이들 각각의 동작 상황을 확인할 수 있다. 서버명을 지정하면 해당 서버명의 서버 프로세스들에 관한 정보들이 출력되고, 이름을 지정하지 않으면 동작 중인 모든 서버 프로세스들에 대한 정보가 출력된다.

    'st –p' 명령의 마지막 라인에 총 처리 건수, 전체 평균 처리시간, 현재 수행 중인 총 서비스 개수 통계 정보를 출력하여 시스템 처리 현황을 파악할 수 있다.

    [-s [service_name]]서비스에 대한 정보를 조회한다. 서비스명을 지정하면 해당 서비스에 관한 정보만 출력되고, 서비스명을 지정하지 않으면 제공되는 모든 서비스에 관한 정보들이 출력된다.
    [-t [TMS_name]]시스템에서 제공하는 TMS에 대한 동적 정보를 알려준다. TMS명을 지정하면 해당 TMS에 관한 정보만 출력되고 TMS명을 지정하지 않으면 제공되는 모든 TMS에 관한 정보가 출력된다.
    [-v [server_process_name] [-pod]]

    서버 프로세스에 대한 정보를 조회한다(si와 동일).

    [-pod] 옵션을 사용하면 POD 서버의 상태 부분에 항상 "(POD)" 가 출력된다. 이 옵션이 없으면 POD 서버의 상태가 기동시에는 RDY, 미기동시에는 NRDY로 표시된다. POD 서버는 NRDY 상태이더라도 서비스 요청시 자동으로 기동되어 처리되므로 상태가 중요하지 않으며, 모니터링시 문제인 서버로 오해할 수 있다. 이 옵션을 사용하여 불필요한 오해를 줄일 수 있다.

    [-o [sort할 조건]]

    [–o] 옵션은 특정 조건을 기준으로 조회 결과를 sort하여 출력하기 위한 옵션이다. Tmax 시스템에서 제공하는 서버 프로세스와 서비스에 대한 동적 정보를 조회할 경우 특정 조건을 바탕으로 sort해서 원하는 정보를 볼 수 있다. 반드시 [–p] 옵션이나 [–s] 옵션과 함께 사용되어야 한다.

    sort는 내림차순, 오름차순으로 설정이 가능하다.

    • [ -o ca ] : 내림차순

    • [ -o ca- ] : 오름차순

    [-n [출력되는 메시지 라인]]sort되어 출력되는 메시지 라인을 지정할 수 있다. sort되어 출력되는 메시지 라인(서버 프로세스 또는 서비스의 개수)을 지정하는 옵션으로 반드시 [–o] 옵션과 함께 사용되어야 한다.
    [-x]

    'st –p' 또는 'st –s' 명령어를 이용하여 서버 프로세스나 서비스의 상태를 조회와 다음의 항목을 추가적으로 조회한다. 반드시 [–s] 옵션이나 [–p] 옵션과 함께 사용해야 한다. 자세한 내용은 상세 정보(-x)를 참고한다.

    • OS에서 제공하는 프로세스 ID(PID), Fail count, Error count,

    • 최소/최대 서비스 수행 시간 (min_time, max_time)

    • TMS(-t) 정보를 조회할 때의 xid, xa_status

    [-X]
    • [-s] 옵션과 함께 사용하는 경우

      COUSIN 서비스에 대하여 상태1(상태2)의 형태로 로컬 상태를 따로 조회할 수 있다.

      (예: RDY(NRDY))

      (상태2)가 실제적인 로컬 상태이며, [-X] 옵션을 사용하지 않을 경우 COUSIN 환경에서는 로컬 상태가 항상 RDY로 조회되는 문제점을 해결할 수 있다. 반드시 [–s] 옵션과 함께 사용해야 한다.

    • [-p] 옵션과 함께 사용하는 경우

      서버 프로세스의 Suspend 상태를 조회한다. Suspend 상태에 있다면 다음과 같이 표시된다.

      (예: RDY(BLK))

      서버 프로세스의 일부만 Suspend 할 수 있으며 부분적으로 Suspend 되는 경우에는 stat -v로 조회할 때 서버의 상태는 RDY로 표시되고, stat -p -X 로 조회할 때 suspend되어 있는 프로세스는 실제상태 뒤에 (BLK)가 함께 표시된다.

    [-q [destination_name]]HMS destination에 대한 정보를 보여준다. 환경설정 파일에서 설정한 destination의 목록과 각 destination에서 처리 중인 메시지와 클라이언트의 정보를 확인할 수 있다.
    [ -d ]

    서버 프로세스를 조회(st -p)할 때 서버 프로세스가 RUN 상태일 때 경과시간이 표시된다. 그 외의 상태일 경우 '-'로 표시된다. 반드시 st -p와 함께 사용해야 되며 st -p -x와는 함께 사용할 수 없다.

    (예: st -p -d )

    [ -j ]

    st -p -x, st -p -d를 사용할 때 여러 라인에 나오는 항목들을 한 라인에 나오도록 한다.

    st -p 옵션과 함께 사용된다.

    st -p -j 
    st -p -x -j
    st -p -d -j
    st -p -d -x -j

tmadmin에서 리모트 게이트웨이와의 연결 상태를 확인할 수 있는 명령어이다. 이와 더불어 현재 메인 노드와 연결되어 있는지, 백업 노드와 연결되어 있는지, 어떤 노드와 연결되어 있는지의 상세한 정보를 확인할 수 있다.

모든 게이트웨이의 연결 정보를 확이할 수 있다(예외로, 웹 서비스 게이트웨이는 지원하지 않는다).

  • 사용 방법

    $$1 tmax1 (tmadm): gwinfo [-w gw_name] [-t gw_type]
    옵션설명
    [-w gw_name]특정 게이트웨이만 정보를 조회한다. gw_name은 GATEWAY 절에 설정한 이름이다.
    [-t gw_type]

    특정 게이트웨이 종류만을 조회한다.

    GATEWAY 절에 정의하는 TYPE(TMAX, TMAXNONTX, JEUS, JEUS_ASYNC, TUXEDO, TUXEDO_ASYNC, XAGW)으로 입력한다.

    (예: TMAX)

  • 예제

    다음은 gwinfo 명령의 사용 예제로, 연결된 노드가 메인 노드인지 백업 노드인지에 따라 조회결과가 달라진다.

    • 메인 노드에 연결된 경우

      10/user2/starbj81>tmadmin
      --- Welcome to Tmax Admin (Type "quit" to leave) --- 
      
      $$1 tmaxs1 (tmadm): gwinfo
      ----------------------------------------------------------------
        gw_no   channel    type    foreign_address              status   
      ----------------------------------------------------------------
         0   OUTCH      PRIM    tmaxc1(192.168.1.12:9400)     RDY   
         1   OUTCH      PRIM    tmaxc1(192.168.1.12:9400)     RDY   
         4   INCH          -     tmaxc1(192.168.1.12:1434)     RDY   
         5   INCH          -     tmaxc1(192.168.1.12:1436)     RDY   
         6   INCH          -     tmaxh2(192.168.1.48:58094)    RDY   
         7   INCH          -     tmaxh2(192.168.1.48:58093)    RDY   

      다음은 명령어를 실행하면 조회되는 결과에 대한 설명이다.

      항목설명
      gw_no게이트웨이 번호이다.
      channel채널이 INBOUNT인지, OUTBOUND인지를 표시한다.
      type현재 메인과 연결되어 있는지 백업과 연결되어 있는지를 표시한다.
      foreign_address연결되어 있는 리모트 게이트웨이의 IP 주소이다.
      statuswebt, jtmax, webtasync와의 연결상태이다. 상태에 대한 자세한 설명은 "시스템 동작 상태"를 참고한다.
    • 백업 노드에 연결된 경우

      $$1 tmax1 (tmadm): gwinfo
      ----------------------------------------------------------------
        gw_no   channel    type    foreign_address              status   
      ----------------------------------------------------------------
            0   OUTCH      BACK    tmaxh2(192.168.1.48:9200)     RDY   
            1   OUTCH      BACK    tmaxh2(192.168.1.48:9200)     RDY   
            6   INCH          -     tmaxh2(192.168.1.48:58091)    RDY   
            7   INCH          -     tmaxh2(192.168.1.48:58092)    RDY

tmadmin에서 리모트 게이트웨이와의 연결 상태를 확인할 수 있는 명령어이다. 이와 더불어 현재 메인 노드와 연결되어 있는지, 백업 노드와 연결되어 있는지, 어떤 노드와 연결되어 있는지의 상세한 정보를 확인할 수 있다.

txgwinfo(txgwi)는 Tmax 게이트웨이의 정보를 확인하며, nontxgwinfo(ntxgwi)는 Tmax Non 트랜잭션(TMAXNONTX) 게이트웨이의 정보를 확인한다.

  • 사용 방법

    • txgwinfo

      $$1 tmax1 (tmadm): txgwinfo
    • nontxgwinfo

      $$1 tmax1 (tmadm): nontxgwinfo
  • 예제

    다음은 명령어 사용 예제이다.

    • txgwinfo

      10/user2/starbj81>tmadmin
      --- Welcome to Tmax Admin (Type "quit" to leave) --- 
      
      $$1 tmaxs1 (tmadm): txgwinfo
      ----------------------------------------------------------------
        gw_no   channel    type    foreign_address              status   
      ----------------------------------------------------------------
         0   OUTCH      PRIM    tmaxc1(192.168.1.12:9400)     RDY   
         1   OUTCH      PRIM    tmaxc1(192.168.1.12:9400)     RDY   
         4   INCH          -     tmaxc1(192.168.1.12:1434)     RDY   
         5   INCH          -     tmaxc1(192.168.1.12:1436)     RDY   
         6   INCH          -     tmaxh2(192.168.1.48:58094)    RDY   
         7   INCH          -     tmaxh2(192.168.1.48:58093)    RDY   

      다음은 명령어를 실행하면 조회되는 결과에 대한 설명이다.

      항목설명
      gw_no게이트웨이 번호이다.
      channel채널이 INBOUNT인지, OUTBOUND인지를 표시한다.
      type현재 메인과 연결되어 있는지 백업과 연결되어 있는지를 표시한다.
      foreign_address연결되어 있는 리모트 게이트웨이의 IP 주소이다.
      statuswebt, jtmax, webtasync와의 연결상태이다. 상태에 대한 자세한 설명은 "시스템 동작 상태"를 참고한다.
    • nontxgwinfo

      다음은 백업 노드와 연결되어 있을 경우의 예제이다.

      $$1 tmax1 (tmadm): nontxgwinfo
      ----------------------------------------------------------------
        gw_no   channel    type    foreign_address              status   
      ----------------------------------------------------------------
            0   OUTCH      BACK    tmaxh2(192.168.1.48:9200)     RDY   
            1   OUTCH      BACK    tmaxh2(192.168.1.48:9200)     RDY   
            6   INCH          -     tmaxh2(192.168.1.48:58091)    RDY   
            7   INCH          -     tmaxh2(192.168.1.48:58092)    RDY

tmadmin에서 JTmax나 WebtAsync와의 연결 상태를 확인할 수 있는 명령어이다. 이와 더불어 현재 메인과 연결되어 있는지 백업과 연결되어 있는지 상세한 정보를 확인할 수 있다.

jgwinfo는 Java(JEUS) 게이트웨이의 정보를 확인하며, ajgwinfo는 Async Java(ASYNC_JEUS) 게이트웨이의 정보를 확인한다.

  • 사용 방법

    • jgwinfo

      $$1 tmax1 (tmadm): jgwinfo
    • ajgwinfo

      $$1 tmax1 (tmadm): ajgwinfo

  • 예제

    • jgwinfo

      다음은 명령어 사용 예제이다.

      10/user2/starbj81>tmadmin
      --- Welcome to Tmax Admin (Type "quit" to leave) --- 
      
      $$1 tmaxs1 (tmadm): jgwinfo
      -------------------------------------------------------------------------------
       gw_no name            channel type  foreign_address                    status
      -------------------------------------------------------------------------------
           0 gw1             OUTCH   PRIM  unknown(192.168.35.47:6555)         RDY     

      다음은 명령어를 실행하면 조회되는 결과에 대한 설명이다.

      항목설명
      gw_no게이트웨이 번호이다.
      name게이트웨이명이다.
      channelINBOUNT channel인지, OUTBOUND channel인지를 표시한다.
      type현재 메인과 연결되어 있는지, 백업과 연결되어 있는지를 표시한다.
      foreign_address연결되어 있는 리모트 게이트웨이의 IP 주소이다.
      statuswebt, jtmax, webtasync와의 연결상태이다. 상태에 대한 자세한 설명은 "시스템 동작 상태"를 참고한다.
    • ajgwinfo

      다음은 백업과 연결되어 있을 경우의 예제이다.

      10/user2/starbj81>tmadmin
      --- Welcome to Tmax Admin (Type "quit" to leave) --- 
      
      $$1 tmax1 (tmadm): ajgwinfo
      -------------------------------------------------------------------------------
       gw_no name            channel type  foreign_address                    status
      -------------------------------------------------------------------------------
           1 gw2             OUTCH   BACK  unknown(192.168.35.47:6555)         RDY 

환경 파일 NODE 절의 SMSUPPORT가 'Y'로 설정되어 있을 경우, 'st –p –x'를 실행하면 수행 중인 서비스에 대해서 해당 GID를 출력한다.

  • 사용 방법

    $$1 tmax1 (tmadm): smtrc [-a] GID0 GID1
    항목설명
    [-a]기존 정보 외에 서버 프로세스 인덱스(spri), 사용자 CPU 사용 시간, 시스템 CPU 사용 시간, 반환 정보 등을 모두 표시한다
    GID0SysMaster의 GID 상위 4Byte를 Hexa decimal로 표기한다.
    GID1SysMaster의 GID 하위 4Byte를 Hexa decimal로 표기한다.
  • 예제

    다음은 'st –p –x'를 수행한 후 서비스에 대해서 해당 GID를 출력하기 위해 smtrc를 수행하는 예제이다.

    $$1 tmax1 (tmadm): st –p -x
    
    CLH 0:
    --------------------------------------------------------------
    svr_name    svgname    spr_no  status    count    avg     svc
                   PID     fail_cnt  err_cnt  min_time  max_time
                   SysMaster_GID
    --------------------------------------------------------------
       evtsvr     svg1       36      RDY         0      0.000     -1
                    17980      0       0        0.000    0.000
                    00000000-00000000-00000000
       svr1         svg1      37     RUN         0      0.000    SDLTOUPPER
                    17981      0       0       0.000    0.000 
                    00000000-00000101-00000000
       svr2         svg1      38    RUN          0      0.000   SDLTOUPPER2
                    17982      0      0       0.000      0.000
                    00000000-00080101-00000000
       svr3         svg1      39    RUN          0      0.000   SDLTOUPPER3
                    17983      0      0       0.000      0.000
                    00000000-00100101-00000000
       svr_sys      svg1     40     RDY         3      0.000     -1
                    17984      0      0      0.000      0.000
                    00000000-00000000-00000000
    ----------------------------------------------------------------
       TOTAL COUNT = 3
       TOTAL SVCFAIL COUNT = 0
       TOTAL ERROR COUNT = 0
       TOTAL AVG = 0.000
       TOTAL RUNNING COUNT = 3
    
    $$1 tmax1 (tmadm): smtrc 0 0101 
    CLH 0: 
    ------------------------------------------------------------- 
       sysmaster_global_id              status             svc_name 
    ------------------------------------------------------------- 
    00000000:00000101:00000000        SVC_RUNNING         SDLTOUPPER2 
    
    45670701 tmaxi1 (tmadm): smtrc -a 0 0101 
    CLH 0: 
    ---------------------------------------------------------------- 
       sysmaster_global_id              status             svc_name 
       ctime          svctime    spri    ucpu    scpu 
    ---------------------------------------------------------------- 
    00000000:00000101:00000000        SVC_RUNNING         SDLTOUPPER2 
    14:05:32:159       0.000     38     0.000   0.000 
    00000000:00000101:00010000        SVC_RUNNING         SMTRACE 
    14:05:32:159       0.000     40     0.000   0.000 
    00000000:00000101:00010000        SVC_DONE            SMTRACE 
    14:05:32:159       0.000     40     0.000   0.000 

    다음은 명령어를 실행하면 조회되는 결과에 대한 설명이다.

    항목설명
    sysmaster_global_idSysMaster의 gid이다.
    status서비스 상태이다.
    svc_name서비스명이다.
    ctime로그를 생성한 시간이다.
    svctime서비스 수행시간이다.
    spri서비스를 실행한 서버 프로세스 인덱스이다.
    ucpu사용자 cpu time 이다.
    scpu시스템 cpu time 이다.

clhsinfo는 멀티 노드 환경에서 각각의 CLH 사이 연결 상태 정보를 확인할 수 있다. 멀티 노드 환경에서는 서로 다른 노드 간의 연결이 반드시 이루어져야 한다. 하지만 방화벽이나 장비 노후로 인해 네트워크가 불안정한 경우에는 노드 사이의 연결이 끊어져 정상적인 서비스가 이루어질 수 없는 경우가 있다. 이와 같은 문제를 확인할 수 있는 명령어로 clhsinfo, tmmsinfo가 추가되었다.

현재 접속된 클라이언트의 환경 정보를 조회한다.

현재 처리 중인 트랜잭션 정보를 조회한다.

  • 사용 방법

    $$1 tmax1 (tmadm): txquery(txq) [-x] [-t] [-g svgname] [-w [-r] [-G gwname]] 
                                    [<upper-global-xid><lower-global-xid>]
    옵션설명
    [ -x ]트랜잭션 브랜치별 상세 정보를 조회한다.
    [ -g svgname ]svgname의 그룹에 대한 트랜잭션 브랜치를 조회한다.
    [ -w ]도메인 서브 트랜잭션 트리에 대해 조회한다.
    [ -r ]리모트 도메인의 XID로 검색한다.
    [ -G gwname]gwname의 도메인 게이트웨이에 대해 조회한다.
    [ -t ]리모트로부터 시작된 트랜잭션 중 pending으로 인해 commit이나 rollback이 결정되지 않는 xid와 svgno를 조회한다.
    upper-global-xid검사하고자 하는 xid의 gtid 의 앞의 4Byte이다.
    lower-global-xid검사하고자 하는 xid의 gtid 의 뒤의 4Byte이다.

현재 사용 가능한 RQ의 상태를 보여주거나 디스크 큐에 쌓여있는 서비스를 사용자가 처리할 수 있다.

응용 서버 프로그램 에러 등으로 더 이상의 업무 처리가 불가능한 경우 이를 해결하기 위해 동작 중인 서버 프로세스를 중지시키는 경우 사용하는 기능이다. 명령어가 실행되면 중지된 서버 프로세스가 현재 처리 중인 서비스를 정상 완료한 후 동작을 중지하고, 큐에 있는 서비스는 대기 상태가 된다. 계속적으로 요청되는 서비스는 모두 큐에 쌓인다. suspend 명령어의 약어는 sp이다.

  • 사용 방법

    $$1 tmax1 (tmadm): suspend {-s svc_name [-p pid] | -v svr_name [-k num] [-a]}
    옵션설명
    -s svc_name서비스명이다.
    [-p pid]서비스를 서버 프로세스별로 suspend하는 옵션으로 [-s] 옵션과 함께 사용된다.
    -v svr_name

    서버 프로세스의 스케줄링을 막는 옵션이다. 요청된 서비스는 큐에 대기하며, resume 될 때까지 대기하거나 MAXQCOUNT, CLHQTIMEOUT 설정에 의해 큐에서 제거될 수 있다.

    [-k num]

    대상 서버 중 일부 프로세스들을 suspend 하는 옵션이다. [-v] 옵션과 함께 사용된다. 옵션으로 지정한 개수만큼 suspend시키며, 이미 일부 서버 프로세스가 suspend 된 경우에는 옵션 설정값만큼 추가로 suspend된다. 옵션 설정값은 해당 서버의 MAX를 초과할 수 없다.

    서버 프로세스별로 suspend 상태를 확인하려면 stat -p -X 명령을 실행한다.

    suspend(sp) -v svr_name [-k 5]

    [-k] 옵션을 사용하여 서버 프로세스가 MAX개 모두 suspend되면 서버의 상태는 BLK로 바뀌게 된다. [-k] 옵션 없이 sp -v svr_name을 실행한 것과 동일하다.

    [-a]suspend를 요청했을 때 대상이 되는 서버가 서비스를 실행 중인 경우에는 서비스가 종료될 때까지 대기하게 된다. 이 옵션을 사용하면 대상 서버가 서비스를 실행중이더라도 대기하지 않고 즉시 Suspend 상태로 변경한다. [-v] 옵션과 함께 사용된다.

동작이 중지된 서버 프로세스의 활동을 재개한다. 활동이 재개된 서버 프로세스는 큐에 대기 중이던 서비스를 처리하기 시작하며 요청되는 서비스에 대해 처리 가능한 상태가 된다. resume 명령어의 약어는 rs이다.

  • 사용 방법

    $$1 tmax1 (tmadm): resume {-s svc_name [-p pid] | -v svr_name [-k num]}

    옵션설명
    -s svc_name서비스의 스케줄링을 재개하는 옵션이다.
    [-p pid]

    서비스를 서버 프로세스별로 재개한다. 서비스를 서버 프로세스별로 suspend / resume하고자 할 때 suspend를 수행할 경우 관련 서비스가 수행 중이면 수행이 완료된 후에 suspend가 진행되므로 시간이 오래 걸릴 수 있다. 이 경우 tmadmin을 강제 종료시키면 해당 서비스가 재개된다. suspend 이후 해당 서비스에 대한 요청은 큐에 쌓이게 된다. [-s] 옵션과 함께 사용된다.

     resume(rs) -s svc_name [-p pid]
    -v svr_name서버 프로세스의 스케줄링을 재개하는 옵션이다.
    [-k num]

    대상 서버 중 일부 프로세스들을 resume하는 옵션이다. [-v] 옵션과 함께 사용된다. 옵션으로 지정한 개수만큼 suspend된 서버 프로세스를 resume시키며, 이미 모든 서버 프로세스가 suspend 상태가 아니라면 명령은 취소된다. 옵션 설정값은 해당 서버의 MAX를 초과할 수 없다.

    서버 프로세스별로 suspend 상태를 확인하려면 stat -p -X 명령을 실행한다.

    resume(rs) -v svr_name [-k 5]

    -k 옵션을 사용하여 서버 프로세스가 하나라도 resume 되면 서버의 상태는 RDY로 바뀌게 된다. 만약 기동되어 있는 프로세스가 없다면 NRDY 상태가 된다.

다음은 resume과 관련된 설명이다.

  • suspend 상태의 서버를 resume 처리하는 방식 변경

    Tmax 버전에 따라 동작 방식이 다르므로 주의해야 한다.

    • Tmax v4.0 SP3 Fix10, Tmax v4.0 SP8 Fix1, Tmax v5.0 SP1 Fix1 이후

      tmadmin에서 서버 프로세스를 suspend한 경우에 해당 프로세스를 tmdown 후 tmboot 하더라도 Suspend 상태가 그대로 유지된다. 또한 서버 프로세스가 Suspend 상태에 있어도 tmboot 로 프로세스를 기동시킬 수 있다. 따라서 suspend 된 서버를 tmboot 로 기동시킨 다음에는 반드시 resume을 해주어야 서비스가 가능하다.

    • Tmax v4.0 이후

      tmadmin에서 서버 프로세스를 suspend한 경우에 해당 프로세스를 tmdown 후 tmboot하면 해당 프로스세의 status가 자동으로 재개된다. 서버 프로세스가 suspend된 상태에서는 해당 프로세스를 tmboot할 수 없도록 제한한다.

      $ tmboot -s svr02011
         TMBOOT for node(tmaxh4) is starting: 
         Welcome to Tmax demo system: it will expire 2006/1/25 
         Today: 2005/12/19 
         (E) BOOT3020 svr02011 is suspended, resume(or tmdown) it first. [BOOT0038]
  • 한 노드의 COUSIN 그룹에 속한 서버에 대한 suspend / resume

    한 노드에 2개 이상의 서버 그룹이 COUSIN으로 설정된 경우 COUSIN 서버 그룹에 속한 모든 서버에 대하여 suspend / resume이 적용된다.

주의

ASQCOUNT은 SVRGROUP 절에서 설정을 하며, 서버 프로세스를 BLK으로 설정하기 위해선 [-v] 옵션을 사용해야 한다.

tmadmin의 advertise/unadvertise 명령어를 통하여 특정 서비스명을 등록 및 등록해제할 수 있다.

특정 서비스를 등록(advertise)할 경우, CLH가 관리하는 서버별 서비스의 이름 테이블에 해당 서비스의 이름을 등록할 수 있으며 unadvertise할 경우 서버별 서비스의 이름 테이블에서 삭제된다.

등록(advertise)은 서버 프로세스의 서버가 제공하는 새로운 서비스를 등록할 수 있도록 하며 등록해제(unadvertise)는 그 서버가 제공하는 서비스를 등록해제할 수 있도록 한다. 등록해제된 서비스를 호출하고자 할 경우 TPENOENT 에러를 수신한다. 특정 서비스가 하나의 서버 프로세스에서 등록해제(unadvertise)가 되었다 하더라도, 다른 서버 프로세스에서 제공되고 있으면 여전히 서비스 루틴을 수행할 수 있게 된다.

  • 사용 방법

    • 등록(advertise)

      $$1 tmax1 (tmadm): advertise {-s svc_name [-p pid]}
      옵션설명
      -s svc_name서비스명을 등록한다.
      [-p pid]서버 프로세스 PID를 등록한다.
    • 등록해제(unadvertise)

      $$1 tmax1 (tmadm): unadvertise {-s svc_name [-p pid]}
      옵션설명
      -s svc_name서비스명을 등록 해제한다.
      [-p pid]서버 프로세스 PID를 등록 해제한다.

rbs(Reboot Server Process)는 현재 사용 중인 서버 프로세스를 새로운 프로세스로 변경한다. TMAX_BKAPPDIR를 '.profile'의 환경변수에 지정하고 새로운 프로그램의 실행 파일로 지정한다.

예를 들어 $TMAXDIR/bk_appbin에 옮기고 다음의 명령어를 수행한다.

  • 사용 방법

    $$1 tmax1 (tmadm): rbs new_file old_file
    항목설명
    new_file새 파일명을 지정한다.
    old_file사용 중인 파일명을 지정한다.

rbs 수행 과정

다음은 rebootsvr(rbs) 수행 과정이다.

  1. .profile에 아래와 같이 환경변수를 추가한다.

    export TMAX_BKAPPDIR=/data2/starbj81/tmax64/bk_appbin
  2. 환경변수에 설정해준 것과 동일한 위치에 bk_appbin 디렉터리를 생성한다.

    $mkdir bk_appbin
  3. appbin 디렉터리에 있는 실행 파일을 bk_appbin 디렉터리로 복사한다.

    $cp appbin/svr2 bk_appbin/
  4. tmadmin -m을 실행한 후 rbs를 실행한다.

    • 서버가 MIN=1 && MAX=1이거나 기동되어 있지 않을 경우 서버 교체 과정에서 suspend와 resume이 이루어진다.

      다음은 현재 MIN=1, MAX=1인 svr2 서버 프로세스가 기동되는 예이다.

      $$1 tmax1 (tmadm): rbs svr2 svr2
      >> suspend ok 
      >> down ok 
      >> cp ok 
      >> boot ok 
      >> resume ok 
      >> reboot svr /data2/starbj81/tmax64/appbin/svr2 finished
    • 그 이외의 경우 서버 프로세스를 순차적으로 종료/기동시키며 교체를 시킨다.

      다음은 현재 MIN=3인 svr2 서버 프로세서가 기동되는 예이다.

      $$1 tmax1 (tmadm): rbs svr2 svr2
      TMBOOT for node(tmaxh2) is starting: 
              TMBOOT: SVR(svrname: svr2, execname: _rbs00_svr2) is starting: 
               Fri Dec 19 11:21:06 2003 
      TMBOOT for node(tmaxh2) is starting: 
              TMBOOT: SVR(svrname: svr2, execname: _rbs00_svr2) is starting: 
              Fri Dec 19 11:21:06 2003 
      TMBOOT for node(tmaxh2) is starting: 
              TMBOOT: SVR(svrname: svr2, execname: _rbs00_svr2) is starting: 
              Fri Dec 19 11:21:06 2003 
      
      >> 3 servers booted using tmp execfile _rbs01_svr2
      >> reboot svr /data2/starbj81/tmax64/appbin/svr2 finished
  5. ps를 이용하여 서버 프로세스가 정상적으로 기동되었는지 확인한다.

    • 현재 3개의 svr2 서버 프로세스가 기동된 경우

      $ps –ef | grep svr2
      starbj81 21710     1  0 11:46:32 pts/ts    0:00 _rbs00_svr2 -b -21709 
                        -S svr2 -s svr2 -d -1 -v 21689
      starbj81 21713     1  0 11:46:32 pts/ts    0:00 _rbs00_svr2 -b -21712 
                        -S svr2 -s svr2 -d -1 -v 21689
      starbj81 21716     1  0 11:46:32 pts/ts    0:00 _rbs00_svr2 -b -21715 
                       -S svr2 -s svr2 -d -1 -v 21689
    • 현재 1개의 svr2 서버 프로세스가 기동된 경우

      $ps –ef | grep svr2
      starbj81 21607     1  0 11:43:46 pts/ts    0:00 svr2 -s svr2 -g 2

해당 이름의 서버 프로세스가 2개 이상일 경우, 해당 프로세스를 모두 종료시키고 새로운 프로세스를 기동시켜 처리를 하게 되면 업무의 공백상태가 발생하게 된다. 따라서 이 경우 서버 프로세스를 하나씩 종료시키면서 기동된다. 예를 들어 svr1 서버의 MIN=2인 상황에서 rbs를 실행시켰을 경우 다음과 같은 순서로 rbs가 수행된다.

  1. svr1 1을 종료한다.

  2. bk_appbin 디렉터리에 임시파일(_rbs00_svr1)을 복사한다.

  3. _rbs00_svr1이 기동한다.

  4. svr1 2를 종료한다 .

  5. bk_appbin 디렉터리에 임시파일(_rbs00_svr1)을 복사한다.

  6. _rbs00_svr1이 기동한다.

동시성 보장 서버 교체

동시성 보장은 서로 다른 버전의 프로세스가 동시에 서비스를 수행하지 않도록 제한하는 것을 의미한다. rbs 수행할 경우 동시성 보장 및 변경되지 않은 서비스에 대한 무중단 서버 프로세스 교체가 가능하다.

  • 사용 방법

    $$1 tmax1 (tmadm): rbs [-S | -s svc_name,...] newfile svr_name [svg_name]
    항목설명
    [-S]해당 서버의 전체 서비스를 suspend한다.
    [-s svc_name,...]해당 서버의 하나의 서비스를 suspend한다.
    newfile새 파일명을 지정한다.
    svr_namesuspend 대상의 서버명이다.
    [svg_name]suspend 대상의 서버가 속한 서버 그룹이다.

멀티 노드 동시성 보장 서버 교체

멀티 노드 동시성 보장은 멀티 노드에서 서로 다른 버전의 프로세스가 동시에 서비스를 수행하지 않도록 제한하는 것을 의미한다. 부하 분산이 설정된 멀티 노드에서 rbs를 수행할 때 동시성 보장 및 변경되지 않은 서비스에 대한 무중단 서버 프로세스 교체가 가능하다.

  • 사용 방법

    $$1 tmax1 (tmadm): mrbs [-S | -s svc_name,...] newfile svr_name 
    항목설명
    [-S]해당 서버의 전체 서비스를 suspend한다.
    [-s svc_name]해당 서버의 하나의 서비스를 suspend한다.
    newfile새 파일명을 지정한다.
    svr_namesuspend 대상의 서버명이다.

한 노드의 COUSIN 그룹에 속한 서버에 대한 rbs

한 노드에 2개 이상의 서버 그룹이 COUSIN으로 설정된 경우 COUSIN 서버 그룹에 속한 모든 서버에 대하여 rbs(서버 교체)가 가능하다.

cfgadd(ca)는 Tmax 운영 도중, 특정 서버 프로그램에 서비스가 추가될 때에 해당 서버만 다운시킨 후 이 명령을 사용하여 동적으로 서비스를 추가할 수 있다. 서비스 외에도 서버, 서버 그룹, 노드를 운영 중에 동적으로 추가할 수 있다. Tmax 5.0부터는 CFL의 –a 옵션을 사용하지 않고 생성한 이진 환경 파일을 동적 추가할 수 없으므로 반드시 -a 옵션을 이용해서 환경 파일을 컴파일해야 한다.

cfgadd를 사용하여 동적 추가를 하고 Tmax를 재기동할 경우 원본 환경파일에 추가한 환경파일의 내용을 추가하고 cfl로 환경파일을 컴파일 후 운영하여야 한다.

cfgadd(ca)를 사용하여 서비스를 동적으로 추가할 때 제약사항은 절 5.5.6. “cfgadd(ca) 사용하여 동적 추가할 때 제약사항”을 참고한다.

  • 사용 방법

    $$1 tmax1 (tmadm) :  cfgadd (ca)  - i  cfgfile
    항목설명
    - i cfgfile추가할 서비스의 환경 파일명을 지정한다.

서비스 동적 추가

다음은 서비스 동적 추가에 해당하는 cfgadd(ca) 수행 과정이다.

  1. 해당 추가할 환경 파일을 생성한다.

    $vi new.m
  2. 새로 만든 환경 파일을 기존 환경 파일에 -a 로 추가하고, cfl로 –o 옵션을 사용하여 다른 이름의 바이너리 환경 파일을 생성한다.

    $cfl -i org.m -a new.m -o tmchg
  3. gst로 서비스 테이블을 생성한다.

    $gst -f tmchg
  4. "tmadmin –m"을 수행하고, cfgadd(ca)를 이용하여 서비스를 추가한다.

    $cfgadd -i tmchg
  5. 해당 서버 프로그램을 컴파일한다.

    $compile c svr1
  6. 해당 서버 프로세스를 기동한다.

    $tmboot –S svr1

서버 동적 추가

다음은 서버 동적 추가에 해당하는 cfgadd(ca) 수행 과정이다.

  1. 새로운 서버 추가 환경 파일 tmchg.m을 만든 후 추가 환경만 등록한다.

    <tmchg.m>

    *SERVER
    hello           SVGNAME = svg1
    *SERVICE
    HELLO           SVRNAME = hello
  2. 환경 파일을 컴파일한다. tmconfig.m은 기존의 환경 파일, tmchg.m은 서버 추가 환경 파일을 의미한다.

    cfl -i tmconfig.m -a tmchg.m -o tmchg
  3. 서비스 테이블을 생성한다.

    gst -f tmchg
  4. cfgadd -i로 환경 파일을 추가한다.

    tmaxi1@dhjang ./config > tmadmin -m
    $$3 tmaxi1 (tmadm): si
    -------------------------------------------------------------
    clh  svrname (svri) status   count   qcount   qpcount  emcount
    -------------------------------------------------------------
    0   tmaxgw  (  0)    RDY      0        0        0        0
    0   toupper ( 18)    RDY      0        0        0        0
    
    $$4 tmaxi1 (tmadm): cfgadd -i tmchg
    config is successfully added
    $$5 tmaxi1 (tmadm): si
    -------------------------------------------------------------
    clh  svrname (svri) status   count   qcount   qpcount  emcount
    -------------------------------------------------------------
    0   tmaxgw  (  0)    RDY      0        0        0        0
    0   toupper ( 18)    RDY      0        0        0        0
    0   hello   ( 19)   NRDY      0        0        0       0

    아직 hello 서버는 NRDY 상태이다.

  5. tmboot -S hello -f tmchg를 입력한다.

    tmaxi1@dhjang ./config > tmboot -S hello -f tmchg
    TMBOOT for node(tmaxi1) is starting:
    Welcome to Tmax demo system: it will expire 2002/8/31
    Today: 2002/8/19
            TMBOOT: SVR(hello) is starting: Mon Aug 19 15:37:44 2002
  6. tmadmin에서 hello 서버가 RDY 상태인지 확인한다.

    $$6 tmaxi1 (tmadm): si
    -------------------------------------------------------------
    clh  svrname (svri) status   count   qcount   qpcount  emcount
    -------------------------------------------------------------
    0   tmaxgw  (  0)    RDY      0        0        0        0
    0   toupper ( 18)    RDY      0        0        0        0
    0   hello   ( 19)    RDY      0        0        0       0 

서버 그룹 동적 추가

서버 그룹을 동적으로 추가하는 방법은 새로운 추가 환경 파일만 조금 다르고 나머지는 동일하다. 새로 등록되는 서버 그룹과 서버와 서비스를 추가 환경 파일로 만든다. 그외의 과정은 서버를 동적으로 추가하는 방법과 동일하다.

<tmchg.m>

*SVRGROUP
svg2        NODENAME = "aix5l"

*SERVER
svr3        SVGNAME = svg2, MIN = 1, MAX = 10

*SERVICE
FDLTOUPPER  SVRNAME = svr3
FDLTOLOWER  SVRNAME = svr3

노드 동적 추가

cfgadd를 이용하여 노드를 동적으로 추가할 수 있다. 또한 COUSIN 서버 그룹이 속한 노드도 동적으로 추가할 수 있다.

다음은 노드 동적 추가에 해당하는 cfgadd(ca) 수행 과정이다.

  1. 환경 파일을 작성한다.

    <tmconfig.m>

    *DOMAIN
    tmax1           SHMKEY = @SHMEMKY@, MINCLH = 1, MAXCLH = 3,
                    TPORTNO = @TPORTNO@, BLOCKTIME = 300, MAXCPC = 100,
                    RACPORT = @TRACPORT@
    *NODE
    @HOSTNAME@      TMAXDIR = "@TMAXDIR@",
                    APPDIR  = "@TMAXDIR@/appbin",
    @RMTNAME@       TMAXDIR = "@RMTDIR@",
                    APPDIR  = "@RMTDIR@/appbin",
                    
    *SVRGROUP
    svg1            NODENAME = "@HOSTNAME@",COUSIN = "svg2",LOAD = 2
    svg2            NODENAME = "@RMTNAME@",LOAD = 1
    
    *SERVER
    svr2            SVGNAME = svg1
    
    *SERVICE
    TOUPPER         SVRNAME = svr2
    TOLOWER         SVRNAME = svr2

    <tmconfig_add.m>

    *NODE
    @RMTNAME2@      TMAXDIR = "@RMTDIR2@",
                    APPDIR  = "@RMTDIR2@/appbin",
    
    *SVRGROUP
    svg1            NODENAME = "@HOSTNAME@",COUSIN = "svg2,svg3",LOAD = 2
    svg3            NODENAME = "@RMTNAME2@",LOAD = 1
  2. 추가된 새로운 노드에 racd를 기동한다.

    Node3>$ racd -k
  3. 환경 파일을 컴파일한다. 새로운 노드가 추가된 환경 파일 tmconfig_add.m을 컴파일한다. 컴파일할 때 –o 옵션을 사용하여 다른 이름의 이진 환경 파일을 생성한다.

    node1>$cfl -i tmconfig.m -a tmconfig_add.m –o tmchg
    CFL is done successfully for node(node1)
    
    CFL: rcfl start for rnode (node2)
    CFL is done successfully for node(node2)
    
    CFL: rcfl start for rnode (node3)
    CFL is done successfully for node(node3)
  4. 서버를 컴파일한다. 새로 추가할 노드의 서버를 컴파일한다.

    node3>$ gst -f tmchg
    node3>$ compile c svr2
  5. 동적 노드를 추가한다. tmadmin의 cfgadd 명령어를 통하여 동적으로 노드를 추가한다. 각각의 노드에서 tmadmin –l 로 모두 해당 명령어를 실행해야 한다는 점에 주의한다.

    다음은 node1, node2가 존재하는 상황에서 node3를 추가할 경우에 대한 예제이다.

    # node1
    $ node1>tmadmin –l -m
    --- Welcome to Tmax Admin (Type "quit" to leave) --- 
    
    $$2 node1 (tmadm): cfgadd -i tmchg
    (I) TMM0211 General Infomation : CFGADD started [TMM0902]
    (I) TMM0211 General Infomation : CFGADD completed [TMM0907]
    config is successfully added 
    
    # node2
    $ node2>tmadmin –l -m
    --- Welcome to Tmax Admin (Type "quit" to leave) --- 
    
    $$2 node2 (tmadm): cfgadd -i tmchg
    (I) TMM0211 General Infomation : CFGADD started [TMM0902]
    (I) TMM0211 General Infomation : CFGADD completed [TMM0907]
    config is successfully added 
  6. 새로 추가된 노드(node3)를 기동한다.

    Node3>tmboot -n tmaxh4 -f tmchg
    TMBOOT for node(tmaxh4) is starting: 
    Welcome to Tmax demo system: it will expire 2008/11/23 
    Today: 2008/9/24 
            TMBOOT: TMM is starting: Wed Sep 24 11:11:59 2008 
            TMBOOT: CLL is starting: Wed Sep 24 11:11:59 2008 
    (I) TMM0211 General Infomation : node register (nodeno = 0(0)) success [TMM0404]
    (I) TMM0211 General Infomation : node register (nodeno = 1(1)) success [TMM0404]
            TMBOOT: CLH is starting: Wed Sep 24 11:11:59 2008 
    (I) CLH9991 Current Tmax Configuration: Number of client handler(MINCLH) = 1
                    Supported maximum user per node = 7966
                    Supported maximum user per handler = 7966 [CLH0125]
            TMBOOT: TLM(tlm) is starting: Wed Sep 24 11:11:59 2008 
            TMBOOT: SVR(svr2) is starting: Wed Sep 24 11:11:59 2008
  7. 새로 추가된 노드를 확인한다. 노드가 정상적으로 추가되었는지 확인한다.

    node1>tmadmin
    TMADMIN for rnode (node2): starting to connect to RAC
    TMADMIN for rnode (node3): starting to connect to RAC
    --- Welcome to Tmax Admin (Type "quit" to leave) --- 
    
    $$1 node1 (tmadm): ti
    
    Tmax System Info: DEMO version 4.0 SP #3 Fix #8: 
    
             expiration date = 2008/11/22 
             maxuser = UNLIMITED, 
             domaincount = 1, 
             nodecount = 3, 
             svgrpcount = 3, 
             svrcount = 9, svccount = 6
             rout_groupcount = 0, rout_elemcount = 0
             cousin_groupcount = 1, cousin_elemcount = 3
             backup_groupcount = 0, backup_elemcount = 0
    
    Tmax All Node Info: nodecount = 3: 
    ----------------------------------------------------------------
      no   name     portno  racport  shmkey  shmsize  minclh  maxclh  
    ----------------------------------------------------------------
       0   node1     8350    3155     88350   225760       1      3   
       1   node2     8350    3155     88350   225760       1      3   
       2   node3     8350    3155     88350   225760       1      3   
    
    $$2  (tmadm): st -s
    
    CLH 0: 
       --------------------------------------------------------------
       svc_name    svr_name   count cq_cnt  aq_cnt  q_avg   avg   status
       --------------------------------------------------------------
       TOLOWER       svr2         0       0       0     0.000   0.000  RDY
       TOUPPER       svr2         0       0       0     0.000   0.000  RDY
       
    Msg from rnode(node2): 
    
    CLH 0: 
       --------------------------------------------------------------
       svc_name    svr_name   count cq_cnt  aq_cnt  q_avg   avg   status
       --------------------------------------------------------------
       TOLOWER       svr2         0       0       0     0.000   0.000  RDY
       TOUPPER       svr2         0       0       0     0.000   0.000  RDY
    
    Msg from rnode(node3): 
    
    CLH 0: 
       --------------------------------------------------------------
       svc_name    svr_name   count cq_cnt  aq_cnt  q_avg   avg   status
       --------------------------------------------------------------
       TOLOWER       svr2         0       0       0     0.000   0.000  RDY
       TOUPPER       svr2         0       0       0     0.000   0.000  RDY

cfgadd(ca) 사용하여 동적 추가할 때 제약사항

cfgadd(ca)를 사용하여 서비스, 서버, 서버 그룹, 노드 등을 동적으로 추가할 때 아래와 같은 제약사항이 있다.

  • 각 항목에 대해서 추가만 가능하며 제거는 할 수 없다. 제거를 위해서는 기존 환경 파일에서 항목을 제거하고 cfl을 실행한 다음에 Tmax를 재기동해야만 한다.

  • 기존 환경설정 파일에 존재하는 이름의 항목이 새로 추가하는 환경설정 파일에 중복해서 존재하면 안된다.

  • 새로 추가된 환경설정 파일의 내용을 기존 환경설정 파일에 적용하는 경우에는 반드시 각 절의 마지막에 추가되어야 한다. 추가된 항목을 기존 환경설정의 중간에 넣거나 순서를 변경하면 운영환경의 정보가 비정상적으로 변경될 수 있으므로 반드시 주의해야 한다.

  • 새로운 항목을 추가할 때, cfl -i 옵션에 사용하는 기존 환경설정 파일은 항상 마지막에 새로 추가한 환경설정 파일의 내용이 기존 환경설정 파일에 적용되어 있어야 한다.

  • MAXNODE, MAXSVG, MAXSVR, MAXSPR, MAXSVC, MAXTMS, MAXCPC 설정 이내에서 항목을 추가할 수 있음을 유의한다. 그리고 해당 항목의 값을 변경해서는 안된다.

  • 서버 그룹을 추가할 때 XA 서버 그룹인 경우에는 TMS를 지정하고, 해당 프로그램이 생성되어 있는지 확인한다.

  • RQ는 동적 추가를 할 수 없다.

  • COUSIN / BACKUP이 있는 서버 그룹을 추가 및 제거할 수 없다.

  • COUSIN / BACKUP이 있는 게이트웨이를 추가 및 제거할 수 없다.

  • COUSIN / BACKUP이 있는 서버 그룹에 동적으로 추가된 서비스를 제거할 수 없다.

  • 서비스, 서버, 서버 그룹, 노드를 추가할 때 CFL을 이용해 동적추가를 위한 이진 환경 파일을 생성해야 한다. CFL의 –a 옵션을 사용하지 않고 만든 이진 환경 파일을 동적 추가하면 다음과 같은 에러 메시지가 출력된다.

    (E) ADM2048 Engine type mismatch (0): 'a' option must be used [ADM0417]

업무의 폭주 현상이 발생하여 많은 업무가 쌓여 정상적으로 거래를 처리하지 못하는 경우, 현재 큐에 누적되어 있는 서비스 요청을 삭제하는 기능이다. 하루에도 수십 만 건의 업무를 처리하는 은행이나 관공서에서 유용하게 사용될 수 있는 기능이다.

삭제된 업무는 클라이언트의 재요청을 통해 다시 처리될 수 있다. Tmax에서는 서버 프로세스별로 큐를 관리하여 관리자는 특정 서버별로 큐를 삭제할 수 있어 타 업무의 효과적인 수행에도 도움을 준다.

Queue Purge 명령어의 약어는 qp로 삭제된 서비스는 클라이언트에게 TPEQPURGE(tperrno = 27)를 반환한다. 따라서 클라이언트는 이에 맞게 적절한 대처를 할 수 있다. qp의 내역과 삭제된 클라이언트 ID는 slog에 함께 기록된다.

  • 사용 방법

    $$1 tmax1 (tmadm): qpurge {-v svr_name [-k number] | -s svc_name}
    항목설명
    -v svr_name큐에 쌓여있는 특정서버에 대한 요청을 삭제한다.
    [ -k number]

    서버의 큐에 쌓인 요청 중 일부를 purge시킬 수 있는 기능이다. 반드시 –v 옵션과 함께 사용해야 한다.

    number 값이 0보다 큰 수 N 이면 처음 들어온 N개의 서비스 요청만 남기고 이후에 들어온 요청을 purge시킨다.

    • -1 : 현재 큐에 대기 중인 서비스 요청 중에서 MAXQCOUNT 개수만큼의 요청만 남기고 이후에 들어온 요청들을 purge시킨다.

    • 0 : 현재 큐에 대기 중인 모든 서비스 요청들을 purge시킨다.

    -s svc_name큐에 쌓여있는 특정 서비스에 대한 요청을 삭제한다.

TMAX_TRACE는 Runtime tracing facility로 Tmax 애플리케이션의 실행에 대한 Runtime tracing이 이루어질 수 있도록 하는 기능이다. 이 기능은 환경변수 TMAX_TRACE를 설정하여 사용할 수 있으며, 시스템 운영 중에 동적으로 설정을 변경하고자 하는 경우에는 tmadmin의 chtrc 명령어를 사용할 수 있다.

  • 사용 방법

    chtrc [-g svgname |-v server| -i sprno]] -s newspec 
    옵션설명
    [-g svgname]서버 그룹의 스펙을 변경하는 경우 설정한다.
    [-v server]서버의 스펙을 변경하는 경우 설정한다.
    [-i sprno]서버 프로세스의 스펙을 변경하는 경우 설정한다.
    -s newspec변경할 스펙을 지정한다.

특정 에러 상황에 보다 신속하게 대응하기 위하여 tmadmin의 chlog 명령어를 이용하여 런타임 도중에 로그 레벨을 동적으로 변경할 수 있다. 로그 레벨 변경 기능을 사용하여 로그를 확인하기 위해서는 반드시 해당 모듈을 디버그 모드로 사용해야 한다. tmadmin의 cfg 명령어를 통하여 로그 레벨이 실제로 변경되었는지 확인할 수 있다.

  • 사용 방법

    $$1 tmaxs1 (tmadm) : chlog [-t|-c |-v [server_name]|-g [server_group_name]|-m] 
                                -l [loglvl]
    옵션설명
    [-t]TMM의 로그 레벨을 설정한다.
    [-c]CLH의 로그 레벨을 설정한다.
    [-v [server_name]]지정된 서버에 대한 로그 레벨을 설정한다.
    [-g [server_group_name]]지정된 서버 그룹에 대한 로그 레벨을 설정한다.
    [-m]TMS에 대한 로그 레벨을 설정한다.
    -l [loglvl]

    실제 로그 레벨을 설정한다.

    다음 중에 하나를 선택한다. 오른쪽으로 설정할수록 더 자세한 로그 확인이 가능하다.

    • COMPACT, BASIC, DETAIL, DEBUG1, DEBUG2, DEBUG3, DEBUG4

admin을 통해서 TCS, UCS, RDP 서버로 이벤트를 전송한다.

tmadmin에서 지정된 서버들에게 이벤트를 요청하면 해당 서버들은 사용자가 지정한 콜백함수를 호출하여 이벤트를 처리한다. 서버 프로세스에서 콜백함수가 등록되지 않았다면 해당 프로세스에 대한 이벤트는 무시된다.

주의

-l 또는 -n 옵션을 지정하지 않으면 RACD에 의해 모든 노드로 같은 요청이 전달되므로 주의한다. tmadmin의 명령이 tmm에 전달되면, tmm은 요청을 각 서버 프로세스로 전송한 뒤에 곧바로 tmadmin에 성공 리턴을 돌려준다. 따라서 실제로 각 서버 프로세스로 이벤트가 전달되었는지 여부는 확인할 수 없다. 각 서버 프로세스로 이벤트가 전달된 시점에 서비스를 수행중이라면, 서비스 수행이 끝난 뒤에 콜백함수가 호출되어 이벤트를 처리하게 된다.

tmadmin에서 응답을 받으면 콘솔에 "send request(reqno:%d(요청번호)) %d(프로세스개수) times"를 출력한 다음 이벤트를 전달할 프로세스가 존재하면 콘솔에 "send OK"를 출력하고, 이벤트를 전달받을 프로세스가 없는 경우에는 "Failed to send request"를 출력한다.

  • 사용 방법

    $$1 tmax1 (tmadm): an [-a | -g svgname | -v svrname | -p spri | -P pid] 
                          [notification message]
    옵션설명
    [-a]모든 서버 프로세스에게 이벤트를 전송한다. 필수 옵션이며, 다른 필수 옵션들과 중복하여 지정할 수 없다.
    [-g svgname]svgname에 속하는 모든 서버 프로세스에게 이벤트를 전송한다. 필수 옵션이며, 다른 필수 옵션들과 중복하여 지정할 수 없다.
    [-v svrname]svrname에 해당하는 모든 서버 프로세스에게 이벤트를 전송한다. 필수 옵션이며, 다른 필수 옵션들과 중복하여 지정할 수 없다.
    [-p spri]해당 spri의 서버 프로세스에게 이벤트를 전송한다. 필수 옵션이며, 다른 필수 옵션들과 중복하여 지정할 수 없다.
    [-P pid]해당 pid의 서버 프로세스에게 이벤트를 전송한다. 필수 옵션이며, 다른 필수 옵션들과 중복하여 지정할 수 없다.
    [notification message]콜백함수에 전달할 메시지를 입력한다. 선택 옵션이다.
  • 예제

    다음은 사용한 예제이다.

    $$2 tmaxc1 (tmadm): rc node2
    
    $$2 tmaxc1 (tmadm): rc node3 -a