제3장 환경 파일 설정

내용 목차

3.1. 개요
3.1.1. 환경 파일 형식
3.1.2. 환경 파일 작성
3.2. 기본 환경설정
3.2.1. DOMAIN 절
3.2.2. NODE 절
3.2.3. SVRGROUP 절
3.2.4. SERVER 절
3.2.5. SERVICE 절
3.2.6. GATEWAY 절
3.2.7. ROUTING 절
3.2.8. RQ 절
3.2.9. HMS 절
3.2.10. 기본 환경설정의 예
3.3. 데이터베이스 환경설정
3.3.1. SVRGROUP 절
3.3.2. 데이터베이스 환경설정의 예
3.4. 분산 트랜잭션 환경설정
3.4.1. DOMAIN 절
3.4.2. NODE 절
3.4.3. SVRGROUP 절
3.5. 부하 조절 환경설정
3.5.1. 시스템 성능에 따른 부하 조절
3.5.2. 데이터값에 따른 부하 조절
3.6. 신뢰성 큐 환경설정
3.6.1. ROUTING Name 절
3.6.2. RQ 절
3.7. HMS 환경설정
3.7.1. DOMAIN 절
3.7.2. NODE 절
3.7.3. SVRGROUP 절
3.7.4. HMS 절
3.8. 장애 대책 환경설정
3.8.1. 하드웨어적 장애
3.8.2. 소프트웨어적 장애
3.9. 보안 환경설정
3.9.1. 단계별 보안설정
3.9.2. 기타 보안 설정
3.10. 멀티 도메인 환경설정
3.10.1. DOMAIN 절
3.10.2. NODE 절
3.10.3. SVRGROUP 절
3.10.4. SERVER 절
3.10.5. SERVICE 절
3.10.6. GATEWAY 절
3.10.7. ROUTING 절
3.11. Tmax 환경 파일 컴파일
3.12. 서비스 테이블 생성
3.13. tmapm

본 장에서는 각 환경 파일을 설정하는 방법에 대해 설명한다.

3.1. 개요

Tmax 환경 파일에는 하나의 Tmax 도메인에 대한 환경설정을 한다. 도메인(Domain)이란, 여러 노드(Machine)로 이루어질 수 있는 하나의 독립적인 Tmax 시스템을 말한다. 도메인 정보에는 시스템에 접속할 수 있는 최대 사용자 수, 트랜잭션 처리의 시간 제한, 클라이언트의 서비스 처리시간 등의 내용이 포함된다.

도메인을 구성하는 각 노드에 따라 개별적으로 환경설정을 할 수 있다. 노드에 접속할 수 있는 최대 사용자 수, 노드에 존재하는 Tmax 프로그램의 위치, 업무처리 서버 프로세스의 위치 등의 내용을 포함한다.

또한 서버 그룹에 대한 환경설정이 가능하다. 서버 그룹은 서비스를 제공하는 업무처리 서버 프로세스의 모임으로, 여러 개의 서버 프로세스를 하나의 서버 그룹으로 묶어 관리할 수 있도록 한다. 서버 그룹에는 데이터베이스 접근 정보, 부하 조절 및 장애 대책 등의 환경설정을 할 수 있다.

실질적으로 서비스를 제공하는 업무처리 서버 프로세스(명령어 라인 옵션이나 서버 개수)와 서비스(우선순위와 처리 제한 시간), 라우팅(데이터의 타입과 범위에 따라 서버 그룹별로 분산 처리)에 대한 환경설정도 필요하다. 도메인 사이의 서비스를 처리할 수 있는 게이트웨이 환경도 설정할 수 있다.

환경 파일은 총 9개의 절로 구성된다.

  • DOMAIN

  • NODE

  • SVRGROUP

  • SERVER

  • SERVICE

  • GATEWAY

  • ROUTING

  • RQ

  • HMS

각 절은 서로 트리(Tree) 형태로 상관 관계를 가진다. Tmax 시스템 전체 환경에 대한 도메인이 존재하고, 도메인에는 하나 이상의 노드가, 각 노드에는 하나 이상의 서버 그룹이, 서버 그룹 안에는 하나 이상의 업무처리 서버 프로세스가, 그리고 각 업무처리 서버 프로세스에는 하나 이상의 서비스가 포함되는 관계를 갖는다.

다음은 환경 파일을 구성하는 각 절의 상호 연관 관계를 트리 형태로 나타낸 것이다.

[그림 3.1] 환경 파일 구성요소 간의 상호 연관 관계

환경 파일 구성요소 간의 상호 연관 관계

3.1.1. 환경 파일 형식

Tmax 환경 파일은 DOMAIN 절, NODE 절, SVRGROUP 절, SERVER 절, SERVICE 절, GATEWAY 절, ROUTING 절로 구성되고, 이 중에서 GATEWAY 절, ROUTING 절을 제외한 나머지 5개의 절은 반드시 정의되어야 한다.

다음은 Tmax 환경 파일을 설정한 예이다.

*DOMAIN
res1    SHMKEY = 77990, MINCLH = 1, MAXCLH = 3, 
        MAXUSER = 100, TPORTNO = 8888, BLOCKTIME = 100

*NODE
tmax1   TMAXDIR = "/home/tmax",
        APPDIR = "/home/tmax/appbin",
        PATHDIR = "/home/tmax/path",
        SLOGDIR = "/home/tmax/log/slog",
        TLOGDIR = "/home/tmax/log/tlog",
        ULOGDIR = "/home/tmax/log/ulog"

*SVRGROUP
svg1    NODENAME = tmax1, DBNAME = ORACLE,
        OPENINFO = "Oracle_XA+Acc = P/tmax/tmax+SesTm = 60"
svg2    NODENAME = tmax1

*SERVER
svr1    SVGNAME = svg1, CLOPT ="-A -- -f aa -x bb"
svr2    SVGNAME = svg2

*SERVICE
SVC1    SVRNAME = svr1
SVC2    SVRNAME = svr2

세부 형식

다음은 각 절과 항목의 형식이다.

  • 각 절은 다음과 같은 형식으로 정의한다.

    *절
    이름        항목1 = .… , 항목2 = .… , 항목3 = ....
  • 항목

    각 절의 항목은 다음과 같은 형식으로 정의한다. 항목은 '항목명 = 값'의 형태로 정의된다.

    항목 = 형태 (기본값)
           범위 또는 크기
           내용

    각 항목은 다음의 형태 중 하나의 값으로 정의될 수 있으며, 항목명은 값으로 사용될 수 없다.

    항목값설명
    numeric숫자 범위를 정의한다.
    stringabc 형태의 문자열을 의미한다.
    literal"abc" 형태의 문자열을 의미한다.
    Y | NYes 또는 NO 형태이다.
    Y | B | NYes 또는 Both 또는 No 형태이다.

환경 파일의 각 절과 항목은 다음과 같은 규칙에 따라 작성되어야 한다.

  • 절은 애스터리스크(*)로 시작하고 반드시 대문자이어야 한다.

  • 절의 이름이나 절의 하위 개체의 이름은 반드시 첫 번째 칸에서 시작되어야 한다.

  • 절의 이름이나 절의 하위 개체의 이름 이외의 항목은 첫 번째 칸에서 시작할 수 없다.

  • 절의 각 항목은 콤마(,)로 구분되어야 한다. 콤마(,)가 없으면 해당 절의 정의가 끝난 것으로 간주한다.

  • 절의 정의 순서는 고정되어 있지 않아서 어느 절이 먼저 정의되어도 상관없다. 하나의 절이 여러 번으로 나누어 한 번 이상 정의될 수 있다. 예를 들어, 노드별로 해당 서버 그룹, 업무처리 서버 프로세스, 서비스 등을 분리하여 정의할 수 있다. 단, 동일한 내용을 반복해서 정의하면 안 된다.

  • 항목과 항목 사이의 공백은 의미가 없다.

  • 항목을 정의하지 않으면 기본값으로 설정된다.

3.1.2. 환경 파일 작성

Tmax 환경 파일의 작성은 Tmax 시스템 관리자가 해야 하는 가장 중요한 일이다. Tmax 시스템은 환경 파일을 기초로 기동하고 종료된다. 그러므로 환경 파일이 존재하지 않거나 잘못 생성되면 Tmax 시스템은 동작할 수 없다.

Tmax 환경 파일은 크게 9부분으로 나누어진다.

  • 기본 환경설정

    Tmax 시스템을 구성하기 위해 기본적으로 필요한 환경설정을 한다. Tmax 환경 파일에 필수적으로 정의되어야 하는 DOMAIN 절, NODE 절, SVRGROUP 절, SERVER 절, SERVICE 절과 도메인 사이의 서비스를 처리할 수 있는 GATEWAY 절, 라우팅 환경설정을 위해 추가할 수 있는 ROUTING 절 등 Tmax 환경 파일의 전반적인 내용이 다루어진다.

    데이터베이스, 트랜잭션, 부하 조절, 장애 대책, 보안 관련 환경설정은 기본 환경설정을 바탕으로 이루어진다.

  • 데이터베이스 환경설정

    데이터베이스 정보를 등록하여 데이터베이스를 관리하기 위해 필요한 데이터베이스 관련 환경설정을 한다.

  • 분산 트랜잭션 환경설정

    Tmax 시스템의 분산 트랜잭션 처리(Distributed Transaction Processing) 기능을 사용할 경우 필요한 트랜잭션 환경설정을 한다.

  • 부하 조절 환경설정

    노드 사이의 부하 조절을 위해서 필요한 환경설정을 한다. 선택적으로 정의할 수 있는 ROUTING 절에 대한 자세한 설명이 다루어진다.

  • 신뢰성 큐 환경설정

    장애로 인하여 시스템이 비정상적으로 종료되었을 때, 종료 전에 요청된 서비스가 시스템을 정상 부팅한 후에 계속 처리가 가능하도록 환경설정을 한다.

  • HMS 환경설정

    메시지의 송, 수신 시점을 분리하여 데이터에 대한 지연처리가 가능하고, 전달에 대한 신뢰성을 보장하기 위한 환경설정을 한다.

  • 장애 대책 환경설정

    노드에 장애가 발생할 경우, 장애 노드의 서비스가 다른 노드에서 제공되도록 하기 위한 환경설정을 한다.

  • 보안 환경설정

    Tmax 시스템의 보안 기능을 위한 환경설정을 한다.

  • 멀티 도메인 환경설정

    Tmax 시스템의 멀티 도메인 환경에서 도메인 사이의 라우팅 관련 환경설정을 한다.

3.2. 기본 환경설정

환경 파일에 필수적으로 정의되는 5개의 절(DOMAIN 절, NODE 절, SVRGROUP 절, SERVER 절, SERVICE 절)과 멀티 도메인을 처리하기 위한 GATEWAY 절 그리고 ROUTING 절에 대해 설명한다.

3.2.1. DOMAIN 절

하나의 독립적인 Tmax 시스템 전체에 대한 환경설정을 한다. 멀티 도메인으로 시스템을 정의하였을 경우에는 GATEWAY 절을 이용하여 도메인 사이의 서비스를 처리할 수 있다.

DOMAIN 절에는 기본적으로 다음과 같은 내용을 설정할 수 있다.

  • 공유 메모리(shared memory)의 key 값

  • Tmax 프로세스(CLH)의 실행 개수

  • 최대 접속 클라이언트 수

  • 포트 번호

  • 클라이언트가 서비스를 요청한 후, 최대 대기시간

DOMAIN 절에 정의된 내용은 하나의 Tmax 시스템을 구성하는 모든 노드에 공통적으로 적용된다. 그러나 DOMAIN 절에 정의되어 있어도 나머지 4개 필수 절에서 재정의할 수 있는 항목도 있다. 기본 정의 내용과 재정의 내용이 중복될 경우 후자가 우선한다.

DOMAIN 절의 기본 환경설정 형식은 다음과 같다.

*DOMAIN
[DEFAULT : ]
Domain Name    SHMKEY = shared-memory-segment-key, 
               [MAXUSER = 1 ~ MAX_INT,]
               [MINCLH = 1 ~ 10,]
               [MAXCLH = 1 ~ 10,]
               [TPORTNO = port-number,]
               [RACPORT = port-number,]
               [BLOCKTIME = timeout-value,]
               [CPC = channel-number]
               [MAXFUNC = max-function-number,]
               [LOGOUTSVC = logout-service-name,]
               [CLICHKINT = interval-time-value,]
               [IDLETIME = idle-time,]
               [MAXSACALL = numeric,]
               [MAXCACALL = numeric,]
               [TXTIME = transaction-timeout-value,]
               [NLIVEINQ = alive-check-interval,]
               [NCLHCHKTIME = interval-time-value,]
               [MAXCONV_NODE = numeric,] 
               [MAXCONV_SERVER = numeric,]
               [SECURITY = ("NO_SECURITY") | "DOMAIN_SEC" | "USER_AUTH" |  
                            "ACL" | "MANDATORY" ,]
               [OWNER = name,]
               [IPCPERM = mask,]
               [DOMAINID = numeric,]
               [CMTRET = literal,]
               [MAXNODE = numeric,]
               [MAXSVG = numeric,]
               [MAXSPR = numeric,]
               [MAXSVR = numeric,]
               [MAXSVC = numeric,]
               [MAXCPC = numeric,]
               [MAXTMS = numeric,]
               [MAXROUT = numeric,]
               [MAXROUTSVG = numeric,]
               [MAXRQ = numeric,]
               [MAXGW = numeric,]
               [MAXCOUSIN = numeric,]
               [MAXCOUSINSVG = numeric,]
               [MAXBACKUP = numeric,]
               [MAXBACKUPSVG = numeric,]
               [MAXTOTALSVG = numeric,]
               [MAXPROD = numeric,]
               [GWCHKINT = interval-time-value,]
               [GWCONNECT_TIMEOUT = interval-time-value,]
               [TMMLOGLVL = tmm-log-level,]
               [CLHLOGLVL = clh-log-level,]
               [TMSLOGLVL = tms-log-level,]
               [LOGLVL = server-log-level,]
               [CRYPT=Y|(N),]
               [MAXTHREAD = numeric,]
               [TDL = Y|(N),]
               [MAXSESSION = numeric]              
               [TXPENDINGTIME = pending-transaction-timeout]
               [CLIENT_IPV6 = Y|(N)]
               [SYSTEM_IPV6 = Y|(N)]
               [EXTSVR_IPV6 = Y|(N)]
               [CLL_BIND_IP = (Y)|N]
               [FDL_VERSION = 1 | 2,]

필수항목

  • Domain Name = string

    • 범위 : 15자 이내

    • DOMAIN 절은 Tmax 시스템의 전반적인 환경에 대한 정의이다.

  • SHMKEY = numeric

    • 범위 : 32768 ~ 262143

    • 공유 메모리 세그먼트(shared memory segment)를 가리키는 값이다. Tmax에는 전체적인 Tmax 관리자로 다른 프로세스를 관리하는 TMM, 데이터베이스 및 리소스를 관리하는 TMS, 클라이언트의 연결을 관리하는 CLL, 클라이언트와 서버 프로세스 사이에서 요청 및 응답을 처리하는 CLH 등 기능별로 크게 4개의 프로세스가 존재한다.

      SHMKEY에서 이러한 4개의 프로세스가 공유해야 할 정보를 관리하기 위한 공유 메모리 키 값을 정의한다. Tmax 시스템은 내부적으로 4개의 공유 메모리가 사용되어 정의된 값부터 차례대로 4개의 키 값(SHMKEY, SHMKEY+1, SHMKEY+2, SHMKEY+3)을 사용한다.

    주의

    공유 메모리 키 값을 정의하기 전에 이 키 값이 다른 업무에서 사용되는지 확인해야 한다. 충돌을 막기 위해서 사용되지 않는 값을 정의해야 한다.

선택항목

  • DEFAULT

    • DOMAIN 절 뿐만 아니라 Tmax 환경 파일의 모든 절에서 사용할 수 있는 항목으로 자세한 내용은 "3.2.2 NODE 절"의 DEFAULT 항목을 참고한다.

  • MAXUSER = numeric

    • 범위 : 1 ~ MAX_INT

    • 도메인에 동시에 접속할 수 있는 최대 클라이언트 수를 정의한다. 'MAXUSER로 설정된 값 + 1'만큼의 클라이언트 접속을 허용하고 있다.

  • MINCLH = numeric

    • 범위 : 1 ~ 10

    • 기본값 : 1

    • Tmax 시스템이 기동될 때 작동하는 CLH의 최소 개수를 정의한다.

      CLH는 클라이언트의 요구를 처리하는 프로세스로 클라이언트의 서비스 요청을 받아 업무처리 서버 프로세스에게 서비스를 요청하고 그 결과를 받아 다시 클라이언트에게 돌려주는 기능을 한다. CLH는 모든 클라이언트와 연결이 이루어지는 프로세스로, 시스템에 따라 하나의 CLH에 연결될 수 있는 클라이언트의 수가 제한되어 있다. 그러므로 많은 클라이언트가 연결을 시도하는 대형 도메인의 경우, 하나 이상의 CLH 프로세스를 동작시켜야 한다. 그러기 위해서 적절한 MINCLH 값을 정의해야 한다.

      [그림 3.2] MINCLH = 2인 경우

      MINCLH = 2인 경우

  • MAXCLH = numeric

    • 범위 : 1 ~ 10

    • 기본값 : 10

    • CLH의 최대 개수를 정의한다. 처음 Tmax 시스템이 기동될 때, CLH는 MINCLH에 정의한 개수만큼 동작한다. MINCLH에 정의한 CLH 프로세스의 개수로는 감당할 수 없을 만큼 클라이언트의 요구가 증가하는 경우, CLH 프로세스를 추가적으로 동작시켜 원활하게 업무를 처리하도록 할 수 있다.

      추가되는 CLH 프로세스의 개수에 이미 동작하고 있는 CLH 프로세스를 합쳐서 MAXCLH 개수를 초과할 수 없다. 현재는 클라이언트 요구 증가에 따라 MAXCLH 프로세스의 개수가 늘어나는 기능은 제공되지 않고 있다.

  • TPORTNO = numeric

    • 기본값 : 8888

    • 클라이언트가 서버에 연결될 때 사용하는 Tmax 시스템의 포트 번호를 정의한다. 정의된 값(TPORTNO)과 바로 다음 값(TPORTNO+1)이 포트 번호로 사용된다.

      처음 TPORTNO 값은 클라이언트가 서버에 연결할 때 사용하고, 다음 값(TPORTNO+1)은 노드 사이의 통신을 위해 사용된다. 클라이언트/서버 환경에서 클라이언트는 서버의 주소와 Tmax 시스템의 포트 번호를 알아야 한다.

    • Tmax 클라이언트 환경에서는 주소(TMAX_HOST_ADDR)와 포트 번호(TMAX_HOST_PORT)가 설정되어야 한다. 이 경우 설정되어야 할 포트 번호가 TPORTNO이다. 하지만 클라이언트와 서버가 같은 노드에 존재하는 경우에는 TCP/IP 소켓을 사용하지 않고 도메인 소켓을 사용하여 보다 효과적으로 서비스를 처리할 수 있다.

      서버는 2가지 형태의 클라이언트를 모두 수신할 수 있도록 설정되어 있는데 TCP/IP 소켓을 위해서는 TPORTNO로 대기하고 있으며 도메인 소켓을 위해서는 PATHDIR의 cllrcad라는 스트림 파이프로 대기하고 있다.

    • 클라이언트와 서버가 같은 노드에 존재하는 경우에는 환경변수의 TMAX_HOST_PORT 항목에 TPORTNO에서 사용한 포트 번호 대신에 PATHDIR을 지정하면 된다. 예를 들면 .profile 또는 tmax.env의 TMAX_HOST_PORT=/home/tmax/path로 지정할 수 있다.

      TPORTNO+1은 노드 사이의 통신을 위해 또 하나의 포트 번호로 사용된다.

    • Tmax 시스템의 노드 사이의 구성 방식은 Peer-to-peer 형태이다. TPORTNO+1 값을 사용하여 환경 파일에 등록된 순서대로 다음 노드를 체크한다. 시스템 영역에서는 1024 미만의 포트 번호가 사용되고 있으므로 관리자는 이 범위를 피해야 한다.

    • 클라이언트와 Tmax 시스템 또는 노드 사이에 통신을 할 때 TPORTNO와 TPORTNO+1 값에 정의된 포트 번호가 사용되기 때문에, 이 값이 다른 곳에서 사용되고 있는지 반드시 확인해야 한다. 또한 멀티 노드를 설정할 때 CLH가 추가적인 포트를 사용하므로 CLH 개수만큼 포트 번호가 유효한지도 확인해야 한다.

    • IPv6 프로토콜을 사용할 경우에는 CLIENT_IPV6 항목 설정을 'Y'로 설정해야 한다.

  • RACPORT = numeric

    • 기본값 : 3333

    • 한 도메인 내에 여러 노드가 구성되어 있는 경우, 여러 노드를 중앙에서 관리하기 위해서 각각의 노드 사이에 통신을 위한 포트 번호를 정의한다. 관리 프로세스 중의 하나인 racd에서 사용하는 포트 번호이다. 해당 포트 번호는 환경변수인 TMAX_RAC_PORT 번호에 정의된 값과 동일해야 한다. 시스템 영역에서는 1024 미만의 포트 번호가 사용되고 있으므로 관리자는 이 범위를 피해야 한다.

    • 환경변수에서 값이 다를 경우 TMAX_RAC_PORT를 사용한다. RACPORT는 TPORTNO에서 정의한 포트 번호보다 작은 포트값을 사용할 것을 권장하며, 또한 RACPORT의 포트 번호도 다른 곳에서 사용되고 있는지의 여부를 반드시 확인해야 한다.

  • BLOCKTIME = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 0 (단위: 초)

    • 값을 설정하지 않으면 기본값으로 설정되어 무한 대기한다.

    • 서비스 요구에 대한 타임아웃(timeout) 시간을 결정한다. 클라이언트가 API 함수를 통해 서비스 요청 후 최대 BLOCKTIME 시간이 지나도록 응답이 없으면 클라이언트 자체적으로 타임아웃 처리를 한다. 그러나 서버 프로세스는 계속해서 서비스를 처리한다.

    • 서비스도 종료하고 싶으면 SERVICE 절SVCTIME 항목에 서비스 타임을 지정해야 한다. BLOCKTIME은 SVCTIME과 깊이 연관되어 있다. BLOCKTIME이 SVCTIME보다 길다면 클라이언트 tpcall을 타임아웃할 때 SVCTIME이 적용된다. 반대로 SVCTIME이 BLOCKTIME보다 길다면 BLOCKTIME이 적용된다. BLOCKTIME은 클라이언트의 tpcall을 위한 타임아웃이고, SVCTIME은 서버 프로세스를 위한 타임아웃이기 때문에 SVCTIME의 타임아웃 시간까지 tpcall()된 서비스가 수행된다. 일반적으로 BLOCKTIME은 SVCTIME보다 큰 값을 갖는다.

  • CPC = numeric

    • 범위 : 1 ~ 128

    • 기본값 : 1

    • 여러 노드로 구성된 Tmax 시스템에서 노드의 CLH 프로세스의 채널 수를 결정하는 항목이다. 양 노드 사이에 서비스 요청이 많거나, 또는 분산 트랜잭션이 많을 경우 노드 사이에 채널 수가 너무 적으면 서비스 처리가 지연되어 전체적으로 시스템 성능이 저하될 수 있다. 이처럼 전체 시스템의 성능을 높이려면 각 노드의 CLH 프로세스 사이에 적정 병렬 통신 채널 수를 지정해야 한다.

  • MAXFUNC = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 0

    • 값을 설정하지 않으면 기본값으로 설정되고 해당 기능은 사용하지 않는다.

    • TopEnd 시스템으로 구축된 시스템을 Tmax 시스템으로 전환할 때 TopEnd 시스템에서 사용하는 함수를 Tmax 시스템에서 제공할 수 있도록 함수 테이블의 크기를 결정하는 항목이다.

  • LOGOUTSVC = service-name

    • 정상, 비정상 상태에서 수행될 서비스를 Tmax 서버의 클라이언트 로그아웃 프로세스에 등록한다.

    • LOGOUTSVC는 시스템에서 클라이언트의 정상적인 로그아웃을 위해 서비스에 로그인이나 로그아웃을 할 때 사용된다. LOGOUTSVC는 설정된 시간(CLICHKINT, IDLETIME)이 지나서 클라이언트가 자동으로 로그아웃이 되는 경우 이를 처리한다.

    • LOGOUTSVC 항목을 사용할 때 주의할 점은 반드시 Tmax 클라이언트인 경우에만 LOGOUTSVC가 수행이 된다는 점이다. 일반 소켓 연결이 발생하는 상황에서는 수행되지 않는다. service name을 서비스로 하는 프로그램에는 내부적으로 tpgetclid()를 호출하여 클라이언트 ID를 알 수 있고, 로그아웃 원인은 tpsvcinfo 구조체 항목의 CD를 참조한다.

      설정값설명
      TPNOAUTH(0)클라이언트의 정상 로그아웃
      TPSYSAUTH(1)Tmax가 인지한 로그아웃 (네트워크 등)
      TPAPPAUTH(2)비정상 로그아웃 (데이터 수신 장애 등)
  • CLICHKINT = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 0

    • 값을 설정하지 않으면 기본값으로 설정되고 해당 기능은 사용하지 않는다.

    • 클라이언트의 정상 기동여부를 주어진 감시 시간 간격으로 체크하기 위한 항목이다. 단독으로 사용하는 것보다 다음 항목에 설명할 IDLETIME 항목과 조합해서 사용하면 클라이언트의 정확한 상태를 Tmax 엔진에서 감시하여 낭비되는 자원을 최소화할 수 있다.

    • 해당 항목을 DOMAIN 절에 정의하면 해당 도메인에 접속한 모든 클라이언트를 감시하고 NODE 절에 등록하면 해당 노드에 접속한 클라이언트만 감시한다.

  • IDLETIME = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 0

    • 값을 설정하지 않으면 기본값으로 설정되고 해당 기능은 사용하지 않는다.

    • 클라이언트의 유휴시간(idle time)을 정의한다. CLICHKINT를 5로 설정하고 IDLETIME을 30으로 설정하였다면, 5초 간격으로 클라이언트의 상태를 확인하고 30초 이내에 요청이 들어오지 않으면 Tmax 엔진에서 해당 클라이언트를 제거한다.

    • IDLETIME은 클라이언트로부터 tpstart()로 연결을 맺거나 tpcall(), tpacall() 요청이 온 다음부터 유효하다. 이 값은 BLOCKTIME이나 SVCTIME보다 커야 한다. 만약 IDLETIME 값이 BLOCKTIME과 SVCTIME보다 더 작게 설정된다면 클라이언트가 응답을 받기 전에 자동으로 로그아웃이 된다.

  • MAXSACALL = numeric

    • 범위 : 1 ~ 1024

    • 기본값 : 8

    • 서버 프로세스가 tpgetrply 없이 요청할 수 있는 tpacall의 개수를 정의한다. 서버 라이브러리는 각각의 tpacall을 따르기 때문에 테이블 크기를 설정하는 초기화 MAXSACALL에 테이블을 작성한다.

  • MAXCACALL = numeric

    • 범위 : 1 ~ 1024

    • 기본값 : 16

    • 클라이언트 프로세스가 tpgetrply 없이 요청할 수 있는 tpacall의 개수를 정의한다. 클라이언트 라이브러리는 각각의 tpacall을 따르기 때문에 테이블 크기를 설정하는 초기화 MAXCACALL에 테이블을 작성한다.

  • TXTIME = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 0 (단위: 초)

    • 값을 설정하지 않으면 기본값으로 설정되어 무한 대기한다.

    • 트랜잭션 모드에서 요청한 서비스의 처리가 주어진 시간 내에 수행되지 않으면 해당 서비스의 처리를 취소한다.

    • 서비스 수행 전후에 XA를 처리하는 중 데이터베이스나 네트워크 장애로 인해 무한 블록이 일어나는 경우를 방지하기 위해서 내부 타임아웃을 적용한다.

  • NLIVEINQ = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 30 (단위: 초)

    • Tmax 시스템이 여러 노드로 구성되었을 경우, 노드 사이의 감시 시간 간격을 정하는 항목이다. Tmax 시스템은 양 옆의 노드를 Peer-to-peer로 연결하여 환경 파일에 등록된 순서대로 다음 노드를 감시하여 전체 노드가 원활하게 통신할 수 있도록 구성되어 있다.

    • NLIVEINQ 시간이 짧으면 양 노드를 빈번하게 감시해 노드의 이상 상태를 즉시 체크할 수 있으나, 많은 통신량으로 인해 통신 부하가 발생할 수 있다. 반대로 NLIVEINQ 시간이 너무 길면 통신량은 적으나 노드의 이상 상태를 즉시 감시를 할 수 없다. 따라서 시스템 성능을 최적화하기 위하여 네트워크 부하량, 업무의 중요도 등을 고려하여 적절한 NLIVEINQ 값을 정해야 한다.

  • NCLHCHKTIME = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 0 (단위: 초)

    • 각 노드의 CLH 프로세스가 일정 시간동안 데이터의 흐름이 없을 경우 지정한 시간이 되면 자동적으로 각 노드의 CLH 프로세스끼리 감시 신호를 보내는 역할을 담당한다.

    • 방화벽은 특정 시간동안 데이터의 흐름이 없으면 사용 프로세스를 제거하는 기능이 있는데 Tmax의 내부 CLH 프로세스도 영향을 받는다. 따라서 이 기능을 사용할 때는 세심한 주의가 필요하다.

  • MAXCONV_NODE = numeric

    • 범위 : 1 ~ 2048

    • 기본값 : 16

    • CLH 별 동시에 실행 가능한 대화형 서비스 수이다. 즉, 모든 클라이언트 및 서버 프로세스에서 동시에 대화형 서비스를 100개까지 호출한다면 이 값은 100 이상이 되어야 한다.

    • MAX를 초과될 때 TPELIMIT 에러가 발생한다.

  • MAXCONV_SERVER = numeric

    • 범위 : 1 ~ 256

    • 기본값 : 8

    • 각 클라이언트, 서버 프로세스별로 동시에 실행 가능한 대화형 서비스 수로 MAXCACALL, MAXSACALL과 같은 개념이다.

    • MAXCONV_NODE와 마찬가지로 최댓값을 초과할 경우 TPELIMIT 에러가 발생한다.

  • SECURITY = "NO_SECURITY" | "DOMAIN_SEC" | "USER_AUTH" | "ACL" | "MANDATORY"

    • 기본값 : "NO_SECURITY"

    • “NO_SECURITY” | ”DOMAIN_SEC” | ”USER_AUTH“ 중에 하나를 설정해서 보안 설정을 한다.

      Tmax에서 제공하는 보안 설정에 대한 자세한 설명은 “3.9. 보안 환경설정”을 참고한다.

  • OWNER = user_name

    • 범위 : 15자 이내의 string

  • IPCPERM = numeric

    • 범위 : 0600 ~ 0777

    • 기본값 : 0600(파일 접속 제어의 기본값은 IPCPERM이 없을 경우 600이다.)

    • IPCPERM(inter-process communication permission mask)는 공유 메모리 세그먼트와 $(TMAXDIR)/path에 위치한 파이프 파일의 제어 단위를 설정하는 데 쓰인다. 또한 시스템 로그 파일($(TMAXDIR)/log/slog)의 제어 단위도 설정한다.

    • UNIX 시스템 환경에서는 관리자가 개인이나 그룹, 기타에게 각각 파일 접속 제어(판독가능/기록가능/수행가능)를 지정할 수 있다. 사용자(개인)의 판독과 기록은 가능하지만 그룹과 기타는 불가능하다.

    • IPCPERM 필드는 다른 사용자에게 시작/종료 권한을 주기 위해 제어를 설정하는 데 사용된다. IPCEPERM이 없으면 다른 사용자는 서버 프로세스의 시동과 종료를 제어할 수 없다.

  • DOMAINID = numeric

    • 범위 : 0 ~ 255

    • 기본값 : 0

    • 여러 개의 도메인으로 작업을 할 때 특정 도메인을 나타내기 위한 키 값이 필요하다. 이 필드는 키 값을 정의하는 데 쓰인다. 멀티 도메인 환경에서는 반드시 설정되어 있어야 한다.

  • CMTRET = Y | N

    • 기본값 : Y

  • MAXNODE = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 32

    • 도메인 내 최대 노드 개수의 한계를 설정한다.

  • MAXSVG = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 32

    • 해당 노드에서 사용할 수 있는 최대 서버 그룹 개수의 한계를 설정한다.

  • MAXSPR = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 64

    • 한 노드에 최대로 기동할 수 있는 서버 프로세스의 개수로 각 서버 프로세스의 최댓값의 합으로 계산된다.

  • MAXSVR = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 64

    • 한 노드에 최대로 등록할 수 있는 서버의 최대 개수를 의미한다.

      한 노드에 svr1, svr2, svr3라는 3개의 서버가 등록되어 있고 각 서버마다 최댓값이 "50"이라면 "MAXSPR=150"이 되고 "MAXSVR=3"이 된다.

  • MAXSVC = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 512

    • 한 도메인에 최대로 등록할 수 있는 서비스의 개수를 지정한다.

    • tmadmin에서 cfg -d로 보았을 때 지정한 값과 다르게 나타나는 이유는 추후 동적 서비스 및 동적 노드를 추가할 때 필요한 예비영역까지 포함되어 있기 때문이다.

  • MAXCPC = numeric

    • 범위 : 0 ~ 65535

    • 기본값 : 32

    • 한 노드당 CPC의 최댓값을 설정한다.

  • MAXTMS = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 32

    • 해당 노드에서 기동 가능한 TMS의 최대 개수를 설정한다.

  • MAXROUT = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 16

    • 서비스 중에서 ROUTING 항목을 지정할 수 있는 서비스의 최대 개수를 의미한다.

      예를 들어 30개의 서비스가 있을 경우 그 중 10개의 서비스만 ROUTING 항목을 지정할 수 있다면 MAXROUT는 10이 된다.

  • MAXROUTSVG = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 32

    • SERVICE 절의 ROUTING 항목에 지정한 라우팅할 그룹 수(서버 그룹 또는 도메인 게이트웨이)의 총 합의 최댓값을 의미한다.

      예를 들면 서비스 A의 ROUTING 항목이 RT1이고 서비스 B의 ROUTING 항목이 RT2 일때 RT1의 RANGES 항목의 그룹 수는 2개이고 RT2의 RANGES 항목의 그룹 수가 4개라면 ROUT SVGs 수는 6개가 된다. 그러므로 MAXROUTSVG는 6개 이상으로 설정하여 한다.

      *SERVICE
      A        ROUTING = RT1
      B        ROUTING = RT2
      
      *ROUTING
      RT1     RANGES = "'a':svg1,*:DGW1"
      RT2     RANGES = "'a':svg1,'b':svg2,'c':DGW2,*:DGW1"
  • MAXRQ = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 2

    • 해당 노드에서 사용할 수 있는 최대 RQ의 개수를 지정한다.

  • MAXGW = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 2

    • 해당 노드에서 사용할 수 있는 최대 게이트웨이의 개수를 지정한다.

  • MAXCOUSIN = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 16

    • 서버 그룹에서 COUSIN 항목을 지정할 수 있는 서버 그룹의 최대 개수를 의미한다. 예를 들어 30개의 서버 그룹이 있을 경우 그 중 10개의 서버 그룹만이 COUSIN 항목을 지정할 수 있다면 MAXCOUSIN은 10이 된다.

  • MAXCOUSINSVG = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 32

    • SVRGROUP 절의 COUSIN 항목에 지정한 서버 그룹의 총 합의 최댓값을 의미한다. 예를 들어 MAXCOUSIN의 값이 10이고 COUSIN 항목에 2개의 서버 그룹을 지정할 수 있다면 MAXCOUSINSVG의 값은 20이 된다.

  • MAXBACKUP = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 16

    • 서버 그룹에서 BACKUP 항목을 지정할 수 있는 서버 그룹의 최대 개수를 의미한다. 예를 들어 30개의 서버 그룹이 있을 경우 그 중 10개의 서버 그룹만이 BACKUP이란 항목을 지정할 수 있다면 MAXBACKUP은 10이 된다.

  • MAXBACKUPSVG = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 32

    • SVRGROUP 절의 BACKUP 항목에 지정한 서버 그룹의 총 합의 최댓값을 의미한다.

      예를 들어 MAXBACKUP의 값이 10이고 각각 BACKUP 항목에 2개의 서버 그룹을 지정할 수 있다면 MAXBACKUPSVG의 값은 20이 된다.

  • MAXTOTALSVG = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 64

    • 지정할 수 있는 총 서버 그룹의 최댓값을 의미한다.

  • MAXPROD = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 0

    • 값을 설정하지 않으면 기본값으로 설정되고 해당 기능은 사용하지 않는다.

    • TopEnd 시스템으로 구축된 시스템을 Tmax 시스템으로 전환할 때 사용하는 항목으로 지정할 수 있는 product name의 최댓값을 의미한다. (TopEnd 용)

  • GWCHKINT = numeric

    • 범위 : 1 ~ MAX_INT (단위: 초)

    • 멀티 도메인 환경에서 백업 노드 게이트웨이가 존재하는 경우, 리모트의 메인 노드 게이트웨이에 장애가 일어났을 때 백업 노드 게이트웨이에 접속하여 서비스 요청을 하게 된다. 이 상황에서는 메인 노드가 복구된 후에도 백업 노드에 서비스 요청을 한다. 메인 노드와 다시 연결을 맺기 위해서는 백업 노드 게이트웨이를 임의로 다운시켜야만 한다. 하지만 사용자가 메인 노드가 복구된 후에 메인 노드와의 거래를 원하는 경우 Tmax 환경 파일에 이 항목을 설정한다.

    • 다음은 이 항목 설정할 때 고려사항이다.

      • GWCHKINT 항목이 설정되어 있지 않은 경우 이전과 같은 방식으로 동작한다. 즉, 메인 노드가 재기동되어도 메인 노드와의 재연결을 시도하지 않는다.

      • GWCHKINT 항목이 설정되어 있는 경우 리모트의 메인 노드 게이트웨이가 복구되어 메인 노드와 연결이 이루어진 후에는 백업 노드와의 연결은 자동으로 종료된다. 만약 메인 노드와 채널이 연결되기 전에 백업 노드의 채널로 요청이 되었고 그 응답을 받지 못하였다면 해당 백업 채널은 자동으로 종료되지 않는다. 하지만 거래는 메인 노드에게만 전달된다. 그리고 추후 백업 노드로부터 응답을 받게 되면 GWCHKINT 주기로 백업 노드와의 채널은 자동 종료된다.

  • GWCONNECT_TIMEOUT = numeric

    • 범위 : 1 ~ MAX_INT (단위: 초)

    • 도메인 게이트웨이는 초기 시스템이 기동될 때 리모트 게이트웨이와 연결을 시도한다.

      환경 파일 DOMAIN 절에 GWCHKINT 항목이 설정되어 있지 않은 상태에서 리모트 게이트웨이가 설치되어 있는 머신이 기동되어 있지 않은 경우, 요청자 입장에서는 연결이 실패했다는 메시지가 출력될 때까지 오랜 시간을 기다리게 된다.

      또한 이와 같은 상황에서 거래가 없을 경우 재연결을 시도하지 않게 되며 서비스가 요청되는 시점에 재연결을 시도하게 되는데, 이 경우에도 리모트 게이트웨이가 준비되어 있지 않은 상황이라면 오랜 시간을 기다려야 한다. 이와 같은 단점을 해소하기 위해서 연결 타임아웃을 지정할 수 있도록 한다.

      Tmax v5.0 SP2부터 도메인 게이트웨이는 NonBlocking 방식으로 연결을 시도하며 환경설정의 NLIVEINQ, GWCHKINT 등의 설정에 따라 연결 타임아웃을 체크하는 주기가 결정되기 때문에 GWCONNECT_TIMEOUT 설정값보다 더 시간이 지난 뒤에 timeout 처리될 수 있다.

    • GWCONNECT_TIMEOUT이 설정되어 있지 않다면 기존과 같은 방식으로 동작한다.

  • TMMLOGLVL = string

    • 기본값 : DETAIL

    • TMM의 로그 레벨을 설정한다. (COMPACT, BASIC, (DETAIL), DEBUG1, DEBUG2, DEBUG3, DEBUG4 중 1가지를 선택하여 설정한다.)

      레벨설명
      COMPACTE + F
      BASICE + F + W
      DETAILE + F + W + I
      DEBUG1 ~ DEBUG4내부적인 디버그 로그의 상세 정도로 DEBUG4가 가장 상세하다. 디버그용 바이너리 및 라이브러리(clh.dbg, tmm.dbg, libsvrd, libtmsd, libtmsthrd)에서만 유효하다.
  • CLHLOGLVL = string

    • 범위 : TMM과 동일

    • CLH의 로그 레벨을 설정한다.

  • TMSLOGLVL = string

    • 범위 : TMM과 동일

    • TMS의 로그 레벨을 설정한다.

  • LOGLVL = string

    • 서버의 로그 레벨을 설정한다.

  • CRYPT = Y | N

    • 기본값 : N

    • Tmax 4.0부터 클라이언트와 서버 사이의 송, 수신 데이터를 보다 안정적으로 전달할 수 있도록 암호화 기능을 제공한다. 암호화 기능을 사용하기 위해서는 클라이언트와 서버 모두 암호화 기능이 설정되어 있어야 한다.

    • 서버에 암호화 기능을 설정하기 위해서는 CRYPT 항목을 'Y'로 설정한다. 사용하지 않으려면 'N'으로 설정한다. 클라이언트 암호화 기능 설정 방법은 “2.2.2. 클라이언트 환경변수”의 TMAX_SEMANTICS 환경변수를 참고한다.

    • 다음은 항목을 설정하는 경우 고려할 사항이다.

      • 초기 시스템 연결 시점에 암호화 키 교환이 이루어지며, 서비스를 호출할 때마다 암복호화(encryption/decryption)가 이루어지기 때문에 성능상 오버헤드가 발생할 수 있다.

      • 암호화 기능의 사용을 위해서는 사용하는 시스템에 '/dev/random'이 설치되어야 한다. 암호화 기능을 사용하게 되면 최초 시스템에 연결할 때 암호화 키 교환이 이루어지게 되는데, 이때 커널에서 제공하는 '/dev/random'이라는 문자 장치를 이용하여, 랜덤 키를 만들어 낸다. 따라서 현재 사용하고 있는 시스템에 '/dev/random'의 설치 여부를 확인해야 한다. 설치 여부는 ls 명령어를 통해서 확인할 수 있다. 미설치된 경우 각 시스템의 매뉴얼을 참조하여 설치하도록 한다.

      • 노드 사이 통신에서는 암호화를 지원하지 않는다.

      • 클라이언트가 $PATHDIR을 통해서 접속하는 경우는 암호화하지 않는다.

      • 암호화가 설정되지 않은 클라이언트가 암호화가 설정된 엔진에 접속할 경우 TPECLOSE 에러가 발생한다. 암호화가 설정된 클라이언트가 암호화가 설정되지 않은 엔진에 접속할 경우 클라이언트는 블록된다.

  • MAXTHREAD = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 0

    • 값을 설정하지 않으면 기본값으로 설정되고 해당 기능은 사용하지 않는다.

    • Tmax 4.0 이후 버전에서는 Multi Thread 방식의 트랜잭션 매니저를 제공하여 적은 자원을 이용하여 보다 효율적으로 트랜잭션 처리가 가능하다. Multi Thread TMS를 사용하기 위해서 이 항목에 Multi Thread TMS의 최대 Thread 개수를 지정한다. 또한 SVRGROUP 절에 TMSTYPE, TMSTHREAD, TMSOPT 항목도 설정한다.

      각 항목에 대한 내용은 "3.2.3 SVRGROUP 절"의 TMSTYPE, TMSTHREAD, TMSOPT를 참고한다.

    • 다음은 항목을 설정할 때 고려할 사항이다.

      • DBMS가 Multi Thread를 지원해야 한다(현재 Oracle이 지원).

      • Oracle의 경우 환경 파일에 있는 SVRGROUP 절의 OPENINFO 항목에 "Thread=true"를 추가해야 한다.

        OPENINFO="Oracle_XA+Acc=P/scott/tiger+SesTm=60+Thread=true"
      • Multi Thread TMS를 생성할 때, 반드시 libtms 대신 libtmsthr, libpthread 라이브러리를 링크해서 컴파일을 해야 한다.

  • TDL = Y | N

    • 기본값 : N

    • TDL(Tmax Dynamic Library) 암시적 버전 보호를 사용할 것인지 여부(Y|N)를 설정한다.

    참고

    TDL과 관련한 자세한 사항은 "Tmax Programming Guide(Dynamic Library)를 참고한다.

  • MAXSESSION = numeric

    • 범위 : 1 ~ 65535

    • 기본값 : 1024

    • 한 도메인 내의 HMS에서 생성할 수 있는 세션 수의 최댓값을 설정한다. 자세한 내용은 “3.7. HMS 환경설정”을 참고한다.

  • TXPENDINGTIME = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 0

    • pending된 트랜잭션의 타임아웃을 설정한다. 타임아웃 시간동안 pending된 트랜잭션의 응답이 오지 않으면 Rollback을 시킨다. 설정하지 않으면 검사를 하지 않는다.

  • CLIENT_IPV6 = Y | N

    • 기본값 : N

    • Tmax 시스템에서 클라이언트의 접속을 위한 포트를 생성할 때 IPv6 프로토콜의 사용 여부를 결정한다.

      설정값설명
      YIPv6 프로토콜을 사용하여 접속 요청을 기다리게 되며, 클라이언트는 IPv4 환경이나 IPv6 환경에서 Tmax 시스템으로 접속이 가능하다.
      NIPv4 프로토콜을 사용하여 접속 요청을 기다리는 것이며, 이 경우에 클라이언트는 IPv4에서만 접속이 가능하다. 노드마다 각각 독립적인 설정이 가능하다.

  • SYSTEM_IPV6 = Y | N

    • 기본값 : N

    • Tmax 시스템이 여러 노드로 구성되었을 경우에 노드 사이의 통신을 위한 포트를 생성할 때 IPv6 프로토콜의 사용 여부를 결정한다.

      설정값설명
      Y다른 노드들의 접속 요청을 위해 포트를 생성할 때 IPv6 프로토콜을 사용하여 접속 요청을 기다리게 된다.
      NIPv4 프로토콜을 사용하여 접속 요청을 기다린다. 노드마다 각각 독립적인 설정이 가능하다.
  • EXTSVR_IPV6 = Y | N

    • 기본값 : N

    • Tmax 시스템에서 Extern Server의 접속을 위한 포트를 생성할 때 IPv6 프로토콜의 사용 여부를 결정한다.

      설정값설명
      YIPv6 프로토콜을 사용하여 접속 요청을 기다리게 된다.
      NIPv4 프로토콜을 사용하여 접속 요청을 기다린다. 노드마다 각각 독립적인 설정이 가능하다.
  • CLL_BIND_IP = Y | N

    • 기본값 : Y

    • 클라이언트 접속을 위한 포트를 생성할 때, NODE 절의 IP에 설정된 주소의 인터페이스를 사용할 것인지 여부를 결정한다.

    • 'N'으로 지정하거나 IP를 설정하지 않으면 모든 인터페이스로부터의 접속을 허용한다.

  • FDL_VERSION = numeric

    • 기본값 : 1

    • 범위 : 1 ~ 2

    • 2로 지정하면 검색 성능이 향상된 버전으로 동작하며, 기존의 Tmax와의 호환성이 없다.

      이 옵션의 영향을 받는 것은 서버 애플리케이션, ROUTING 절 설정에 따른 CLH의 스케쥴링이다. 만약 fb* API를 사용할 때 FDL_VERSION 설정이 자신의 환경과 일치하지 않으면 FBESETVER 에러를 리턴한다.

사용 예제

다음은 DOMAIN 절의 사용 예제이다.

*DOMAIN
res1      SHMKEY = 77990, MAXUSER = 300,
          MINCLH = 2, MAXCLH = 3,
          TPORTNO = 8889, RACPORT = 3334,
          BLOCKTIME = 60, CLICHKINT = 5,
          IDLETIME = 30, LOGOUTSVC = logout, 
          CLHLOGLVL = DEBUG2

3.2.2. NODE 절

DOMAIN 절에서 Tmax 시스템 전체의 환경이 정의되었다면 다음으로 Tmax 시스템을 이루는 각 노드의 환경설정이 필요하다.

NODE 절에는 다음과 같은 내용이 정의될 수 있다.

  • Tmax 시스템의 홈 디렉터리/작업 디렉터리

  • 응용 서버 프로그램의 실행 파일들을 포함하는 디렉터리

  • Tmax 프로세스 사이의 통신을 위한 디렉터리

  • 시스템 메시지가 저장될 디렉터리

  • 사용자 메시지가 저장될 디렉터리

  • 트랜잭션에 대한 정보가 저장될 디렉터리

  • 응용 서버 프로그램이 기동될 때 필요한 환경변수가 정의된 환경 파일

NODE 절의 일부 항목은 DOMAIN 절에서 정의했어도 노드에 따라 새롭게 정의할 수 있다. 재정의 가능한 항목은 절 3.2.2. “재정의 가능 항목” 설명을 참고한다.

Tmax 시스템을 기동하면 노드마다 TMM, CLL, CLH(데이터베이스 관련 시스템인 경우 TMS 포함, 멀티 도메인인 경우 게이트웨이 프로세스 포함) 프로세스와 실제 서비스를 수행하는 서버 프로세스가 기동된다. 이러한 프로세스를 기동하기 위해서는 실행 파일이 존재하는 디렉터리의 위치를 알아야 한다. 또한 Tmax 프로세스가 통신하는 데 필요한 디렉터리와 Tmax 시스템이나 사용자가 내보내는 각종 에러와 경고 메시지를 저장하는 디렉터리도 지정할 수 있다.

NODE 절의 기본 환경설정 형식은 다음과 같다.

*NODE
[DEFAULT: ]
Node Name      TMAXDIR = tmax-home-path ,
               APPDIR = application-path,
               [HOSTNAME = HOST_NAME,]
               [TMAXHOME = tmax-home-path,]
               [NODETYPE = SHM_RACD|(SHM_USER),]
               [PATHDIR = stream-pipe-path,]
               [SLOGDIR = system-log-path,]
               [TLOGDIR = transaction-log-path,]
               [ULOGDIR = user-log-path,]
               [DOMAINNAME = domain-name,]
               [CLHQTIMEOUT = 1 - MAX_INT,]
               [ENVFILE = environment-file-name,]
               [SHMKEY = shared-memory-segment-key,]
               [MAXUSER = 1 ~ ,]
               [MINCLH = 1 ~ 10,]
               [MAXCLH = 1 ~ 10,]
               [TPORTNO = port-number,]
               [TPORTNO2 = port-number,]
               [TPORTNO3 = port-number,]
               [TPORTNO4 = port-number,]
               [TPORTNO5 = port-number,]
               [RACPORT = port-number,]
               [IPCPERM = mask,]
               [IP = IP address,]
               [CLICHKINT = interval-time-value,]
               [IDLETIME = idle-time,]
               [TMMOPT = TMM-log-path,]
               [TLMOPT = TLM-transaction-log-file-size,] 
               [CLHOPT = CLH-log=path,]
               [REALSVR = server-name,]
               [RSCPC = 1 ~ 128,]
               [MAXSVG = 1 ~ MAX_INT,]
               [MAXSPR = 1 ~ MAX_INT,]
               [MAXSVR = 1 ~ MAX_INT,]
               [MAXTMS = 1 ~ MAX_INT,]
               [MAXCPC = 0 ~ 128,]
               [MAXGWSVR = 1 ~ MAX_INT,]
               [MAXRQSVR = 1 ~ MAX_INT,]
               [MAXGWCPC = 1 ~ MAX_INT,]
               [AUTOBACKUP = (Y)|N,]
               [LOGOUTSVC = logout-service-name,]
               [TMAXPORT = port num1, ..., port number5,]
               [COMPRESSPORT = port num1, ..., port number5,]
               [COMPRESSSIZE = compress_size,]
               [RESTART = (Y)|N,]
               [MAXRSTART = numeric,]
               [GPERIOD = numeric,]
               [TMMLOGLVL = tmm-log-level,]
               [CLHLOGLVL = clh-log-level,]
               [TMSLOGLVL = tms-log-level,]
               [LOGLVL = server-log-level,]
               [EXTPORT = port number,]
               [EXTCLHPORT = clh port number,]
               [SMSUPPORT = Y | (N),]
               [SMTBLSIZE = num,]
               [CLLBLOCK = Y|(N),]
               [CLLUNBLKPORT = Portno1, Portno2, ...,]
               [CLLBLOCKTIME = num]
               [CLLCONNLB=(RR)|LC,]
               [CRYPTPORT=literal,]
               [TRB = nodename,]
               [MAXSESSION = 1 ~ MAX_INT,]
               [SQKEY = 32768~262143 ,] 
               [SQSIZE = 4 ~ 4000000,]
               [SQMAX = 2~MAX_INT-1,]
               [SQKEYMAX = 1 ~ MAX_INT,]
               [SQTIMEOUT =1 ~ MAX_INT]
               [CLIENT_IPV6 = Y|(N)]
               [SYSTEM_IPV6 = Y|(N)]
               [EXTSVR_IPV6 = Y|(N)]
               [CLL_BIND_IP = (Y)|N]

필수 항목

  • Node Name = string

    • 크기 : 15자 이내

    • 노드의 물리적인 이름으로, UNIX의 "uname -n" 명령으로 확인된 이름을 정의한다.

      설정한 노드명은 반드시 "/etc/hosts" 파일에 등록되어 있어야 한다. 하나의 도메인(DOMAIN)은 하나 이상의 노드로 이루어지므로, NODE 절에는 최소한 하나 이상의 노드명이 정의되어야 한다.

  • TMAXDIR = literal

    • 크기 : 255자 이내

    • Tmax 프로그램이 설치(install)되어 있는 홈 디렉터리의 절대 경로이다. 경로는 환경변수 TMAXDIR과 동일한 값이 정의되어야 한다. TMAXHOME이 정의되지 않았을 경우 Tmax 관련 작업은 TMAXDIR 디렉터리에서 모두 이루어진다.

  • APPDIR = literal

    • 크기 : 255자 이내

    • Tmax를 이용하는 애플리케이션의 실행 파일이 존재하는 디렉터리의 절대 경로로 서버의 작업 디렉터리의 절대 경로이다.

    • Tmax 시스템에는 Tmax 자체 프로세스들 이외에도, 클라이언트 요구를 처리하는 애플리케이션이 있다. Tmax 시스템이 기동될 때 함께 기동되고, 종료될 때도 함께 종료된다.

    • 애플리케이션의 실행 파일이 설치되어 있는 디렉터리를 정의하는 항목은 APPDIR이다. 또한 서버의 작업 디렉터리이기도 하며 서버 프로그램에서 발생하는 core 파일이 APPDIR에서 저장된다.

선택 항목

  • DEFAULT: 항목 = 값, …

    • NODE 절뿐만 아니라 Tmax 환경 파일의 모든 절에서 정의할 수 있는 LABEL이다.

      NODE 절에서 이 LABEL은 여러 노드로 구성된 경우 각 노드마다 같은 값을 가진 항목을 정의하려 할 때 유용하게 사용할 수 있다. LABEL로 "DEFAULT: "가 정의되면, 이후 해당 절이 끝나거나 다른 "DEFAULT: "에 의해서 Override될 때까지 유효하다.

      "DEFAULT:"에 의해서 정의된 항목들이 NODE 절에 별도로 정의되어 있지 않으면 "DEFAULT:"에 의해서 정의된 값들이 모든 노드에 공통적으로 적용된다.

    • 재정의되었으면 해당 노드에 대해서는 NODE 절에서 정의된 새로운 값이 적용된다.

  • HOSTNAME = literal

    • 크기 : 255자 이내

    • 실제 호스트와 환경 파일에 정의하는 노드명이 다를 경우에도 동작하도록 하기 위한 항목으로 실제 호스트명을 지정한다. HOSTNAME을 지정헸을 경우 하나의 머신 내에서 논리적인 멀티 노드를 사용할 수 있다. 하나의 호스트명에 여러 개의 노드명을 사용할 수 있다.

    • NODE 절에는 TMAXHOME, NODETYPE, RACPORT, TPORTNO, SHMKEY 항목이 반드시 함께 정의되어야 한다. 정의되지 않았을 경우, 노드명이 HOSTNAME이 된다. 자세한 내용은 아래 NODE 절의 절 3.2.2. “사용 예제 ”를 참고한다.

  • TMAXHOME = literal

    • 크기 : 255자 이내

    • Tmax 설치 디렉터리와 작업 디렉터리를 분리하여 사용할 수 있도록 하기 위한 항목으로 Tmax 프로그램이 설치되어 있는 홈 디렉터리의 절대 경로를 정의한다. 이 경로는 환경변수 TMAXHOME과 동일한 값이 정의되어야 한다. TMAXHOME 항목이 정의되었을 경우 TMAXDIR은 작업 디렉터리가 되며 정의되지 않았을 경우 TMAXDIR이 설치 디렉터리와 작업 디렉터리가 된다.

      Tmax 설치 디렉터리와 작업 디렉터리는 다음의 표와 같이 구분된다. HOSTNAME 항목과 함께 설정이 된 경우는 각각의 TMAXDIR이 하나의 논리 노드가 되며 TMAXHOME은 각 논리 노드가 공유하는 Tmax 설치 디렉터리가 된다. 따라서 동일 노드 내의 논리 노드의 TMAXDIR과 SHMKEY, TPORTNO는 모두 다르게 설정해야 한다.

      구분설명
      TMAXHOME설치 디렉터리로 bin, lib, usrinc, tuxinc, topinc, cblinc, license의 하위 디렉터리가 있다.
      TMAXDIR작업 디렉터리로 config, path, log, svct의 하위 디렉터리가 있다.
  • NODETYPE = SHM_RACD | SHM_USER

    • 기본값 : SHM_RACD

    • 하나의 머신 내에 여러 로컬 노드를 정의하였을 경우, 각각의 로컬 노드를 관리하기 위한 방법을 결정하는 항목이다. 한 머신의 로컬 노드의 RACPORT는 반드시 달라야 한다. 따라서 2개 이상의 로컬 노드를 사용할 경우, RACPORT는 반드시 재정의해야 한다.

      중요한 점은 NODETYPE 항목은 반드시 "tmboot/tmdown/tmadmin/cfl"을 수행하는 논리 노드와 같은 호스트에 있는 노드만을 관리할 때 사용해야 한다는 점이다. 다른 호스트에 있는 논리 노드들을 관리할 경우에는 NODETYPE에 관계없이 RACPORT를 사용한다.

    • "tmdown/tmadmin/cfl/tmboot"를 시작한 논리노드(node A)와 같은 호스트에 존재하는 다른 논리노드(node B)가 있는 상황에서 해당 노드(node B)의 "tmdown/tmadmin/cfl/tmboot command"를 수행할 때 racd를 이용할 것인지, 아니면 직접 수행할 것인지를 결정할 경우에 사용한다.

    • NODETYPE의 설정값에 대한 설명은 다음과 같다.

      설정값설명
      SHM_RACDRACPORT를 이용하여 각 논리 노드를 관리한다.
      SHM_USERRACPORT를 사용하지 않고 각 논리 노드를 직접 관리한다.
  • PATHDIR = literal

    • 크기 : 255자 이내

    • 기본값 : (TMAXDIR)/path

    • Tmax 시스템의 프로세스들이 통신하기 위한 Named stream pipe의 경로이다. 프로세스 사이의 통신 방법에는 Pipe(Unnamed pipe, Named pipe), 메시지 큐(Message queue), 공유 메모리(Shared memory)를 사용하는 방법이 있다.

      Tmax에서는 프로세스 사이에 정보를 주고받기 위해 공유 메모리 ("3.2.1 DOMAIN 절"의 SHMKEY 항목 참고)와 더불어 Stream pipe 방식을 사용한다. 이 Stream pipe를 사용하기 위해서는 pathname이 필요하다.

    • PATHDIR은 Tmax 관련 프로세스가 Stream pipe를 통해 통신하는 데 필요한 pathname들이 생성되는 디렉터리로 이 디렉터리에 프로세스가 통신할 수 있도록 named pipe가 만들어진다. 항목이 정의되지 않은 경우에는 TMAXDIR에서 지정한 디렉터리 아래에 path 디렉터리에 pipe가 만들어진다.

    • PATHDIR을 "$TMAXDIR/path" 이외의 디렉터리로 지정했을 경우 Tmax 시스템이 종료될 때 올바르게 종료되지 않는 경우가 있다. Tmax 시스템이 종료될 때 시스템은 "$TMAXDIR/path" 디렉터리에 있는 Stream pipe를 사용하기 때문이다. 이를 해결하기 위해 사용자는 환경변수 TMAX_PATHDIR에 사용자가 환경 파일에 설정한 PATHDIR을 지정한다. 이렇게 한 후 Tmax 시스템을 종료할 경우 Tmax 시스템은 환경변수로 지정해 준 TMAX_PATHDIR을 참조하여 종료가 되기 때문에 정상적으로 종료된다.

      export TMAX_PATHDIR = /home/tmax/path_new
    • Tmax 시스템을 기동할 때 config 디렉터리에 있는 이진 환경 파일이 환경 파일에 설정한 PATHDIR에 복사되는데 이는 Tmax 시스템이 기동한 후에 환경 파일이 수정되었을 경우 정상적으로 종료가 되지 않는 점을 해결하기 위한 것이다. 이 역시 환경변수 TMAX_PATHDIR에 변경되기 전(Tmax 시스템이 기동되었을 때 참조되었던 PATHDIR)의 PATHDIR을 설정하면 이 디렉터리 아래에 이진 환경 파일이 생성되며 이 환경 파일은 Tmax 시스템이 기동된 후에 환경 파일이 수정되더라도 변경되지 않는다.

      따라서 Tmax 시스템 기동 후에 사용자가 환경 파일을 수정하더라도 Tmax 시스템이 비정상적으로 종료되는 경우를 없앨 수 있다.

  • SLOGDIR = literal

    • 크기 : 255자 이내

    • 기본값 : (TMAXDIR)/log/slog

    • 시스템 메시지가 기록(logging)될 디렉터리의 절대 경로를 지정한다. 시스템 메시지란, TMM, TMS, CLL, CLH 등이 출력하는 메시지와 시스템 내부적으로 발생한 메시지들을 일컫는다. 지정된 SLOGDIR 디렉터리에는 날짜별로 'slog.날짜' 파일이 생성되어, 각 파일에 날짜별로 발생한 메시지가 기록된다.

    • 항목을 정의하지 않은 경우에는 TMAXDIR에서 지정한 디렉터리 하위에 위치한 "log/slog" 디렉터리에 기록된다.

    주의

    지정할 경로는 사용 중인 시스템에 존재해야 한다.

  • TLOGDIR = literal

    • 크기 : 255자 이내

    • 기본값 : (TMAXDIR)/log/tlog

    • XA를 이용한 트랜잭션이 발생한 경우 이에 대한 정보를 TXLOG 파일에 기록한다. TXLOG 파일이 생성될 절대 경로를 지정한다. 바이너리이기 때문에 해독은 불가능하며, Tmax 엔진에서 트랜잭션에 대한 정보 관리를 위해 필요하다. TXLOG 파일은 파일 시스템으로 생성하며 Tmax에서는 raw 파일에 따라 이 파일의 기록을 지원하지 않는다.

    • 항목이 정의되지 않은 경우에는 TMAXDIR에 지정한 디렉터리 하위에 위치한 "log/tlog" 디렉터리에 기록된다.

    주의

    지정할 경로는 사용 중인 시스템에 존재해야 한다.

    • 부트할 때 이전에 부트했을 때의 로그가 남아 있으면 기존 파일을 .old로 백업하고 새로운 트랜잭션 로그 파일이 생성된다. 기본적으로 최대 16MB이고, 이 값은 TLMOPT의 -l 옵션을 통해 수정 가능하다.

    • txlog에 남는 하나의 xid에 대한 size는 대략 32Byte 정도이다(txlog는 무한히 커지지 않는다).

  • ULOGDIR = literal

    • 크기 : 255자 이내

    • 기본값 : (TMAXDIR)/log/ulog

    • 사용자 메시지가 기록(logging)될 디렉터리의 절대 경로를 지정한다.

      사용자, 즉 Tmax 응용 프로그래머는 userlog() 함수를 이용하여 디버그용 메시지, 각종 에러 및 경고 메시지 등을 사용자에 따라 간편하게 기록할 수 있다.

    • 사용자가 userlog() 함수를 통해 내보내는 메시지들이 저장될 디렉터리가 ULOGDIR이다. 지정된 ULOGDIR 디렉터리에는 날짜별로 'ulog_날짜' 파일이 생성된다. 각 파일에는 날짜별로 발생한 메시지들이 기록된다. userlog() 함수에 대한 자세한 설명은 Tmax 안내서 중에 "Tmax Application Development Guide"를 참고한다.

    • 항목이 정의되지 않은 경우에는 TMAXDIR에 지정한 디렉터리 하위에 위치한 "log/ulog" 디렉터리에 기록된다

      주의

      지정할 경로는 사용 중인 시스템에 존재해야 한다.

  • DOMAINNAME = string

    • 크기 : 15자 이내

    • 하나의 환경 파일에 여러 개의 도메인을 정의할 수 있기 때문에 해당 노드가 속한 도메인명을 지정한다. 도메인명은 반드시 DOMAIN 절에서 정의한 이름이어야 한다.

  • CLHQTIMEOUT = numeric

    • 범위 : 1 ~ MAX_INT

    • 메시지가 큐에서 지정된 시간 이상 대기 상태에 있는 경우 시간이 경과된 메시지를 큐에서 제거하는 기능이다. 호스트 문제, 네트워크 문제 등으로 인하여 메시지가 큐에 계속 쌓이는 현상이 발생하는 경우 무한정 큐에 쌓지 않고 클라이언트에 현재 상황을 알려 적절한 대처를 하도록 유도하기 위한 설정값이다.

  • ENVFILE = literal

    • 크기 : 255자 이내

    • ENVFILE은 응용 서버 프로그램을 실행하기 위해 필요한 특정 환경을 설정하기 위해 UNIX 환경변수가 정의되어 있는 환경 파일을 지정한다. 따라서 서버 프로그램은 ENVFILE에 지정된 환경에서 수행된다.

  • TPORTNO[2-5] = numeric

    • 클라이언트가 서버에 연결할 때 사용하는 Tmax 시스템의 포트 번호이다. TPORTNO 항목에서 정의한 포트 외에 다른 포트로 Tmax 시스템에 접속하기 위해 지정한다.

    • TPORTNO2부터 TPORTNO5까지 모두 정의하면 Tmax 시스템에 접속할 수 있는 포트는 총 5개이다. 일반적으로 시스템 영역에서는 1024 이하의 포트 번호를 사용하므로 관리자는 이 범위를 피해야 한다.

    • TPORTNO에서 정의한 포트 번호와 그 다음 포트 번호(TPORTNO+1)는 클라이언트와 Tmax 시스템 혹은 다른 노드들 사이의 통신에 사용되므로 다른 포트 번호를 지정해야 한다. 또한 다른 곳에서 사용되고 있는지의 여부를 반드시 확인해야 한다. TPORTNO에서 지정한 포트 번호는 이미 지정한 포트 번호와 달라야 한다.

  • TMMOPT = literal

    • 크기 : 255자 이내

    • TMM이 기동될 때 TMM 프로세스로 전달되는 명령어 옵션을 정의한다. 정의된 옵션 중에 '--' 이전에 지정된 옵션들은 시스템에서 사용하고, 그 이후에 지정된 옵션들은 사용자가 자유롭게 사용할 수 있다.

    • 다음은 사용자 옵션에 대한 설명이다. 자세한 내용은 Tmax Reference Guide”의 “3.2.2. _tmax_event_handler”를 참고한다.

      옵션설명
      -e 파일명TMM 동작 중에 발생하는 표준 에러(standard error)를 파일에 기록한다.
      -o 파일명TMM 동작 중에 발생하는 표준 출력(standard output)을 파일에 기록한다.
      -h i | w | e | f

      서버 프로세스 타입(SVRTYPE)이 EVT_SVR인 경우에, SLOG가 발생했을 때 호출되는 Callback 함수의 로그 레벨을 정할 때 사용된다. (기본값 : e)

      -f 로 설정했을시에는 slog에서 fatal에러일 경우에만 Callback 함수가 호출되며, -i일 경우에는 info 이하에 대해 전부 Callback 함수가 호출된다.

      • i : fatal, error, warn, info

      • w : fatal, error, warn

      • e : fatal, error

      • f : fatal

      -t 초

      ASQCOUNT로 기동된 서버 프로세스의 접속 타임아웃 시간을 변경할 수 있도록 하는 옵션이다. 운영 중에 tmadmin의 setopt 명령을 통해 동적으로 변경할 수 있다. (기본값: 10초, 단위: 초)

      ex) TMMOPT = "-t 20"

      -B backlog 값

      서버 프로세스의 접속을 처리하는 listen port의 backlog 값을 지정한다.

      설정할 수 있는 값은 1부터 SOMAXCONN 값이다. (기본값: 1023)

      너무 작은 값을 설정하면 다수의 서버 프로세스가 동시에 TMM에 접속할 때 연결이 실패할 수 있다.

      -A 처리 횟수서버 프로세스의 접속요청에 대해서 accept를 처리할 때 한 번에 몇 개씩 처리할 것인지 지정한다. 운영 중에 tmadmin의 setopt 명령을 통해 동적으로 변경할 수 있다. (기본값: 100)
      -F 동시 처리 최대 개수

      TMM에서 서버 프로세스의 추가 기동이나 프로세스 재기동 등으로 인해 새로운 프로세스를 생성할 때 동시에 처리할 수 있는 최대 개수를 지정한다. 시스템의 성능이나 부하 상태에 따라 새로운 프로세스의 기동에 영향을 주는 경우에 이 옵션을 통해 조정할 수 있다.

      설정할 수 있는 범위는 0부터 현재 설정된 backlog 값까지이다. (기본값: backlog 설정값의 0.75배)

      0으로 설정하면 제한 없이 새로운 프로세스를 즉시 기동시키게 된다. 운영 중에 tmadmin의 setopt 명령을 통해 동적으로 변경 할 수 있으며, 0으로 변경하면 변경 시점에 아직 기동하지 못하고 대기 중이던 프로세스들을 모두 기동시킨다.

      프로세스 기동 개수는 다음과 같은 동작으로 계산된다. 기동 요청으로 프로세스를 생성할 때 현재 기동중인 프로세스 개수를 1 증가시킨다. 기동된 프로세스가 TMM에 접속한 다음에 Registered 될 때 1 감소시킨다. 만약 기동된 프로세스에서 exec()가 실패하거나 Registered되기 전에 실패하는 경우에는 -t 옵션에 정의된 boottime 을 확인해서 1 감소시킨다. 만약 특정 프로세스가 실행 파일이 없거나 dependent library 오류 등으로 정상 기동을 못하게 될 경우 boottime 동안 기동 개수를 유지함을 주의한다.

      만약 현재 기동 중인 프로세스 개수가 -F 옵션 설정값에 도달한 상태에서 추가적인 기동 요청이 발생하면, 해당 기동 요청은 현재 기동 중인 프로세스가 Register를 완료해서 여유가 생길 때까지 대기한다.

      -r 재접속 통지 주기

      -k 재접속 통지 프로세스 수

      CLH 프로세스가 재기동하거나 추가 기동하는 경우에, 기존에 기동된 서버프로세스들이 동시에 CLH로 연결을 시도하게 된다. 이때 CLH 접속을 위해 lock을 사용하여 접속를 시도하기 때문에 정상적으로 동작하던 서버프로세스들이 일시적으로 BLOCK 현상이 발생할 수 있다. 이 옵션을 설정하면 서버들이 동시에 접속하지 않도록 재접속 통지에 대한 조절을 한다.

      • [-r] 옵션에는 한번 재 접속 통지 이후에 아직 요청을 하지 않은 프로세스들에게 보내기 까지의 간격(초)을 설정한다.

      • [-k] 옵션에는 CLH에 재연결하라고 동시에 요청을 보내는 프로세스 개수를 설정한다.

      위의 두 옵션이 함께 설정되어야 기능이 활성화된다. 이 옵션이 사용되면 각 서버 프로세스들은 LOCK을 사용하지 않고 접속를 시도하게 된다. 옵션을 사용하지 않는다면 기존처럼 모든 프로세스들이 LOCK을 사용하며 동시에 CLH에 접속을 시도하게 된다. 예외로 Extern Server들은 이 옵션이 활성화되더라도 적용을 받지 않고 즉시 재연결 통지된다.

      재접속 명령은 tmadmin에서도 nrc 명령으로 운영자가 임의로 처리할 수 있다. 자세한 내용은 “5.2. tmadmin”를 참고한다.

      -g

      -m 최대 개수

      tmm은 SLOG, userlog, tracelog 등을 파일에 기록하는 기능을 담당하고 있다. 로깅 처리로 인해 TMM의 다른 처리들이 지연될 수 있으므로, 이 옵션을 사용하면 로깅전담 스레드를 생성하여 로깅 처리를 위임하게 된다. 이 옵션을 설정하지 않으면 기존처럼 tmm의 main 스레드에서 로깅을 처리한다.

      • [-g] 옵션을 설정하면 로깅 전담 스레드를 생성한다.

      • [-m] 옵션은 로깅 전담 스레드에서 파일 쓰기가 지연될 경우 로깅 요청들이 쌓일 수 있는데, 요청들을 큐에 저장할 수 있는 최대 개수를 지정한다. (기본값: 10000)

      [-m] 옵션은 반드시 [-g] 옵션과 함께 설정해야 한다.

      만약 로그를 파일에 기록하는 처리속도가 느려지거나 처리 가능한 성능보다 더 많은 로깅 요청이 들어와서 -m 에 지정된 최대 개수의 요청이 큐에 쌓여있다면, 이후 들어오는 로깅 요청들은 큐에 쌓이지 못하고 버려진다. [-m] 옵션을 무한정 늘린다면 tmm이 사용하는 메모리의 크기가 커질 수 있으며, tmm에서 비정상 종료된 프로세스의 재기동이나 ASQCOUNT 설정에 의한 추가기동을 처리하기 위해 프로세스를 생성(fork) 할때 너무 큰 메모리 사용으로 인해 이러한 요청들이 실패할 수 있으므로 주의해야 한다.

  • TLMOPT = literal

    • 크기 : 255자 이내

    • TLM이 기동될 때 TLM 프로세스로 전달되는 명령어 옵션을 정의한다.

    • 사용되는 사용자 옵션은 다음과 같다.

      옵션설명
      -l 로그 파일 크기설정을 하지 않으면 기본으로 16M로 트랜잭션 로그 파일을 생성한다. 로그 파일 크기는 MegaByte 단위이다. (최댓값 : 2048MB)
  • CLHOPT = literal

    • CLH가 기동될 때 CLH 프로세스로 전달되는 명령어 옵션을 정의한다. 세부 옵션은 TMMOPT와 같다.

      옵션설명
      -e 파일명CLH 동작 중에 발생하는 표준 에러(standard error)를 파일에 기록한다.
      -o 파일명CLH 동작 중에 발생하는 표준 출력(standard output)을 파일에 기록한다.
      -h i | w | e | f

      서버 프로세스 타입(SVRTYPE)이 EVT_SVR인 경우에, SLOG가 발생했을 때 호출되는 Callback 함수의 로그 레벨을 설정할 때 사용된다. (기본값 : e)

      -f 로 설정한 경우에는 slog에서 fatal 에러일 경우에만 Callback 함수가 호출되며, -i일 경우에는 info 이하에 대해 전부 Callback 함수가 호출된다.

      • i : fatal, error, warn, info

      • w : fatal, error, warn

      • e : fatal, error

      • f : fatal

      -L 서비스명

      서비스 호출을 한 클라이언트나 서비스가 종료 또는 재시작되면 CLH에서 호출된 서비스로부터 온 응답 메시지를 폐기(Discard)한다. 응답 메시지가 폐기되면서 사용자가 지정한 서비스(Loss Service)를 호출(tpacacall with TPNOREADY | TPNOTRAN)할 수 있다.

      서비스명에 응답 메시지가 폐기될 때 호출되는 Loss Service를 지정한다. Loss Service로 지정된 서비스는 TPSVCINFO의 cltid를 통해 추가 정보를 전달받는다.

      • cltid.clientdata[1]: 폐기(Discard)된 응답의 tperrno

      • cltid.clientdata[2]: 폐기(Discard)된 응답의 tpurcode

      • cltid.clientdata[3]: 폐기(Discard)된 응답의 서비스 인덱스 ( tpgetsvcname() 함수의 파라미터로 사용된다)

      -r count

      CLH에서 서버나 클라이언트와 Nonblocking I/O 수행 중, Read 최대 재시도 수를 count 값으로 설정한다. count 값은 기본값 이상 1000 이하의 값을 사용하길 권장한다.

      (기본값 : 100)

      -w count

      CLH에서 서버나 클라이언트와 Nonblocking I/O 수행 중, Write 최대 재시도 수를 count 값으로 설정한다. count 값은 기본값 이상 1000 이하의 값을 사용하길 권장한다.

      (기본값 : 100)

      -x 1

      서비스를 요청하는 경우 운영상의 문제로 TPENOENT 에러가 발생하더라도 시스템 운영환경에서는 파악할 수 없고, 직접 클라이언트에서 tperrno를 확인해야만 발생 유무를 확인할 수 있다. 옵션을 지정하면 TPENOENT 에러가 발생했을 때 SLOG에 해당 에러에 대한 로그를 기록해준다. 따라서 시스템 운영자가 빠르게 확인하고 대응할 수 있게 된다.

      옵션을 설정하지 않으면 TPENOENT 에러가 발생하더라도 SLOG에 로그를 남기지 않는다.

      로그 내용은 아래와 같다.

      (W)CLH3017 no such svc : svcname
      • CLH에서 지정된 서비스로 메시지를 전달할 때, 다음과 같은 조건을 만족해야 한다.

        1. tpcall() 또는 tpacall()에 대한 응답이어야 한다.

        2. 정상 응답이나 에러 응답에 상관없이 데이터가 존재해야 한다.

        3. CLH가 비정상적으로 종료될 경우에는 전달되지 않을 수도 있다.

  • REALSVR = literal

    • RDP 타입의 서버 프로세스를 운영하는 경우 서버 프로세스명을 설정한다.

    • Real 서버는 한 노드에 유일해야 하며 해당 노드에 존재하는 모든 서비스는 RDP 서버 프로세스를 통해 클라이언트에게 직접 전달되게 된다. 이를 위해서 다른 서버 프로세스가 처리한 결과를 얻어오기 위한 채널의 수인 RSCPC 값을 설정해야 하며 CLH와 RDP 서버 프로세스의 수는 일정하게 유지되어야 한다(MIN 값과 MAX 값이 같아야 한다).

      단, RDP 서버 프로세스는 CLH보다 항상 많아야 하며 보통 2배수로 설정한다.

  • RSCPC = numeric

    • 범위 : 1 ~ 128

    • RDP 서버 프로세스와 다른 서버 사이의 통신에 사용되는 채널의 수이다.

  • MAXSVG = numeric

    • 범위 : 1 ~ 128

    • 기본값 : 32

    • 해당 노드에서 최대로 설정 가능한 서버 그룹의 개수를 의미한다.

  • MAXTMS = numeric

    • 범위 : 1 ~ 128

    • 기본값 : 32

    • 해당 노드에서 기동 가능한 TMS의 최대 개수를 설정한다.

  • MAXGWSVR = numeric

    • 범위 : 1 ~ 128

    • 기본값 : 2

    • MAXGW가 한 노드에서 사용할 수 있는 최대 게이트웨이의 개수라면 MAXGWSVR은 해당 노드에서 기동할 수 있는 게이트웨이 서버 프로세스의 최대 개수이다. 기본값은 2이며, 2개의 게이트웨이가 있고 각각의 게이트웨이는 하나의 게이트웨이 서버를 둘 수 있다는 의미이다.

  • MAXRQSVR = numeric

    • 범위 : 1 ~ 128

    • 기본값 : 2

    • 해당 노드에서 기동할 수 있는 RQ 서버 프로세스의 최대 개수이다. 기본값은 2이며, 2개의 RQ가 있고 각각의 RQ는 하나의 RQ 서버를 둘 수 있다는 의미이다.

  • MAXGWCPC = numeric

    • 범위 : 1 ~ 128

    • 기본값 : 8

    • 게이트웨이 서버와 CLH 사이의 연결 개수를 지정한다.

    • 서버와의 CPC는 기본적으로 PAIR(input channel/output channel)로 구성되기 때문에 CPC=2의 환경에서 게이트웨이 서버의 개수가 2라면 8개의 연결이 필요하게 되므로 MAXGWCPC는 8 이상의 값을 설정해야 한다. 또한 MAXGWCPC의 값의 합은 MAXCPC의 값보다 작아야 한다.

      MAXGWCPC의 값을 늘리는 경우에는 MAXCPC의 값도 함께 증가시켜 주어야 한다.

  • AUTOBACKUP = Y | N

    • 기본값 : Y

    • 백업 서버를 지정한 경우 메인 서버에 문제가 발생했을 때 자동으로 백업 서버를 기동할 것인지를 설정한다.

  • TMAXPORT = "port num1, … , port num5"

    • TPORTNO, TPORTNO[2-5]를 대체하기 위한 항목으로, 여러 개의 포트를 사용하는 경우 TPORTNO[2-5]보다는 TMAXPORT를 사용할 것을 권장한다.

  • COMPRESSPORT = "port num1, … , port num5"

    • Tmax에서는 엔진과 클라이언트 사이의 데이터 압축을 통해서 통신할 수 있는 기능을 제공한다. 클라이언트가 압축 기능을 사용해서 통신하고자 할 때 접속해야 하는 포트 번호를 지정한다. 지정하지 않으면 압축을 하지 않는다. 중요한 것은 포트 번호를 현재 Tmax가 관리하고 있는 포트 번호로 지정해야 한다는 것이다.

      NODE 절의 TMAXPORT 항목이 정의되어 있다면 TMAXPORT 항목에 지정되어 있는 포트 번호 중에서 지정해야 하며, TMAXPORT 항목이 정의되어 있지 않다면 DOMAIN 절의 TPORTNO 항목으로 지정해야 한다. 이렇게 지정한 후 해당 포트로 접속한 클라이언트만 압축 기능을 사용할 수 있다.

    • 일반적인 네트워크 환경이라면 네트워크 전송 지연보다 압축하는 오버헤드가 더 크기 때문에 압축 기능을 사용하지 않는 것이 좋다. 압축이 필요한 경우는 클라이언트와 서버 사이의 네트워크 조건이 상당히 좋지 않은 환경에서 비교적 큰 데이터를 주고받으려고 하는 경우이다.

      예를 들어 모뎀을 통해서 접속하는 클라이언트가 수십 Kbyte 이상의 데이터를 주고받으려고 하는 경우에 설정한다.

    • 아래의 표는 클라이언트가 100Mbps 로컬 LAN과 56KB 모뎀을 사용하여 접속한 환경에서 1.5MB의 데이터를 받는 시간을 측정한 것이다. 테스트 결과에서 볼 수 있듯이 모뎀으로 접속하는 클라이언트가 텍스트 형식의 큰 데이터를 주고받는 경우에 압축 기능을 사용하는 것이 가장 효과적이다.

      • 로컬 네트워크 클라이언트

        구분압축한 경우압축하지 않은 경우
        mp3 데이터를 받는 경우103
        103
        104
        103
        텍스트 데이터를 받는 경우81
        80(0.85)
        80(0.85)
        80(0.85)
      • 모뎀 클라이언트

        구분압축한 경우압축하지 않은 경우
        mp3 데이터를 받는 경우352350
        309307
        328331
        349351
        텍스트 데이터를 받는 경우80137
        89153
        77154
        77154

      <전송 데이터의 크기>

      구분실제 크기압축한 크기
      mp31,459,095 Byte1,442,869 Byte
      txt1,445,184 Byte313,057 Byte

      주의

      1. 압축 기능을 사용하기 위해서는 클라이언트 프로그램을 컴파일할 때 반드시 libz.a(so)를 링크해야 한다.

      2. 현재 Real 서버와 클라이언트, 노드 사이의 데이터 전송, 도메인 사이의 데이터 전송의 경우 압축 기능은 지원되지 않는다.

  • COMPRESSSIZE = numeric

    • 압축 기능을 사용할 때 해당 항목에 지정한 크기 이상의 데이터만을 압축하도록 하는 항목으로, 단위는 Byte이다.

    • CompressSize는 반드시 CompressPort와 함께 지정되어야 한다.

    • 아래 예제와 같이 설정한 경우 Tmax 엔진은 9999 포트 번호로 접속한 클라이언트와 압축 기능을 사용하여 통신하게 된다. 통신할 때 데이터의 크기가 10,000 Byte 이상의 메시지인 경우에만 압축을 하게 되고 데이터의 크기가 10,000 Byte 이하이거나, 클라이언트가 8888 포트 번호로 접속하였을 경우에는 압축을 사용하지 않고 통신하게 된다.

      TMAXPORT = "8888, 9999", CompressPort = "9999" CompressSize = 10000
  • RESTART = Y | N

    • 기본값 : Y

    • NODE 절에 지정하였을 경우 Tmax 엔진 프로세스 중 CLH와 CAS, CLL, TLM의 재기동 여부를 결정하는 항목으로 비정상적으로 종료되는 경우 재기동한다.

  • MAXRSTART, GPERIOD

  • EXTPORT = numeric

    • Tmax는 Tmax 환경 파일에 등록된 서버의 기능을 Tmax 이외의 프로세스에서 처리하기 위하여 Extern 서버의 기능을 지원한다.

      Extern 서버의 기능을 사용하기 위해서는 서버 프로세스의 TYPE을 EXTSVR이라고 지정하며 NODE 절에 EXTPORT와 EXTCLHPORT 항목을 설정한다. EXTPORT 항목에 TMM의 Listen 포트 번호를 설정한다.

  • EXTCLHPORT = literal

    • CLH의 Listen 포트 번호를 설정한다. 지정하지 않을 경우, 시스템에서 자동으로 할당한다.

    • 다음은 Extern 서버를 사용하는 예제이다.

      *NODE
      tmaxh3        ... 
                    EXTPORT = 9000, EXTCLHPORT = 9010
      
      *SERVER
      alinkjmapp    SVGNAME = svg1,  
                    MIN = 1, MAX = 1, 
                    CPC = 10, 
                    SVRTYPE=EXTSVR
      
      *SERVICE
      JMAPPER       SVRNAME = alinkjmapp, 
                    SVCTIME = 30
  • SMSUPPORT = Y | N

    • 기본값 : N

    • SysMaster Trace 기능 지원 여부를 선택하는 옵션으로 'Y'일 경우 Trace 기능을 지원하며, 'N'일 경우 지원하지 않는다. SysMaster Trace 기능은 수행 중인 서비스의 GID를 알아내어 시스템 단위의 업무 추적을 가능하게 한다.

    • 다음은 GID의 구조이다(12Byte).

      구분크기설명
      GID04Byte제품 내의 클라이언트별 고유 번호 (WebtoB의 경우 cli id) domain id, node id, hth #, slot id 등으로 제품에 접속한 클라이언트를 구별하기 위한 번호이다.
      GID14Byte부분으로 구성되는데 상위 3Byte는 seq #, 하위 1Byte는 제품의 고유 ID이다.
      SEQNO4Byte상위 2Byte는 비동기 호출을 하는 경우 branch #로 사용, 하위 2Byte는 모든 호출에서 seq #로 사용한다.
  • SMTBLSIZE = numeric

    • 범위 : 1024~MAX_INT

    • 기본값 : 50000

    • CLH별 SysMaster Trace 최대 저장 건수로 SMSUPPORT 항목이 'Y'일 경우에만 설정한다.

  • CLLBLOCK = Y | N

    • 기본값 : N

    • CLL 블록 설정 여부를 결정한다. Y로 설정한 경우, 클라이언트가 Tmax 시스템에 접속할 경우 CLL이 블록된다.

    • Tmax 서비스가 완전히 기동되지 않은 상태에서 클라이언트의 요청이 왔을 경우, CLL이 기동되어 있는 상태라면 클라이언트는 Tmax 시스템에 접속이 허용되며, TPENOREADY 에러가 발생한다.

      따라서 이러한 문제점을 없애기 위하여 관리자가 클라이언트 요청을 CLL에서 블록 처리하도록 한다. 이렇게 하면 서비스가 완전히 준비되기 전에 서비스 요청이 들어오는 것을 방지할 수 있다.

    • 서비스가 모두 기동되었을 경우는 tmadmin을 이용하여 CLL 블록 기능을 해제할 수 있다.

  • CLLUNBLKPORT = "Portno1, Portno2 …"

    • CLL 블록 예외 포트 번호를 설정한다. TMAXPORT로 설정된 포트 번호 중에서 지정할 수 있다.

    • CLL 블록이 설정된 경우, Tmax 환경 파일에 CLL 블록 예외 포트를 지정할 수 있다. 블록 예외 포트를 설정하면 CLL 블록 기능이 설정되어 있어도 해당 포트로 접속한 클라이언트는 블록되지 않는다.

  • CLLBLOCKTIME = numeric

    • 기본값 : 0

    • CLLBLOCK=Y일 경우 CLLBLOCKTIME을 통해 CLL의 블록 시간(초)을 지정할 수 있다. 블록 시간이 지나면 CLL의 블록이 해제된다.

    • 만약 블록 시간이 0 이하의 값이거나 CLLBLOCK=Y일 때 CLLBLOCKTIME을 지정하지 않았다면 tmadmin을 사용하여 CLL 블록 기능을 해제해야 한다.

  • CLLCONNLB = RR | LC

    • 기본값 : RR

    • CLL이 CLH로 클라이언트 커넥션을 넘기는 방식을 설정한다.

    • CLLCONNLB = LC로 설정하면 Lease Connection 방식으로 CLL이 가장 적은 커넥션을 가진 CLH에 다음 커넥션을 맺는다.

    • CLLCONNLB를 지정하지 않거나 그 외의 값을 대입하면 기본값인 Round Robin 방식으로 다음 커넥션을 맺는다.

  • CRYPTPORT= Portnumber list

    • NODE 절에 CRYPTPORT 항목을 지정할 경우, CRYPTPORT에 지정된 포트로 접속한 클라이언트의 데이터만 암호화된다. 보다 유연한 암호화 기능을 위하여 세션별로 암호화를 선별하여 지정할 수 있도록 한다.

    • 다음은 항목을 설정할 때 고려할 사항이다.

      • CRYPTPORT 항목은 반드시 TMAXPORT 항목 중 하나를 지정해야 한다.

      • DOMAIN 절에 CRYPT 항목을 'Y'로 지정한 경우에만 암호화가 가능하다.

      • DOMAIN 절에 CRYPT 항목을 'Y'로 지정한 후, NODE 절에 CRYPTPORT 항목값을 지정하지 않는다면 TMAXPORT로 설정한 모든 값이 CRYPTPORT로 지정된다.

      • CRYPTPORT에 복수 포트 지정이 가능하다.

  • TRB = string

    • 멀티 노드 및 멀티 도메인 환경에서 장비의 장애 등으로 인하여 특정 노드가 일시적으로 사용이 불가능할 경우, pending 트랜잭션으로 인한 가용성 저하를 해소하기 위하여 트랜잭션 복구를 대신할 수 있는 백업 노드(TRB 노드)를 구성한다.

    • 다음 그림처럼 Node A에 대한 TRB Node A'를 미리 구성해 놓는다.

      장비 A에 장애가 발생할 경우, TRB Node A'를 기동시켜, pending된 트랜잭션을 자동 복구시킨다.

      [그림 3.3] TRB

      TRB

    • TRB 항목은 트랜잭션 복구 백업 노드(TRB 노드)에 지정하며, Primary 노드명을 지정해 준다.

    • TRB 노드는 하나의 서버 그룹을 가지고 있어야 하며, 이 서버 그룹에는 사용할 데이터베이스의 정보를 지정하고 1개의 TMS를 설정한다. 게이트웨이를 사용할 경우, GATEWAY 절에도 TRB 항목을 지정해 준다.

    • 다음은 항목을 설정할 때 고려할 사항이다.

      • TRB 노드를 기동시키기 전에, 장애가 발생한 Primary 노드의 tlog(TXLOG, GWTXLOG)를 TRB 노드로 복사해야 한다.

      • TXLOG, GWTXLOG는 현재 장비에 의존적인 바이너리 포맷이므로 같은 기종에서만 호환될 수 있다. CPU가 다른 경우(Little endian / Big Endian)나 바이너리 모드가 다를 경우(32Bit / 64Bit)에는 호환되지 않는다.

      • 장애가 발생한 노드가 접근했던 데이터베이스를 TRB 노드에서도 접근할 수 있어야 한다.

      • 장애가 발생한 노드와 TRB 노드의 IP/PORT가 다르므로 EAI에서 이를 수용할 수 있어야 한다.

      • TRB 노드에서는 트랜잭션 복구 기능만 수행하며, 서비스 수행은 하지 않는다.

      • 기본적으로 TRB 노드의 기동 및 종료는 수동으로 관리해야 하며, APM 솔루션 등을 이용하여 노드의 장애 감지 및 TRB 노드의 기동, 종료를 자동화할 수 있다.

    • TRB 노드의 기동, 종료

      TRB 노드는 일반 노드와는 다른 방법으로 기동, 종료하기 위해 -B 옵션을 사용한다.

      $tmboot –B <nodename>

      TRB와 관련된 환경설정은 다음과 같다.

      *NODE
      #Primary node
      NODE1     TMAXDIR = /data/tmax
      
      #TRB node
      NODE2     TMAXDIR = /data2/tmax, TRB = NODE1
  • MAXSESSION = numeric

    • 범위 : 1 ~ 65535

    • 기본값 : 1024

    • 노드 내의 HMS에서 생성할 수 있는 세션의 수의 최댓값을 설정한다. 자세한 내용은 “3.7. HMS 환경설정”을 참고한다.

  • SQKEY=numeric

    • 범위 : 32768~262143

    • SQ 저장소로 사용될 공유 메모리 세그먼트(shared memory segment)를 가리키는 키 값을 정의한다.

  • SQSIZE=numeric

    • 범위 : 4 ~ 4000000 (단위 : Kbyte )

    • SQ 저장소로 사용될 공유 메모리 세그먼트의 크기를 정의한다.

  • SQMAX=numeric

    • 범위 : 2~MAX_INT-1 (단위 : Kbyte )

    • 노드에 생성될 수 있는 최대 SQ 개수로서 짝수로 설정해야 한다. 홀수로 설정할 경우 하나 작아진다.

  • SQKEYMAX=numeric

    • 기본값 : 1~MAX_INT

    • 각 SQ 에서 저장 가능한 최대 키 개수이다.

  • SQTIMEOUT=numeric

    • 기본값 : 1~MAX_INT (단위: 초)

    • SQ 데이터 보관 타임아웃이다. 타임아웃의 경우 데이터가 자동 삭제된다.

  • IP = literal

    • 크기 : 255자 이내

    • 해당 노드의 IP주소를 지정한다.

    • 다른 노드와의 연결을 시도할 때 호스트명으로부터 IP주소를 알 수 없을 경우에는 반드시 지정해야 한다.

    • IPv6 주소를 사용할 경우에는 SYSTEM_IPV6 설정을 'Y'로 지정해야 한다.

    • 클라이언트 접속 요청을 위한 포트를 생성할 때 바인드될 인터페이스에 대한 IP주소로 사용된다. 관련 설정으로 CLL_BIND_IP가 있다.

  • CLIENT_IPV6 = Y | N

    • 기본값 : N

    • Tmax 시스템에서 클라이언트의 접속을 위한 포트를 생성할 때 IPv6 프로토콜의 사용 여부를 결정한다.

      설정값설명
      YIPv6 프로토콜을 사용하여 접속 요청을 기다리게 되며, 클라이언트는 IPv4 환경이나 IPv6 환경에서 Tmax 시스템으로 접속이 가능하다.
      NIPv4 프로토콜을 사용하여 접속 요청을 기다리는 것이며, 이 경우에 클라이언트는 IPv4에서만 접속이 가능하다.
  • SYSTEM_IPV6 = Y | N

    • 기본값 : N

    • Tmax 시스템이 여러 노드로 구성되었을 경우에 노드 사이의 통신을 위한 포트를 생성할 때 IPv6 프로토콜의 사용 여부를 결정한다.

      설정값설명
      Y다른 노드들의 접속 요청을 위해 포트를 생성할 때 IPv6 프로토콜을 사용하여 접속 요청을 기다리게 된다.
      NIPv4 프로토콜을 사용하여 접속 요청을 기다린다.
  • EXTSVR_IPV6 = Y | N

    • 기본값 : N

    • Tmax 시스템에서 Extern Server의 접속을 위한 포트를 생성할 때 IPv6 프로토콜의 사용 여부를 결정한다.

      설정값설명
      YIPv6 프로토콜을 사용하여 접속 요청을 기다리게 된다.
      NIPv4 프로토콜을 사용하여 접속 요청을 기다린다.
  • CLL_BIND_IP = Y | N

    • 기본값 : Y

    • 클라이언트 접속을 위한 포트를 생성할 때 NODE 절의 IP에 설정된 주소의 인터페이스를 사용할 것인지 여부를 결정한다.

      설정값설명
      NIP를 설정하지 않으면 모든 인터페이스로부터의 접속을 허용한다.

재정의 가능 항목

DOMAIN 절에서 정의되었으나 각 노드에 따라 새롭게 정의할 수 있는 항목이 있다. 이 항목은 NODE 절에 정의되어 있지 않으면, DOMAIN 절에서 정의된 값이 모든 노드에 공통적으로 적용된다. 재정의되는 경우 해당 노드에 대해서는 NODE 절에서 정의된 새로운 값이 적용되며, 형식이나 내용은 DOMAIN 절과 동일하다.

다음은 NODE 절의 표현 형식 및 항목과 관련된 표이다.

항목명 = 항목 값 
항목명항목값기본값
SHMKEYnumeric 
MINCLHnumeric1
MAXCLHnumeric10
TPORTNOnumeric8888
RACPORTnumeric3333
MAXUSERnumeric 
IPCPERMnumeric0600
MAXSPRnumeric64
MAXSVRnumeric64
MAXCPCnumeric32
LOGOUTSVCstring 
TMMLOGLVLstringDETAIL
CLHLOGLVLstringDETAIL
TMSLOGLVLstringDETAIL
LOGLVLstringDETAIL
TDLY|NN
CLIENT_IPV6Y|NN
SYSTEM_IPV6Y|NN
EXTSVR_IPV6Y|NN
CLL_BIND_IPY|NY

사용 예제

다음은 NODE 절의 사용 예제이다.

  • NODE 절의 사용 예제 1 (물리 노드)

    *NODE
    DEFAULT:
             MINCLH = 2, MAXCLH = 3
    tmax1    TMAXDIR = "/home/tmax",
             APPDIR = "/home/tmax/appbin",
             PATHDIR = "/home/tmax/path",
             SLOGDIR = "/home/tmax/log/slog",
             TLOGDIR = "/home/tmax/log/tlog",
             ULOGDIR = "/home/tmax/log/ulog",
             TMMOPT = "-o /home/tmax/log/slog/tmmo.log –e /home/tmax/log/slog/tmme.log",
             CLHOPT = "-o /home/tmax/log/slog/clho.log –e /home/tmax/log/slog/clhe.log",
             ENVFILE = "/home/tmax/server/start",
             TMAXPORT = "8850, 9000, 9001, 9002, 9003",
             CompressPort = "9000, 9001",
             CompressSize = 10240,
             RESTART = Y, MAXRSTART = -1, GPERIOD = 100
  • NODE 절의 사용 예제 2 (한 대의 머신에서 논리 노드)

    *NODE
    DEFAULT:
            HOSTNAME = "tmaxs1",
            TMAXHOME = "/user/QA/tmax",
            NODETYPE = SHM_USER
    
    tmaxs1  TMAXDIR = "/user/QA/tmax",
            APPDIR  = "/user/QA/tmax/appbin",
            PATHDIR = "/user/QA/tmax/path",
            TLOGDIR = "/user/QA/tmax/log/tlog",
            ULOGDIR = "/user/QA/tmax/log/ulog",
            SLOGDIR = "/user/QA/tmax/log/slog"
    
    NODE1   TMAXDIR = "/user/QA/proj1",
            APPDIR  = "/user/QA/proj1/appbin",
            PATHDIR = "/user/QA/proj1/path",
            TLOGDIR = "/user/QA/proj1/log/tlog",
            ULOGDIR = "/user/QA/proj1/log/ulog",
            SLOGDIR = "/user/QA/proj1/log/slog",
            TPORTNO = 8952, SHMKEY = 76995,
            RACPORT = 3334
    
    NODE2  TMAXDIR = "/user/QA/proj2",
           APPDIR  = "/user/QA/proj2/appbin",
           PATHDIR = "/user/QA/proj2/path",
           TLOGDIR = "/user/QA/proj2/log/tlog",
           ULOGDIR = "/user/QA/proj2/log/ulog",
           SLOGDIR = "/user/QA/proj2/log/slog",
           TPORTNO = 8993, SHMKEY = 76999, 
           RACPORT = 3335, NODETYPE = RACD

    실제 HOSTNAME은 tmaxs1이며, 3개의 논리 노드(tmaxs1, NODE1, NODE2)가 존재하여 멀티 노드 구성을 이룬다. TMAXHOME은 3개의 논리 노드가 공유하는 Tmax 설치 디렉터리(bin, lib, usrinc, tuxinc, topinc, cblinc)이며, TMAXDIR은 각각 논리 노드의 작업 디렉터리(config, path, license, log, svct)가 된다. tmaxs1 논리 노드에서 tmboot할 경우, NODE1의 NODETYPE이 SHM_USER이므로 NODE1에게는 racd를 통하지 않고 직접 "tmboot/tmdown/tmadmin"을 수행하게 된다. NODE2의 NODETYPE이 SHM_RACD이므로 NODE2에게는 racd를 통하여 tmboot 등을 수행하게 된다.

    각 논리 노드들은 현재의 환경 파일을 읽어들이고 TMAXDIR을 이용하여 자신의 노드 번호를 알아낸 후, 해당 TMM에 접속하여 "tmboot/tmdown/tmadmin/cfl/gst"를 하거나 원하는 파일을 읽고 쓰는 작업을 수행하게 된다.

    cfl을 이용하여 환경 파일을 컴파일할 경우 현재의 환경변수 $TMAXDIR 디렉터리의 config($TMAXDIR/config)를 참조하여 컴파일하며, gst를 사용하는 경우도 "$TMAXDIR/svct"를 참조하여, 로컬 노드에 자신에 해당하는 서비스 테이블을 생성한다.

  • NODE 절의 사용 예제 3 (여러 머신에서 논리 노드)

    *NODE
    DEFAULT:
            HOSTNAME = "tmaxs1",
            TMAXHOME = "/user2/QA/tmax32",
            NODETYPE = SHM_USER
    
    tmaxs1  TMAXDIR = "/user2/QA/tmax32",
            APPDIR  = "/user2/QA/tmax32/appbin",
            PATHDIR = "/user2/QA/tmax32/path",
            TLOGDIR = "/user2/QA/tmax32/log/tlog",
            ULOGDIR = "/user2/QA/tmax32/log/ulog",
            SLOGDIR = "/user2/QA/tmax32/log/slog"
    
    NODE1   TMAXDIR = "/user2/QA/proj1",
            APPDIR  = "/user2/QA/proj1/appbin",
            PATHDIR = "/user2/QA/proj1/path",
            TLOGDIR = "/user2/QA/proj1/log/tlog",
            ULOGDIR = "/user2/QA/proj1/log/ulog",
            SLOGDIR = "/user2/QA/proj1/log/slog",
            TPORTNO = 8952, SHMKEY = 76995, 
            RACPORT = 4335
    DEFAULT:
            HOSTNAME = tmaxc1,
            TMAXHOME = "oracle/QA/tmax",
            NODETYPE = SHM_RACD
    
    tmaxc1  TMAXDIR = "/oracle/QA/tmax",
            APPDIR  = "/oracle/QA/tmax/appbin",
            PATHDIR = "/oracle/QA/tmax/path",
            TLOGDIR = "/oracle/QA/tmax/log/tlog",
            ULOGDIR = "/oracle/QA/tmax/log/ulog",
            SLOGDIR = "/oracle/QA/tmax/log/slog",
            TPORTNO = 8893, SHMKEY = 76980,
            RACPORT = 4335
    
    NODE3   TMAXDIR = "/oracle/QA/proj1",
            APPDIR  = "/oracle/QA/proj1/appbin",
            PATHDIR = "/oracle/QA/proj1/path",
            TLOGDIR = "/oracle/QA/proj1/log/tlog",
            ULOGDIR = "/oracle/QA/proj1/log/ulog",
            SLOGDIR = "/oracle/QA/proj1/log/slog",
            TPORTNO = 9984, SHMKEY = 76999, 
            RACPORT = 4336

    실제 HOSTNAME은 tmaxs1과 tmaxc1이며, 4개의 논리 노드(tmaxs1 호스트의 tmaxs1과 NODE1, tmaxc1 HOST의 tmaxc1과 NODE3)이 존재하여 멀티 노드 구성을 이룬다.

    tmaxc1, NODE3의 NODETYPE이 SHM_RACD이므로 tmaxc1 호스트 내에서 tmaxc1과 NODE3 논리 노드 사이에 racd를 사용하여 "tmboot/tmdown/tmadmin" 등을 수행하게 된다. 만약 tmboot 등을 수행하는 노드가 tmaxs1 호스트의 NODE1이라면 tmaxc1 호스트 내의 tmaxc1과 NODE3 노드의 NODETYPE은 의미가 없게 되며 무조건 racd를 이용하여 통신을 하게 된다.

    racd는 TMAXDIR과 RACPORT를 통해 실행되는데, 사용자가 각 논리 노드의 racd를 실행하기 위해서 두 환경 변수를 매번 바꿔주는 것이 불편하기 때문에 racd에 -i 옵션과 -l 옵션을 사용하여 어느 노드의 racd인지를 쉽게 구별할 수 있다. NODETYPE이 SHM_RACD일 경우 각 논리 노드마다 모두 racd를 하나씩 실행해야 하기 때문이다.

다음은 TRB 노드의 사용 예제이다.

  • 멀티 노드 사용 예제

    *DOMAIN
    dom1      SHMKEY =78755,  
              RACPORT = 3366, . . .
            
    *NODE
    tmaxh4     TMAXDIR = "/data1/tmaxqas/tmax",
               APPDIR = "/data1/tmaxqas/tmax/appbin",
    
    tmaxi1     TMAXDIR = "/data/tmaxqas/tmax",
               APPDIR = "/data/tmaxqas/tmax/appbin",
    
    tmaxh4b    TMAXDIR = "/data/QA/tmax",
               APPDIR  = "/data/QA/tmax/appbin",
               HOSTNAME = "tmaxi1", SHMKEY = 78630, TPORTNO = 8630,
               TRB = tmaxh4, RACPORT = 3155
    
    tmaxi1b    TMAXDIR = "/EMC01/QA/tmax",
               APPDIR  = "/EMC01/QA/tmax/appbin",
               HOSTNAME = tmaxh4, SHMKEY = 78950, TPORTNO = 8520     
               TRB = tmaxi1,
               RACPORT = 3355
    
    *SVRGROUP
    svg1       NODENAME = tmaxi1, DBNAME = ORACLE,
               OPENINFO = "...",
               TMSNAME  = tms_ora1
    
    svg5       NODENAME = tmaxh4, DBNAME = ORACLE,
               OPENINFO = "..."
               TMSNAME  = tms_ora5
    
    #TRB NODE
    svgb1      NODENAME = tmaxh4b, DBNAME = ORACLE,
               OPENINFO = "...",
               TMSNAME  = tms_orab1,
               MINTMS = 1, MAXTMS = 1  #only 1 tms needed
    
    svgb2      NODENAME = tmaxi1b, DBNAME = ORACLE,
               OPENINFO = "..."
               TMSNAME  = tms_orab2, MINTMS = 1, MAXTMS = 1
    
    *SERVER
    svr2301TX  SVGNAME = svg1, MIN = 5, MAX = 5, MAXRSTART = -1
    svr2305TX  SVGNAME = svg5, MIN = 5, MAX = 5, MAXRSTART = -1
  • 멀티 도메인 사용 예제 1 (2개의 도메인)

    <멀티 도메인 Dom1>

    *DOMAIN
    dom1    SHMKEY =78351,
            DOMAINID = 10, ...
            
    *NODE
    tmaxh4   TMAXDIR = "/data1/tmaxqas/tmax",
             APPDIR = "/data1/tmaxqas/tmax/appbin",
            
    tmaxh4b  TMAXDIR = "/data/QA/tmax",
             APPDIR  = "/data/QA/tmax/appbin",
             TRB = tmaxh4, HOSTNAME = tmaxi1, ...
    
    *SVRGROUP
    svg5     NODENAME = tmaxh4, DBNAME = ORACLE,
             OPENINFO = "...",
             TMSNAME  = tms_ora5
    
    #TRB NODE
    svgb      NODENAME = tmaxh4b, DBNAME = ORACLE,
              OPENINFO = MINTMS=1, MAXTMS=1,  # only 1 tms needed
              TMSNAME = tms_orab1
    
    *SERVER
    svr2305TX   SVGNAME = svg5, MIN = 5, MAX = 5, MAXRSTART = -1
    
    *SERVICE
    SVC2301TX_1     SVRNAME = gw2301X
    SVC2305TX_1     SVRNAME = svr2305TX
    
    *GATEWAY
    gw2301X        GWTYPE = TMAX, PORTNO = 4789,
                   NODENAME = tmaxh4
    
                   # Domain B 의 gw2301TX
                   RGWADDR = "192.168.1.13",
                   RGWPORTNO = 4789,
    
                   # Domain B 의 gw2302TX (TRB)
                   BACKUP_RGWADDR = "192.168.1.43",
                   BACKUP_RGWPORTNO = 5789,
                   
    gw2302X        GWTYPE = TMAX, PORTNO = 5789,
                   NODENAME = tmaxh4b,
    
                   # Domain B 의 gw2301TX
                   RGWADDR = "192.168.1.13",
                   RGWPORTNO = 4789,
    
                   # Domain B 의 gw2302TX (TRB)
                   BACKUP_RGWADDR = "192.168.1.43",
                   BACKUP_RGWPORTNO = 5789,
                     
                   TRB = gw2301X

    <멀티 도메인 Dom2>

    # Nodeno 1
    *DOMAIN
    domB      SHMKEY = 78651,  
              DOMAINID = 20, ...
                   
    *NODE
    tmaxi1     TMAXDIR = "/data/tmaxqas/tmax",
               APPDIR = "/data/tmaxqas/tmax/appbin",
                    
    tmaxi1b    TMAXDIR = "/EMC01/QA/tmax",
               APPDIR  = "/EMC01/QA/tmax/appbin",
               TRB = tmaxi1, HOSTNAME = tmaxh4
    
    *SVRGROUP
    svg1       NODENAME = tmaxi1, DBNAME = ORACLE,
               OPENINFO = "...",
               TMSNAME  = tms_ora1
    
    # TRB NODE
    svgb1      NODENAME = tmaxi1b, DBNAME = ORACLE,
               OPENINFO = "..." ,
               TMSNAME  = tms_orab1, MINTMS = 1, MAXTMS = 1
    
    
    *SERVER
    svr2301TX       SVGNAME = svg1, MIN = 5, MAX = 5, MAXRSTART = -1
    
    *SERVICE
    SVC2301TX_1     SVRNAME = svr2301TX
    SVC2305TX_1     SVRNAME = gw2301X
    
    *GATEWAY
    gw2301X        GWTYPE = TMAX, PORTNO = 4789,
                   NODENAME = tmaxi1,
    
                   # Domain A 의 gw2301X
                   RGWADDR = "192.168.1.43",
                   RGWPORTNO = 4789,
    
                   # Domain A 의 gw2302X (TRB)
                    BACKUP_RGWADDR = "192.168.1.13",
                    BACKUP_RGWPORTNO = 5789,
                    
    gw2302X        GWTYPE = TMAX, PORTNO = 5789,
                   NODENAME = tmaxi1b,
    
                   # Domain A 의 gw2301X
                    RGWADDR = "192.168.1.43",
                    RGWPORTNO = 4789,
    
                    # Domain B 의 gw2302X (TRB)
                    BACKUP_RGWADDR = "192.168.1.13",
                    BACKUP_RGWPORTNO = 5789,
                    TRB = gw2301X
  • 멀티 도메인 사용 예제 2 (3개의 도메인)

    <멀티 도메인 Dom1>

    *DOMAIN
    dom1         SHMKEY = 78351,  
                 RACPORT = 3155,
                 DOMAINID = 10,
    #------------------------------------------------------------------------
    *NODE
    
    tmaxh4       TMAXDIR = "/data1/tmaxqas/tmax",
                 APPDIR = "/data1/tmaxqas/tmax/appbin",
    
    tmaxh4b1     TMAXDIR = "/data/QA/tmax",
                 APPDIR  = "/data/QA/tmax/appbin",
                 TRB = tmaxh4, SHMKEY = 86655, TPORTNO = 8450,
                 HOSTNAME = tmaxi1
    
    tmaxh4b2     TMAXDIR = "/user1/tmaxqam/tmax",
                 APPDIR  = "/user1/tmaxqam/tmax/appbin",
                 TRB = tmaxh4, SHMKEY = 86655, TPORTNO = 8450, 
                 HOSTNAME = ibm5l
    
    *SVRGROUP
    svg1         NODENAME = tmaxh4, DBNAME = ORACLE,
                 OPENINFO = "...",
                 TMSNAME  = tms_ora1
    
    # TRB NODE
    svgb1        NODENAME = tmaxh4b1, DBNAME = ORACLE,
                 OPENINFO = "...",
                 TMSNAME  = tms_orab1, MINTMS = 1, MAXTMS = 1
    
    svgb2        NODENAME = tmaxh4b2, DBNAME = ORACLE,
                 OPENINFO = "...",
                 TMSNAME  = tms_orab2, MINTMS = 1, MAXTMS = 1
    
    *SERVER
    svr2301TX    SVGNAME = svg1, MIN = 5, MAX = 5, MAXRSTART = -1
    *SERVICE
    SVC2301TX_1  SVRNAME = svr2301TX
    SVC2305TX_1  SVRNAME = gw2301X
    SVC2309TX_1  SVRNAME = gw2302X
    
    *GATEWAY
    # Domain B에 대한 Gateway
    gw2301X      GWTYPE = TMAX, PORTNO = 4010,
                 NODENAME = tmaxh4,
    
                 #Domain A의 gw2301X
                 RGWADDR = "192.168.1.13",
                 RGWPORTNO = 4010,
    
                 # Domain B의 gw2301Xb (TRB)
                 BACKUP_RGWADDR = "192.168.1.31",
                 BACKUP_RGWPORTNO = 5010,
    
                 # Domain B의 gw2302Xb (TRB)
                 BACKUP_RGWADDR2 = "192.168.1.43",
                 BACKUP_RGWPORTNO2 = 6010,
                    
    gw2301Xb     GWTYPE = TMAX, PORTNO = 5010,
                 NODENAME = tmaxh4b1, #192.168.1.13
                 RGWADDR = "192.168.1.13",
                 RGWPORTNO = 4010,
                 BACKUP_RGWADDR = "192.168.1.31",
                 BACKUP_RGWPORTNO = 5010,
                 BACKUP_RGWADDR2 = "192.168.1.43",
                 BACKUP_RGWPORTNO2 = 6010,
                 TRB = gw2301X
    
    gw2301Xb2    GWTYPE = TMAX, PORTNO = 6010,
                 RGWADDR = "192.168.1.13",
                 RGWPORTNO = 4010,
                 BACKUP_RGWADDR = "192.168.1.31",
                 BACKUP_RGWPORTNO = 5010,
                 BACKUP_RGWADDR2 = "192.168.1.43",
                 BACKUP_RGWPORTNO2 = 6010,
                 NODENAME = tmaxh4b2, #192.168.1.31
                 TRB = gw2301X
    
    # Domain C에 대한 Gateway
    gw2302X      GWTYPE = TMAX, PORTNO = 4020,
    
                 #Domain C의 gw2302X
                 RGWADDR = "192.168.1.31",
                 RGWPORTNO = 4020,
    
                 # Domain C의 gw2302Xb (TRB)
                 BACKUP_RGWADDR = "192.168.1.43",
                 BACKUP_RGWPORTNO = 5020,
    
                 # Domain C의 gw2302Xb2 (TRB)
                 BACKUP_RGWADDR2 = "192.168.1.13",
                 BACKUP_RGWPORTNO2 = 6020,
                 NODENAME = tmaxh4,
                    
    gw2302Xb     GWTYPE = TMAX, PORTNO = 5020,
                 RGWADDR = "192.168.1.31",
                 RGWPORTNO = 4020,
                 BACKUP_RGWADDR = "192.168.1.43",인
                 BACKUP_RGWPORTNO = 5020,
                 BACKUP_RGWADDR2 = "192.168.1.13",
                 BACKUP_RGWPORTNO2 = 6020,
                 NODENAME = tmaxh4b1,  #192.168.1.13
                 TRB = gw2301X
    
    gw2302Xb2    GWTYPE = TMAX, PORTNO = 6020,
                 RGWADDR = "192.168.1.31",
                 RGWPORTNO = 4020,
                 BACKUP_RGWADDR = "192.168.1.43",
                 BACKUP_RGWPORTNO = 5020,
                 BACKUP_RGWADDR2 = "192.168.1.13",
                 BACKUP_RGWPORTNO2 = 6020,
                 NODENAME = tmaxh4b2,  #192.168.1.31
                 TRB = gw2301X

3.2.3. SVRGROUP 절

Tmax는 응용 서버 프로세스를 그룹 단위로 묶어서 관리한다. 서버의 그룹화는 그 서버가 어떤 노드에 존재하는지, 어떤 데이터베이스를 사용하는지, 또한 어떤 논리적인 연관성이 있는지 등에 따라 이루어진다. 서버 그룹은 트랜잭션 처리, 부하 조절, 장애 대책, 라우팅이 이루어지는 기본 단위로 자세한 내용은 관련 부분에서 다룰 것이다.

SVRGROUP 절에는 다음과 같은 내용이 정의된다.

  • 각 서버 그룹이 속하는 노드

  • 데이터베이스 관련 정보

  • 분산 트랜잭션 관련 정보

SVRGROUP 절의 일부 항목은 NODE 절에서 정의했어도 노드에 따라 새롭게 정의할 수 있다. 재정의 가능한 항목은 절 3.2.3. “재정의 가능 항목 ” 설명을 참고한다.

SVRGROUP 절의 기본 환경설정 형식은 다음과 같다.

*SVRGROUP
[DEFAULT :]
SVRGROUP Name       NODENAME = node-name
                    [APPDIR = path,]
                    [ULOGDIR = path,]
                    [SVGTYPE = TMAX|EXTSVG ,]
                    [COUSIN = group-name,]
                    [BACKUP = group-name,]
                    [LOAD = numeric,]
                    [DBNAME = name-of-database,]
                    [OPENINFO = string,]
                    [CLOSEINFO = string,]
                    [MINTMS = numeric,]
                    [MAXTMS = numeric,]
                    [TMSNAME = name-of-tms,]
                    [ENVFILE = path,]
                    [XAOPTION = xaoption,]
                    [CPC = numeric,]
                    [RESTART = (Y)|N,]
                    [MAXRSTART = numeric,]
                    [GPERIOD = numeric,]
                    [TMSLOGLVL = tms-log-level,]
                    [LOGLVL = server-log-level,]
                    [TMSRECOVERY = (Y)|N,]
                    [TMSDEP = tms_name,...,]
                    [TMSRANGE = (DOMAIN)|NODE,]
                    [TMSTYPE = (STD) | STD_MT,]
                    [TMSTHREAD = numeric,]
                    [TMSOPT = arguments,]
                    [TMSXATIME = numeric,]
                    [DUMMY = Y | (N),]
                    [HMSNAME = string,]
                    [HMSINDEX = numeric,]
                    [HMSMAXTHR = numeric,]
                    [HMSMAXDBTHR = numeric,]
                    [HMSMAXBULKTHR = numeric,]
                    [HMSMAXBULKSIZE = numeric,]
                    [HMSOPT = literal,]
                    [HMSSUBSCFG = string,]
                    [HMSMSGLIVE = numeric,]
                    [HMSPORT = numeric,]
                    [HMSHEARTBEAT = numeric,] 
                    [HMSGQINT = numeric]  

필수 항목

  • SVRGROUP Name = string

    • 크기 : 15자 이내

    • 서버 그룹에 대한 논리적인 이름으로 SVRGROUP 절에서 유일한 이름이어야 한다.

    • SVRGROUP 절 이름은 SERVER 절의 SVGNAME 항목에서 사용된다.

  • NODENAME = string

    • 크기 : 15자 이내

    • 서버 그룹이 존재하는 노드를 정의한다. 사용되는 NODENAME은 NODE 절에서 정의한 노드명이어야 한다. 노드명에 하이픈(-)이 포함될 경우 반드시 큰따옴표(" ")로 묶어 주어야 한다.

선택 항목

  • DEFAULT: 항목 = 값, …

  • SVGTYPE = string

    • 기본값 : TMAX

    • 서버 그룹의 유형을 지정하는 항목으로 유형에는 TMAX와 EXTSVG, MTMAX, STMAX가 있으며 기본값은 TMAX이다. MTMAX, STMAX 항목에 대한 설명은 "Tmax Programming Guide(MultipleRM)를 참조한다.

    • EXTSVG는 Extern 서버와 같은 형태로 웹 애플리케이션 서버와 2PC를 지원하기 위해서 EXTERN TMS를 사용할 때 지정한다. EXTSVG를 사용할 경우, OPENINFO 항목도 함께 지정해 주어야 하는데 OPENINFO 절은 사실상 큰 의미가 없지만, 큰따옴표(" ")로 설정한다.

      <EXTSVG 서버 그룹을 사용한 예>

      *NODE
      tmaxh3         ... 
                     EXTPORT = 9000, EXTCLHPORT = 9010
      
      *SVRGROUP
      Extsvg         NODENAME = "tmaxh4", 
                     SVGTYPE = "EXTSVG", TMSNAME = TMSWAS
                     OPENINFO = " "
      
      *SERVER
      alinkjmapp     SVGNAME = Extsvg1, 
                     MIN = 1, MAX = 1, CPC = 20, 
                     SVRTYPE = EXTSVR
      
      *SERVICE
      JMAPPER        SVRNAME = alinkjmapp, 
                     SVCTIME = 30
  • COUSIN = literal

    • 크기 : 8000자 이내

    • 그룹별로 서로 공유해야 할 프로세스가 있거나, 그룹 사이 라우팅이 필요한 경우 그룹명을 지정한다. 같은 노드이거나 다른 노드에 속한 그룹인 경우에도 그룹명을 지정할 수 있다. COUSIN과 BACKUP을 함께 지정할 수 있는데 이 경우 COUSIN, BACKUP 각각 다른 서버 그룹이어야 한다.

      라우팅은 COUSIN에 지정한 서버 그룹이 담당하며, 장애가 발생할 경우 백업에 지정한 서버 그룹이 담당한다. 게이트웨이 서버도 COUSIN 그룹으로 묶을 수 있다.

  • BACKUP = literal

    • 크기 : 8000자 이내

    • 장애 대책 방안의 하나로 제공되며, 백업되어야 할 그룹명을 지정하면 장애가 발생해도 중단없이 지속적인 서비스를 수행할 수 있다.

  • LOAD = numeric

    • LOAD = -1

      Static Routing을 의미하며, 특정 노드에 접속한 클라이언트는 그 노드에 속하는 그룹에서 처리한다. LOAD를 -1 (로컬 전용)로 설정한 경우 COUSIN 에 속해 있는 도메인 게이트웨이는 호출되지 않는다. 따라서 도메인 게이트웨이 COUSIN 설정에서 LOAD를 -1로 설정할 수 없다.

      트랜잭션 및 비트랜잭션 게이트웨이 모두 사용이 불가능하다.

      [그림 3.4] LOAD 항목이 -1인 경우 동작 원리

      LOAD 항목이 -1인 경우 동작 원리


      • 설정 예

        *SVRGROUP
        svg1      NODENAME = tmaxh4,
                  COUSIN = "svg2, gw1, gw2", LOAD = -1
        svg2      NODENAME = tmaxh2, LOAD = -1
        
        *GATEWAY
        gw1      NODENAME = tmaxh4, LOAD = -1
        gw2      NODENAME = tmaxh2, LOAD = -1
    • LOAD = -2

      멀티 노드 환경에서 각각 게이트웨이를 설정하고 각각의 노드에 클라이언트를 분리 접속시켜 거래를 요청하는 경우, 1차적으로 접속된 노드에서 해당 서비스를 처리해 업무 부하를 줄일 수 있다.

      로컬 우선 처리 기능을 사용할 경우, COUSIN으로 묶여 있는 멀티 노드 환경에서는 클라이언트가 접속한 노드에 속하는 서버 그룹이 1:1로 서비스를 처리하게 되며, 게이트웨이를 통해 다른 도메인에 거래를 요청하는 경우에는 클라이언트에서 접속한 노드에 속해있는 게이트웨이가 해당 거래를 처리한다.

      특정 서버 그룹을 지정하여 호출(tpcallsvg, tpacallsvg)할 경우 로컬 노드 우선 처리 기능(LOAD=-2)을 설정했더라도 적용되지 않으며, 모든 서버 그룹에서 처리하게 된다. 또한 이 경우 해당 서버 그룹이 종료되면 다른 서버 그룹이 대신 처리하지 않고 TPENOREADY 에러가 발생한다.

      트랜잭션 게이트웨이의 경우 COUSIN 구성을 위한 일반 서버 그룹을(dummy 서버 그룹) 설정할 때에도 반드시 XA 서버 그룹으로 설정해야 하며 COUSIN으로 묶인 모든 서버 그룹과 게이트웨이의 LOAD 값을 모두 -2로 설정해야 한다.

      [그림 3.5] LOAD 항목이 -2인 경우 동작 원리

      LOAD 항목이 -2인 경우 동작 원리


      • 비트랜잭션 게이트웨이 설정 예

        *SVRGROUP
        svg1       NODENAME = tmaxh4,
                   COUSIN = "svg2, gw1, gw2", LOAD = -2
        svg2       NODENAME = tmaxh2, LOAD = -2
        
        *GATEWAY
        gw1       NODENAME = tmaxh4, GWTYPE = TMAXNONTX, LOAD = -2
        gw2       NODENAME = tmaxh2, GWTYPE = TMAXNONTX, LOAD = -2
      • 트랜잭션 게이트웨이 설정 예

        *SVRGROUP
        svg1      NODENAME = tmaxh4, 
                  DBNAME = ORACLE,
                OPENINFO = "Oracle_Xa+Acc=P/scott/tiger+SesTm=60+LogDir=
                 /data1/tmaxqam/tmax/log/tlog/xalog",
                TMSNAME = tms_ora,
                  COUSIN = "svg2, gw1, gw2", LOAD = -2
        svg2      NODENAME = tmaxh2, 
                  DBNAME = ORACLE,
                 OPENINFO = "Oracle_Xa+Acc=P/scott/tiger+SesTm=60+LogDir=
                 /data1/tmaxqam/tmax/log/tlog/xalog",
                TMSNAME = tms_ora,
                  LOAD = -2
        
        *GATEWAY
        gw1       NODENAME = tmaxh4, GWTYPE = TMAX, LOAD = -2
        gw2       NODENAME = tmaxh2, GWTYPE = TMAX, LOAD = -2

    • LOAD = -3

      COUSIN으로 설정한 서버 그룹 간의 백업이 필요한 경우에 사용할 수 있는 설정이다.

      SVRGROUP 절의 BACKUP 항목은 COUSIN으로 설정한 서버 그룹들에 대한 백업 설정이 아니라, 설정된 서버 그룹에 대한 백업 설정이다. 예를 들어 서버 그룹 A COUSIN="B,C", BACKUP="D"로 구성되어 있는 경우 A, B, C가 속한 노드가 모두 종료된 경우에 D로 스케줄링하는 것이 아니라 A가 속한 노드가 비정상일 경우 A 스케줄링 차례에서만 D로 스케줄링한다. A, B, C에 속한 서버가 모두 비활성화되어 있을 경우 D로 가기 위한 설정값이 LOAD=-3이다.

      • 설정 예

        A COUSIN = "B,C,D", LOAD = -2
        B LOAD = -2
        C LOAD = -2
        D LOAD = -3                

        위와 같이 설정된 경우 평소에는 A, B, C로만 스케줄링을 시도하고 A, B, C 모두 문제가 있을 경우에는 D로 스케줄링한다. 즉, 평소에는 -3이 아닌 LOAD를 가진 서버 그룹만을 사용하여 스케줄링하고, 모두 문제가 있을 경우에는 -3을 가진 서버 그룹으로만 스케줄링한다. 이때 스케줄링은 -2와 같은 로컬 우선 부하 분산을 따른다.

    • LOAD = 0

      Dynamic Routing이 수행된다. Tmax 엔진이 판단하여 제일 부하가 적은 그룹이 서비스를 처리하여 부하를 분산시킨다.

    • LOAD > 0

      Rule Based Routing을 의미하며, 분산을 하고자 하는 그룹에 각각 지정한 비율로 부하를 분산할 수 있다. COUSIN 필드에서 정의된 GROUP에서만 수행된다. Tmax 서버 그룹의 로드 밸런싱은 LOAD 항목과 ROUTING 항목에 설정할 수 있으며 2가지를 각각 다른 값으로 설정하여 사용할 수 없다. ROUTING 절에 서비스가 설정되어 있다면 해당 서비스는 ROUTING에 의해서만 스케줄링되며 2차적으로 LOAD 값이 영향을 줄 수 없다. 따라서 COUSIN 안에서 ROUTING별로 그룹을 맺어서 스케줄링은 불가능하다.

      [그림 3.6] LOAD 항목이 양수인 경우 동작 원리

      LOAD 항목이 양수인 경우 동작 원리


      • 설정 예

        *SVRGROUP
        svg1      NODENAME = tmaxh4,
                  COUSIN = "svg2, gw1, gw2", LOAD = 1
        svg2      NODENAME = tmaxh2, LOAD = 1
        
        *GATEWAY
        gw1      NODENAME = tmaxh4, LOAD = 1
        gw2      NODENAME = tmaxh2, LOAD = 1

  • DBNAME = string

    • 크기 : 63자 이내

    • TMS로 설정되는 경우에 지정하고, 그 외에는 지정하지 않아도 무방하다. 데이터베이스 고유의 이름을 지정한다.

  • OPENINFO = literal

    • 크기 : 255자 이내

    • 데이터베이스와 연결을 하기 위해 TMS가 필요할 때 정의한다. 데이터베이스로 연결을 초기화하고 각 데이터베이스에서 제공되는 문법으로 정의한다.

    • OPENINFO 절의 내용의 암호화를 원할 경우 암호화를 원하는 부분을 ***** (애스터리스크 5개)로 표시한다. 암호화가 설정된 부분에 대해서는 cfl를 사용하면 암호를 입력받는다.

    • 부분 암호화

      OPENINFO = "ORACLE_XA+Acc=P/scott/*****+SesTm=100"
    • 전체 암호화

      OPENINFO = "*****"
  • CLOSEINFO = literal

    • 크기 : 255자 이내

    • 데이터베이스와 연동하는 그룹인 TMS가 설정되는 경우에 지정한다. 데이터베이스와 연결을 종료하기 위한 것으로 각 데이터베이스에서 제공되는 문법으로 정의한다. 대부분의 데이터베이스는 이 항목이 필요없으나, Informix 경우에는 반드시 지정해야 한다.

  • MINTMS = numeric

    • 범위 : 1~16

    • 기본값 : 2

    • 데이터베이스와 연동하는 그룹인 TMS가 설정되는 경우 부팅될 때 기동되는 TMS 프로세스의 수를 지정한다.

  • MAXTMS = numeric

    • 범위 :1~16

    • 기본값 : 3

    • 데이터베이스와 연동하는 그룹인 TMS가 설정되는 경우 최대 기동될 수 있는 TMS 프로세스의 수를 지정한다.

  • TMSNAME = string

    • 크기 : 15자 이내

    • 데이터베이스와 연동하는 그룹인 TMS가 설정되는 경우 해당 서버 그룹의 데이터베이스 관리를 담당할 TMS 프로세스명을 정의한다.

  • ENVFILE = literal

    • 크기 : 255자 이내

    • 그룹에 속한 서버들에게 환경변수로 값을 전달하고자 할 때나 같은 노드에 복수의 동종 데이터베이스와 연동이 필요한 경우 지정한다.

  • XAOPTION = literal

    • 대부분의 데이터베이스는 이 항목이 필요없으나, 특별한 데이터베이스의 경우에는 이 항목을 지정한다. DB2와 같이 Dynamic register 방식만을 지원하는 DBMS의 경우 "DYNAMIC"이라고 지정해준다.

    • Sybase나 Informix 구버전과 같이 64Bit 엔진임에도 불구하고 xaswitch 구조체의 필드가 long이 아니라 int인 데이터베이스의 경우 "XASWITCH32"라고 지정한다.

  • CPC = numeric

    • 범위 : 1 ~ 128

  • RESTART = Y | N

    • 기본값 : Y

    • SVRGROUP 절에 지정하였을 경우 TMS의 재기동 여부를 결정하는 항목으로 비정상적으로 종료되었을 때 재기동한다.

  • TMSRECOVERY = Y | N

    • 기본값 : Y

    • 트랜잭션 복구 기능을 사용할지를 결정한다. 사용할 경우 'Y', 사용하지 않을 경우 'N'으로 설정한다.

    • Tmax 4.0 이상에서는 X/Open DTP에 정의된 트랜잭션 복구 기능을 지원한다. 복구 기능을 사용하게 되면 TMS가 재기동될 때 RM으로부터 pending되어 있는 트랜잭션의 XID list를 얻어오며, 이 결과물에 대하여 트랜잭션을 복구한다.

      Tmax는 단일 노드, 멀티 노드, Tmax 도메인 게이트웨이를 이용한 멀티 도메인 환경에서 트랜잭션 복구를 지원한다.

    • 그룹 전체를 기동/종료하는 경우 복구가 수행되기 때문에 TMS 그룹 단위로 복구가 가능하다. tmboot / tmdown 명령어에 특정 이름을 가진 TMS 전체를 기동/종료시키는 옵션이 추가되었다. 명령어에 대한 자세한 내용은 "Tmax Reference Guide"를 참고한다.

    • 이 기능을 사용하기 위해서는 RM에서 pending list 조회 등을 위한 권한을 주어야 한다.

  • TMSDEP = "tmsname1,…"

    • 같은 노드에서 서로 다른 서버 그룹이 데이터베이스를 공유하는 경우 TMS가 운영 중에 복구가 일어나지 않도록 의존관계를 맺을 수 있다.

      예를 들어 다음 예제와 같이 설정하여 서버 그룹 3개가 하나의 데이터베이스를 공유할 경우 tms1이 tms2와 tms3의 복구를 모두 수행하여 복구가 중복 수행되는 것을 사전에 막을 수 있다. 이렇게 의존 관계를 맺으면 tms2나 tms3가 운영 중에는 복구를 수행하지 않기 때문에 보다 안정적인 복구를 지원한다.

      svg1 TMSNAME = tms1, 
           TMSDEP = "tms2, tms3" 
      
      svg2 TMSNAME = tms2, 
           TMSRECOVERY = N 
      
      svg3 TMSNAME = tms3, 
           TMSRECOVERY = N
  • TMSRANGE = DOMAIN | NODE

    • 기본값 : DOMAIN

    • 서로 다른 노드에 있는 서버 그룹이 데이터베이스를 공유하는 경우 TMSRANGE를 "NODE"로 설정하면 각각 자신의 노드를 복구하기 때문에 노드 사이의 복구 메시지 트래픽을 줄일 수 있으며, 보다 안정적으로 복구가 수행된다.

  • TMSTYPE = STD | STD_MT

    • 기본값 : STD

    • TMSTYPE의 설정값은 다음과 같다 .

      설정값설명
      STD일반 TMS를 사용하기 위해서는 TMSTYPE을 STD로 설정한다. libtms.so 라이브러리를 사용해야 한다.
      STD_MTMulti Thread TMS를 사용하기 위해서는 TMSTYPE을 STD_MT로 설정한다. libtmsthr.so 라이브러리를 사용해야 한다.
  • TMSTHREAD = numeric

    • TMS 프로세스 1개당 working thread 개수를 설정한다.

  • TMSOPT = "arguments"

    • TMS 로그가 저장될 디렉터리와 파일명을 지정할 수 있다. 사용 방법은 TMMOPT, CLHOPT와 동일하다.

  • TMSXATIME = numeric

    • 단위 : 초

    • TMSXATIME보다 오래 걸리는 XA 처리의 경우 로깅 기능을 제공한다.

    • TMS에서 xa_prepare, xa_commit, xa_rollback 등 XA 처리가 비정상적으로 오래 걸리는 경우, 데이터베이스의 장애를 의심할 수 있다. 추후 장애 원인을 분석하기 위해 TMSXATIME에 설정된 값보다 XA 처리가 오래 걸리는 경우 로깅 기능을 제공한다.

    • 로그는 다음과 같다.

      CLH2160 XA 함수명(xid) processing was delayed (경과시간) by tms(서버 그룹 번호) 
             : XA함수 반환값
      CLH2161 XA함수명(xid) processing may be stopped due to closed tms(서버 그룹 번호)
  • DUMMY = Y | N

    • 기본값 : N

    • 임시로 서버 그룹명을 "__dummy"로 사용하는 방식을 대신해서 사용한다.

    • SVRGROUP 절에서 DUMMY=Y로 설정할 경우, tmboot될 때 해당 그룹의 TMS가 기동되지 않는다.

      SVRGROUP 절의 DUMMY 설정은 SERVER 절에 승계되지 않으므로, SERVER 절에도 각각 지정해야 한다.

    • DUMMY 옵션이 없을 경우에는 tmboot가 수행될 때 아래와 같은 에러가 발생한다.

      (F) BOOT0014 exec error : /data1/tmaxkjh/tmax/appbin/tms_tbr [BOOT0029]: No such file or directory
  • HMSNAME = string

    • 크기: 15자 이내

    • HMS 프로세스명을 정의한다. HMS를 이용하기 위해서는 SVGTYPE=HMS로 설정해야만 한다.

      HMS 설정과 관련한 자세한 내용은 "Tmax HMS User Guide"를 참고한다.

  • HMSINDEX = numeric

    • 범위 : 0 ~ 65535

    • HMS의 메시지를 처리하는 데 필요한 설정값으로, 도메인 안에서 유일한 값으로 반드시 설정해야 한다.

  • HMSMAXTHR = numeric

    • 범위 : 0 ~ 65535

    • HMS 메시지에 대한 스토리지 처리를 하지 않는 thread의 수를 설정한다.

  • HMSMAXDBTHR = numeric

    • 범위 : 0 ~ 65535

    • HMS 메시지에 대한 스토리지 처리를 하는 thread의 수를 설정한다.

  • HMSMAXBULKTHR = numeric

    • 범위 : 1 ~ 65535

    • HMS 메시지에 대한 스토리지 처리를 일괄적으로 하는 thread의 수를 설정한다.

  • HMSMAXBULKSIZE = numeric

    • 범위 : 2 ~ 65535

    • HMS 메시지에 대한 스토리지 일괄처리를 할 때 한번에 처리할 수 있는 메시지의 최대 개수를 설정한다.

  • HMSOPT = literal

    • 크기 : 255자 이내

    • HMS가 기동될 때 HMS 프로세스로 전달되는 명령어 옵션들을 정의한다.

      옵션설명
      -e 파일명HMS 동작 중에 발생하는 표준 에러(standard error)를 파일에 기록한다.
      -o 파일명HMS 동작 중에 발생하는 표준 출력(standard output)을 파일에 기록한다.
  • HMSSUBSCFG = string

    • 크기 : 255자 이내

    • 영속적 구독자(Durable Subscriber)를 설정한 환경 파일의 경로와 이름을 설정한다. 환경 파일에 정의된 영속적 구독자는 HMS가 기동되면서 자동으로 등록된다.

  • HMSMSGLIVE = numeric

    • 범위 : 0 ~ 65535 (단위: 시간)

    • HMS는 영속적 메시지를 스토리지에 저장한다. 스토리지에 쌓인 메시지들을 주기적으로 삭제할 시간을 설정한다.

  • HMSPORT = numeric

    • 다수의 HMS를 클러스터링하는 경우 각 HMS는 서로 통신하기 위해 직접 채널을 생성한다. 사용할 포트 번호를 설정한다.

  • HMSHEARTBEAT = numeric

    • 범위 : 0 ~ 65535 (단위: 초)

    • 다수의 HMS를 클러스터링하는 경우 HMS 간의 네트워크 장애 감지를 위해 주기적으로 Heartbeat 메시지를 주고 받는다. 이 메시지를 전송하는 주기를 설정한다.

  • HMSGQINT = numeric

    • 범위 : 0 ~ 65535 (단위: 밀리초)

    • HMS의 큐를 클러스터링 하는 데 필요한 상태 정보 갱신주기를 설정한다.

      클러스터링된 큐를 사용하기 위해서는 반드시 설정해야 한다. 주기가 짧을수록 정확한 분배가 가능하지만 그만큼 네트워크의 부하는 크므로 적당한 크기의 값을 설정할 필요가 있다.

재정의 가능 항목

  • APPDIR = literal

    • 크기 : 255자 이내

    • 서버 그룹에 속하는 애플리케이션의 실행 파일이 설치되어 있는 디렉터리의 절대 경로이다.

    • NODE 절에 등록된 APPDIR은 해당 노드에서 실행되는 모든 애플리케이션의 위치를 지정하는 항목이고, 이를 서버 그룹에 재지정하면 그룹별로 애플리케이션 실행 파일의 위치를 지정할 수 있다.

  • ULOGDIR = literal

    • 크기 : 255자 이내

    • NODE 절에서 사용자 메시지가 로깅될 디렉터리의 절대 경로를 서버 그룹별로 재지정하기 위해서 사용하는 항목이다. 사용자 메시지의 기록 방식은 NODE 절에서 설명한 ULOGDIR 내용과 동일하다.

    주의

    지정된 경로는 사용 중인 시스템에 존재해야 한다.

  • TMSLOGLVL = string

    • TMS의 로그 레벨을 설정한다.

  • LOGLVL = string

    • 서버의 로그 레벨을 설정한다.

사용 예제

다음은 SVRGROUP 절의 사용 예제이다.

*SVRGROUP
svg1          NODENAME = tmax,
              APPDIR = "/home/tmax/appbin",
              ULOGDIR = "/home/tmax/appbin/svg1_log"

svgora        NODENAME = tmax, DBNAME = ORACLE,
              OPENINFO = "Oracle_XA+Acc=P/scott/tiger+SesTm = 60, 
              DbgFl = 0x01 + LogDir=/tmp",
              TMSNAME = svg1_tms

svginfx       NODENAME = tmax, DBNAME = INFORMIX,
              OPENINFO = "stores7; USER = {userid}; 
              PASSWD = {password}",
              TMSNAME = info_tms

svgora에서 LogDir 항목은 XA 로그가 저장되는 경로를 지정한다. Informix의 경우 Tmax 시스템을 부팅하는 계정이 Informix에 Login하는 계정과 같은 경우에는 OPENINFO="stores7"과 같이 USER, PASSWD를 생략할 수 있다.

COUSIN으로 설정된 서버 그룹 설정의 검증

COUSIN 서버 그룹으로 지정된 서버 그룹이 아래의 형태로 구성되지 않도록 하기 위해 cfl 단계에서 미리 에러를 출력한다.

  • 타 서버 그룹의 BACKUP으로 재지정 (복합 설정)

    *SVRGROUP
    svg1            NODENAME = "tmaxh4", 
                    COUSIN = "svg2, svg3"
    svg2            NODENAME = "tmaxh4", 
                    BACKUP = "svg3"
    svg3            NODENAME = "tmaxh2"

    다음과 같은 컴파일 에러가 발생한다.

    (E) CFL3008 server group svg3 is defined as both COUSIN and BACKUP [CFL0309]
  • 타 서버 그룹의 COUSIN으로 재지정 (다중 상속)

    *SVRGROUP
    svg1            NODENAME = "tmaxh4", 
                    COUSIN = "svg3"
    svg2            NODENAME = "tmaxh4", 
                    COUSIN = "svg3"
    svg3            NODENAME = "tmaxh2"

    다음과 같은 컴파일 에러가 발생한다.

    (E) CFL3008 server group svg3 is defined as duplicate COUSIN [CFL0310]

멀티 백업의 설정

장애 대책 방안의 하나로 제공되는 백업 기능을 확장하여 멀티 백업 기능을 제공한다.

svg1 NODENAME = @HOSTNAME@, BACKUP = "svg2,svg3,svg4"
svg2 NODENAME = @RMTNAME@
svg3 NODENAME = @RMTNAME2@
svg4 NODENAME = @RMTNAME3@

멀티 백업 기능은 보다 안정적인 장애 대책을 제공하기 위하여 백업 서버에 장애가 발생한 경우 또 다른 백업 서버로 전환할 수 있도록 제공하는 기능이다.

BACKUP 항목에는 하나 이상의 서버 그룹을 지정할 수 있으며 2개 이상의 백업 서버 그룹을 지정할 경우 콤마(,)로 구분하여 나열한다. 이와 같이 설정하면 원본 서버 노드에 장애가 발생한 경우 1번째로 지정된 백업 노드가 동작하고 이 백업 노드마저 이상이 생기면 2번째로 지정한 백업 노드가 동작하는 다중 장애 대책을 지원한다.

백업 노드가 처리하고 있는 도중 메인 노드가 복구되면 다시 메인 노드가 처리할 수 있도록 Fail Back 기능도 지원된다. 2번째 백업 노드 동작 중 1번째 백업 노드가 복구되면 1번째 백업 노드로 동작하며, 메인 노드가 복구되면 메인 노드가 동작한다.

3.2.4. SERVER 절

DOMAIN, NODE, SVRGROUP 절은 Tmax 시스템과 관련된 환경설정이다. SERVER 절에는 실질적으로 제공하는 서비스를 등록한다. 작성된 애플리케이션에서 제공하는 서비스 종류를 등록하여, 제공되는 서비스와 서비스를 제공하는 응용 서버 프로세스에 대한 정보를 알린다.

Tmax는 등록된 서비스만 처리하기 때문에 새로운 서버 프로그램이나 서비스가 추가되는 경우에는 Tmax 환경 파일의 SERVER 절이나 SERVICE 절에 추가 내용을 반드시 등록하고 적용시켜야 한다.

SERVER 절에는 Tmax가 관리하는 모든 응용 서버 프로세스가 등록된다. 기본적으로 Tmax 시스템이 기동될 때, 등록된 서버 프로세스도 함께 기동되어 동작하게 되며 Tmax가 종료될 때, 서버 프로세스들도 함께 종료된다.

SERVER 절에는 다음과 같은 내용이 정의된다.

  • 각 서버 프로세스가 속하는 서버 그룹

  • 서버 프로세스가 기동될 때 필요한 명령어 라인 옵션

  • 서버 프로세스의 최소 개수와 최대 개수

  • 동적 서버 프로세스 기동을 위한 큐의 개수

  • 대화형 모드 여부

  • Multi Thread / multi context 서버 프로세스의 최소 thread와 최대 thread 개수 및 thread의 Stack 크기

SERVER 절의 일부 항목은 SVRGROUP 절에서 정의했어도 노드에 따라 새롭게 정의할 수 있다. 재정의 가능한 항목은 절 3.2.4. “재정의 가능 항목” 설명을 참고한다.

SERVER 절의 기본 형식은 다음과 같다.

*SERVER
[DEFAULT : ]
Server Name         SVGNAME = server-group-name
                    [CLOPT = literal,]
                    [MIN = numeric,]
                    [MAX = numeric,]
                    [CONV = Y | (N) | B ,] 
                    [ASQCOUNT = numeric,]
                    [MAXQCOUNT = max-queue-count,]
                    [SVRTYPE = (STD) | UCS | CUSTOM_GATEWAY | STD_DYN | 
                             UCS_DYN | REALSVR | REALSVR_MT | EXTSVR,]
                    [CPC = channel-number,]
                    [MINTHR = numeric,]
                    [MAXTHR = numeric,]
                    [STACKSIZE = numeric,]
                    [ULOGDIR = user-log-path,]
                    [RESTART = (Y) | N,]
                    [MAXRSTART = numeric,]
                    [GPERIOD = numeric,]
                    [TARGET = string,]
                    [AUTOTRAN = Y | (N) | B ,]
                    [SCHEDULE = (FA)/RR,]
                    [LIFESPAN = (IDLE_DOWN) | IDLE_0 | IDLE_sec,]
                    [LOGLVL = server-log-level,]
                    [DUMMY = Y | (N)]
                    [MAX_USE_COUNT = Y | (N)]
                    [CTX_EREPLY = (Y) | N]
                    [MULTICLH = (Y) | N]
                    [AUS = Y | (N)] 
                    [TMAPM = (Y) | N]
                    [MAC = Y | (N)]
                    [ROC = Y | (N)]

필수 항목

  • Server Name = string

    • 크기 : 15자 이내

    • 서버의 실행 파일명으로 일반적으로 서버명은 고유(Unique)해야 하고 하나의 서버명은 SERVER 절에 한 번만 정의되어야 한다.

      단, 멀티 도메인으로 구성할 경우에는 한 도메인 내에서 고유해야 한다.

  • SVGNAME = string

    • 크기 : 15자 이내

    • 서버가 속해 있는 서버 그룹을 정의한다.

    • 설정된 값은 SVRGROUP 절에서 정의된 서버 그룹명이어야 한다. 서버와 SVRGROUP 절의 연결을 통해서 서버가 어떤 노드에서 동작할 것인지, 어떤 리소스 매니저(데이터베이스)를 사용하는지 알 수 있으며, 해당 리소스 매니저를 열 때 필요한 파라미터를 넘겨줄 수 있다.

    • XA 모드에서는 Tmax가 모든 데이터베이스 트랜잭션을 관리하고 2PC(Two Phase Commit)를 보장한다. SVRGROUP 절은 OPENINFO 필드를 포함해서 정의되어야 한다.

      XA 모드의 Tmax 사용자는 각각 서버 프로세스의 데이터베이스 연결에 관여할 필요가 없다. 그러나 XA 모드가 아닌 경우에는 OPENINFO를 포함하지 않은 SVRGROUP 절이 정의되어야 하고 사용자는 데이터베이스 연결을 관리해야 한다.

선택 항목

  • CLOPT = literal

    • 크기 : 255자 이내

    • 서버 프로세스가 기동될 때 서버 프로세스로 전달되는 명령어 옵션을 정의한다. 정의된 옵션들 중에 '--' 이전에 지정된 옵션들은 시스템에서 사용하고, 그 이후에 지정된 옵션들은 사용자가 자유롭게 사용할 수 있다.

    • 다음은 사용자 옵션에 대한 설명이다.

      옵션설명
      -e 파일명"서버 프로세스명_파일명"의 파일이 생성되어 서버 프로세스 동작 중에 발생하는 표준 에러를 파일에 기록한다. 표준 에러는 fprintf(stderr, format, args) 함수를 사용한다.
      -o 파일명"서버 프로세스명_파일명"의 파일이 생성되어 서버 프로세스 동작 중에 발생하는 표준 출력을 파일에 기록한다. 표준 출력은 일반적인 printf() 함수나 표준 에러 출력과 마찬가지로 fprintf(stdout, format, args) 함수를 사용한다.
      -u uid

      user 파일에 등록되어 있는 uid를 지정한다.

      3단계 보안 설정(서비스 접근 제어)이 되어 있는 환경에서 UCS의 usermain이나 게이트웨이같이 Tmax 클라이언트에서 시작되지 않은 곳에서 ACL 서비스로 요청이 온 경우, Tmax 환경 파일의 SERVER 절의 CLOPT 옵션에 user_id를 설정하여 ACL 서비스에 접근이 가능하다. 예를 들어 svr_ucs의 usermain 내에서 ACL 서비스(SVC_ACL)를 호출할 경우, Tmax 환경 파일의 SERVER 절에 svr_ucs의 CLOPT 항목에 CLOPT="-u user_id"를 설정할 수 있다.

      -r

      서비스 타임아웃으로 인하여, 서버가 재기동되었을 경우, 해당 서버의 RESTART 횟수를 증가시키지 않게 하는 옵션이다.

      RESTART=Y인 경우에만 의미가 있으며, UNIX 플랫폼인 경우, tpsvctimeout()에서 tpreturn()의 파라미터가 TPEXIT일 경우에 적용된다.

      -l -L value

      -L 옵션과 함께 value에 설정 가능한 값에 대한 설명은 표 이후의 설명을 참고한다.

      -l 옵션과 상관없이 -L value 설정이 가능하나, -l 옵션이 없을 경우에는 svclog를 남기지 않는다.

      - l서버의 서비스 수행 결과를 l 로그로 남긴다. 로그는 "$ULOGDIR svclog.mmddyyyy"라는 이름의 파일에 5분 간격으로 저장된다. Tmax는 로그내용을 분석하기 위한 svcrpt를 이용한다.
      - BTmax 4.0 sp3 fix2에서부터는 멀티 CLH 환경에서 하나의 서버 프로세스에 요청이 동시에 스케줄되는 경우, CLH Queue Timeout 적용이 안되어 처리가 지연되는 문제를 개선하였다. 하지만 Batch 업무의 경우 예외가 필요하며, SERVER 절의 CLOPT 항목에 [–B] 옵션을 적용한 경우 해당 서버 프로세스에 스케줄링된 경우는 예외적으로 큐 타임아웃을 무시하고 수행된다.
      - X

      Oracle에서 이미 Rollback된 트랜잭션에 대해서 쿼리가 수행될 경우, 처음에는 ORA-24761 에러를 발생시키지만 사용자가 에러를 무시하고 계속해서 다음 쿼리를 수행할 경우, 로컬 트랜잭션으로 처리되면서 정합성에 문제가 발생할 수 있다. 이 경우는 사용자 코드의 문제이지만, 이것을 막기 위해서 [–X] 옵션을 사용하면 xa_end() 의 결과가 XA_OK 가 아닌 경우, 서버 프로세스를 재시작해서 정합성 문제를 해소할 수 있다.

      XA 서버의 경우, tpreturn() 내에서 xa_end()가 실패 처리되면 기본적으로 XA 채널을 RESET한다. 해당 옵션을 사용할 경우 xa_end()가 실패 처리되면 Fatal 에러 메시지(서비스 코드 : CSC5608)를 출력한 후 서버 프로세스를 종료시킨다.

      - c서버가 수행되고 있는 동안 날짜가 변경되었을 때, 서버 동작의 userlog로 인한 표준 출력 파일이 삭제 명령을 수행하여도 지워지지 않는 동작을 수정하기 위한 옵션이다. 날짜가 변경되면 로깅 파일이 닫히지 않던 점을 [-c] 옵션을 통해 날짜 변경을 체크하여 정상적으로 삭제되도록 한다.
      - qRDPMT 서버(SVRTYPE=REALSVR_MT) 인 경우 사용하는 옵션이다. tpflush()를 수행할 경우, WRITE 큐에 전송되지 않은 데이터가 있더라도 TPSENDTOCLI 큐에서 WRITE 큐로 데이터를 무조건 이동할 수 있도록 하는 옵션이다. 해당 옵션은 RDPMT에서만 적용되며, 메모리가 증가하면 제한이 없어지므로 권장 사항은 아니다.
      - m

      유저 서버 프로그램의 메모리가 -m 옵션에 설정된 크기보다 더 많이 사용되면 서버 프로그램을 종료하고 재시작한다. (단위: Byte)

      만약 이 옵션을 통해 서버가 재시작되었으면 TMM은 "sever closed due to MAX_USE_COUNT or MEM_USAGE(CLOPT:-m)"을 출력한다.

      -x

      TARGET 옵션과 함께 사용하며 "-x 기존 서비스명:치환 할 서비스명" 와 같이 설정하여 치환된 서비스명으로 서비스 요청을 할 수 있다. 여러 개의 서비스를 치환할 경우 구분자 콤마(,)를 사용한다. 선언되지 않은 서비스명을 설정하거나 서비스명을 중복되게 설정할 경우 서버 기동시 에러가 발생하므로 설정에 주의한다.

      • 다음은 -x 옵션을 설정한 예이다.

        *SERVER
        svr2  SVGNAME = svg1, MIN = 1
        svr2_1  SVGNAME = svg1, MIN = 1, TARGET = "svr2", 
               CLOPT="-x TOUPPER:TOUPPER1,TOLOWER:TOLOWER1"
        
        *SERVICE
        TOUPPER  SVRNAME = svr2
        TOLOWER  SVRNAME = svr2
        TOUPPER1 SVRNAME = svr2_1
        TOLOWER1 SVRNAME = svr2_1
      • 다음은 -e, -o 옵션을 설정한 예이다.

         CLOPT = "-e err1 –o out1 -- abc"
        옵션설명
        -e err1서버 프로세스(tpcals)가 동작하면서 발생한 표준 에러들을 ULOGDIR 디렉터리의 tpcals_err1 파일에 저장한다.
        -o out1서버 프로세스(tpcals)가 동작하면서 발생한 표준 출력들을 ULOGDIR 디렉터리의 tpcals_out1 파일에 저장한다.
      • 다음은 CLOPT 항목에 -L 옵션과 함께 value에 설정 가능한 값에 대한 설명과 설정 예이다.

        *SERVER
        svr1     CLOPT = "-l –L SL_DFLT", ULOGDIR = "/EMC01/tmax/log/ulog"
        svr2     CLOPT = "-l –L SL_NODE", ULOGDIR = "/EMC01/tmax/log/nlog"
        svr3     CLOPT = "-l –L SL_SVG", ULOGDIR = "/EMC01/tmax/log/glog"
        svr4     CLOPT = "-l –L SL_SVR", ULOGDIR = "/EMC01/tmax/log/slog"
        설정값설명
        SL_DFLT기존과 동일하다.
        SL_NODENODE 절의 ULOGDIR 항목에 svclog가 생성된다.
        SL_SVGSVRGROUP 절의 ULOGDIR 항목에 svclog가 생성된다. ULOGDIR 설정이 없으면 NODE 절의 ULOGDIR 항목에 생성된다.
        SL_SVRSERVER 절의 ULOGDIR 항목에 svclog가 생성된다. ULOGDIR 설정이 없으면 NODE 절의 ULOGDIR 항목에 생성된다.

      • -r 옵션을 설정하였을 경우, SLOG에 다음과 같은 로그가 기록되고 서버 RESTART 횟수에는 영향을 미치지 않는다.

        (W) SVR3032 service timeout error : SVC25 [SVR0403] 
        (I) SVR3022 SVR (svr25) is down due to tpreturn(TPEXIT) at svc timeout handler. [SVR0305] 
        (I) TMM0211 General Infomation : server closed due to TIMEOUT : SVR, pid = 15040 [TMM0161] 
        (I) TMM3004 SVR (svr25) is restarted the 5th time [TMM0149]

    • MACRO Commands1

      아래의 MACRO를 지정했을 경우 파일명은 서버가 기동될 때 결정된다.

      MACRO설명
      $(SVR)서버명이다.
      $(SVRI)서버 인덱스이다.
      $(SPRI)서버 프로세스의 인덱스이다.
      $(SPRMIN)SERVER 절의 MIN 항목이다.
      $(SPRMAX)SERVER 절의 MAX 항목이다.
      $(SPRN)서버 프로세스의 순차 번호이다. ( 0 - $(SPRMAX))
      $(DATE)MMDDYYYY 포맷의 날짜이다.
      $(TIME)HHMMSS 포맷의 시간이다.
      $(PID)프로세스 ID이다.
    • MACRO Commands2

      아래의 MACRO를 지정했을 때 TCS 서버의 경우 tpsvrinit(), tpsvrdone() 그리고 서비스 함수가 불리기 직전에, UCS 서버의 경우에는 tpsvrinit(), tpsvrdone() 함수가 불리기 직전, tpschedule() 함수가 반환하기 직전에 시간을 검사하여 해당 파일명을 결정한다.

      MACRO설명
      $(CDATE)MMDDYYYY 포맷의 날짜이다.
      $(CTIME)HHMMSS 포맷의 시간이다.
      $(CYEAR)YYYY 포맷의 연도이다.
      $(CMONTH)MM 포맷의 월이다. (01 ~ 12)
      $(CMONTHS)"Jan, Feb, ... Dec" 포맷의 월이다.
      $(CDAY)DD 포맷의 일이다. (01 ~ 31)
      $(CWDAY)D 포맷의 일이다. (1 ~ 7)
      $(CWDAYS)"Mon, Tue, ... Sun" 포맷의 일이다.
      $(CYDAY)DDD 포맷의 일이다. (001 ~ 366)
      $(CHOUR)HH 포맷의 현재 시간이다. (00 ~ 23)
      $(CMINUTE)MM 포맷의 현재 분이다. (00 ~ 59)
      $(CSECOND)SS 포맷의 초이다. (00 ~ 59)
    • MACRO는 다양한 종류의 로그 파일(예: 날짜별)을 작성하는 데 사용한다.

      다음은 MACRO 설정에 대한 예이다.

      CLOPT="-o $(SVR).$(DATE).out –e $(SVR).$(DATE).err"

      '[server name].03312001.out, [server name].03312001.err'의 ULOGDIR 필드에 정의된 디렉터리에 로그 파일을 작성한다. 표준 에러나 표준 출력의 파일명을 다른 이름으로 변경하고자 할 경우에는 '-e /usr/tmax/log/ulog/test.log' 형태로 절대 경로를 지정하면 된다. '--' 이후의 'abc' 옵션은 사용자가 사용할 수 있도록 서버 프로그램의 tpsvrinit() 함수에 argv[1]로 전달된다.

  • MIN = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 1

    • 기본적으로 기동될 서버 프로세스의 개수를 결정한다.

    • 클라이언트당 서버 프로세스가 하나씩 기동되는 일반적인 클라이언트/서버 모델과 달리, Tmax 시스템에서는 서버 프로세스의 수를 조절하여 일정하게 유지한다. CLH 프로세스는 클라이언트의 요청이 들어올 때마다 서버들의 상태를 확인하고, idle 상태인 서버 프로세스에게 일을 처리하도록 하여 시스템이 최대 성능을 발휘하도록 한다.

    • MIN 항목에는 서버 프로세스의 개수를 지정하며, 운영 경험을 통하여 적절한 개수 조정이 필요하다. 아주 많은 서비스 요청이 들어오는 서비스에 서버 프로세스를 너무 적게 동작시킨다면 동작 중인 서버 프로세스만으로는 즉각적인 서비스 처리가 어려워 대기시간이 증가하는 등 시스템 성능이 떨어진다.

      반대로 필요 이상으로 서버 프로세스를 과다하게 기동시키면 단지 몇 개의 프로세스만이 서비스를 처리하고 나머지 프로세스는 idle 상태로 남게 되어 시스템 자원의 낭비와 더불어 성능 저하를 초래할 수 있다. 따라서 시스템 성능의 효율적 활용을 위하여 MIN 항목의 값은 신중하게 설정해야 한다.

  • MAX = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 1

    • MIN 항목과 더불어 서버 프로세스 개수를 결정하는 항목이다.

      MIN 항목이 기본적으로 기동되는 서버 프로세스 개수를 나타내며, MAX 항목은 MIN 값을 포함해 추가적으로 기동시킬 수 있는 프로세스의 최대 개수를 나타낸다. MAX 항목은 이미 동작 중인 개수를 포함하여 더 기동시킬 수 있는 서버 프로세스의 최대 개수를 의미한다.

      서버 프로세스는 기본적으로 MIN 개수만큼 기동되고, 갑자기 클라이언트의 요청이 집중되는 등으로 인해 부하가 발생할 경우, MAX 개수까지 서버 프로세스가 기동된다. MAX 항목도 MIN 항목과 같이 시스템의 성능에 영향을 주는 요인이므로 신중히 결정해야 한다. 포크 타입 서버 프로세스가 사용되었다면 MAX 값을 0으로 설정해야 한다.

  • CONV = Y | N | B

    • 기본값 : N

    • 대화형 서버 여부를 나타낸다.

    • Tmax에서 제공하는 통신 유형은 동기형, 비동기형, 대화형의 3가지가 존재한다. 대화형 통신을 제공하는 서비스는 해당 서버에 반드시 대화형 서버로 등록하여야 한다. 대화형 서버가 아닌 경우, 동기형이나 비동기형의 통신만을 제공하며 CONV 항목을 'Y'로 정의하여 대화형 서버로 설정된다.

    • CONV=B 로 설정한 경우에 해당 서버 프로세스는 스케줄링 프로세스가 된다. B=BOTH 의 줄임말로써, 대화형(Y)과 비대화형(N) 을 모두 지원한다는 의미이다. 또한 도메인 게이트웨이를 통한 도메인간의 통신에서도 사용될 수 있다.

  • ASQCOUNT = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 0

    • 자동으로 서버 프로세스가 추가 기동되기 위한 조건으로 큐에 쌓인 개수를 정의한다.

      서비스 요청 건수가 큐에 ASQCOUNT 개수 이상 쌓이게 되면 MAX 개수 한도 내에서 서버 프로세스가 자동으로 기동된다. 지정되지 않은 경우, 큐에 쌓이는 것에 상관없이 서버 프로세스는 기동되지 않는다.

    • ASQCOUNT로 증가된 서버 프로세스는 서비스 처리량을 검사하여 일정 시간 간격으로 사용하지 않는 프로세스를 내려 리소스 사용량을 줄인다. 이 항목은 서버 프로세스의 유형이 POD일 경우에는 별 의미가 없기 때문에 사용하지 않는다.

  • MAXQCOUNT = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : -1

    • 값을 설정하지 않으면 기본값으로 설정되고 maxqcount를 사용하지 않는다.

    • 업무 폭주로 인하여 클라이언트의 요청이 큐에 쌓여서 정상적인 서비스가 진행되지 않을 경우 계속되는 업무 요청을 무시할 때 설정하는 값이다.

    • 큐에 설정값 이상의 업무가 요청되면 해당 업무는 큐에 쌓이지 않고 클라이언트에 즉시 에러(tperrno = 26)로 응답한다. 이 기능은 은행이나 관공서같이 특정 시간에 대량의 업무가 요청되는 곳에서 부하를 해소하기 위하여 적절하게 사용될 수 있다.

  • SVRTYPE = STD | UCS | CUSTOM_GATEWAY | STD_DYN | UCS_DYN | REALSVR | REALSVR_MT | EXTSVR | STD_MT

    • 기본값 : STD

    • 서비스 프로세스의 타입을 지정하는 항목으로 다음은 각 설정값에 대한 설명이다.

      설정값내용
      UCS

      일반적인 모든 서비스 프로세스는 서비스 요청이 있는 경우 관련 서비스 프로세스가 처리되어 결과를 전송하는 타입이나, UCS 타입의 서버 프로세스는 기본적으로 프로세스 내부에 Main() 부분이 존재하여 서비스 요청이 없어도 일방적으로 각 클라이언트에 맞는 데이터를 보낼 때 유용하게 사용할 수 있는 방식이다. 주식 시세 전망도 UCS 타입의 서버 프로세스의 한 예이다.

      REALSVR소량의 데이터를 다수의 클라이언트에게 자주 보낼 필요가 있을 때(초당 10회 이상) 프로세스 점유율이나 처리 속도의 측면에서 UCS에 비해 월등한 성능을 보이도록 한다. 한 노드에는 하나의 RDP 타입 서버만을 사용할 수 있다.
      REALSVR_MT멀티스레딩을 지원하는 REALSVR이다.
      CUSTOM_GATEWAYHostlink나 TN3270 게이트웨이와 같이 외부연동용 게이트웨이를 위한 특별한 형식의 서버이다.
      EXTSVRTmax 환경 파일에 등록된 서버의 기능을 Tmax 이외의 프로세스에서 처리하기 위한 기능이다. 자세한 환경 파일은 "3.2.2 NODE 절"의 EXTPORT, EXTCLHPORT를 참고한다.
      STD_DYN, UCS_DYN

      CFL 당시에 설정한 MAX 값을 늘리는 것이 가능한 서버이다. SERVER 절에 설정한 MAX 값을 동적으로 늘릴 수 있게 하기 위하여 해당 서버 타입을 설정한다. STD_DYN은 TCS에 설정하여 UCS_DYN은 UCS에 설정한다. 해당 타입으로 설정한 서버만이 tmadmin의 set 명령어를 통해서 동적으로 MAX 값을 변경할 수 있다.

      SERVER 절에 SVRTYPE에 STD_DYN 또는 UCS_DYN로 설정한다.

      spri의 변화는 MAX 값 조정 후 tmadmin에서 si 명령어를 통해 볼 때 spri가 연속하지 않는다. 이미 한 번 다른 서버에서 사용했던 spri가 MAX 값의 조정으로 인해 다른 서버에서 사용할 수 있다.

      [주의]

      FD_SET = 16384 버전에서는 지원하지 않는다 . MAX 값을 감소킬 경우 MIN 값보다 작게 줄일 수 없다. MAX 값을 감소시킬 경우 감소할 값에 해당하는 spr index 이후의 spr은 다운 상태이어야 한다.

      예) 초기에 설정된 spri가 8193, 8194, 8195, 8192 순일 때, MAX를 2로 줄이기 위해서 8195, 8192는 다운 상태이어야 한다.

      STD_MT

      STD_MT는 STD 타입의 서버에서 Multi Thread / multi context 기능이 추가된 서버 프로세스 타입이다.

      서버는 내부적으로 thread pool을 구성하고 각각의 thread에서 서비스를 수행한다. 따라서 하나의 서버 프로세스에서 동시에 여러 개의 서비스 요청을 처리할 수 있다. 또한 서버 프로세스는 라이브러리가 제공하는 thread pool 이외에 애플리케이션 레벨에서 사용자가 추가로 thread를 생성할 수 있으며, 생성된 thread에서 서비스 thread의 Context를 공유할 수 있다.

      STD_MT 타입으로 설정할 경우 반드시 MINTHR, MAXTHR, STACKSIZE, CPC를 함께 설정해야 한다.

  • CPC = numeric

    • 범위 : 1 ~ 128

    • 기본값 : 1

    • UCS 서버 프로세스와 CLH 프로세스 사이의 병렬 통신 채널 수를 결정하는 항목이다. 서버 프로세스의 처리량이 아주 많아 하나의 채널로는 처리 속도가 저하될 때, 다중 채널을 두어 병렬 통신으로 처리하여 처리속도를 증가시킬 수 있다.

    • CPC는 UCS, UCS_DYN, CUSTOM_GATEWAY, REALSVR, REALSVR_MT, STD_MT의 SVRTYPE에서만 유효하다.

    • 서버 타입이 STD_MT일 경우에는 CPC의 값이 반드시 설정되어야 한다.

      CPC 설정값은 MAXCLH 항목 및 MAXTHR 항목과 관련이 있다. CPC 값을 결정할 때 MAXCLH x CPC 값은 최소한 MAXTHR과 같거나 그 이상이어야 한다는 점에 주의한다.

      예를 들어 MAXCLH가 1이고 MAXTHR이 8이면 CPC는 최소 8이상이어야 하며, MAXCLH가 2이고 MAXTHR이 8이면 CPC는 최소 4이상이어야 한다. 이는 하나의 서버 프로세스가 서비스 요청을 동시에 처리할 수 있는 최대 개수가 CPC x MAXCLH 값으로 결정되며, MAXTHR 항목의 값을 이 값 이상으로 설정하는 것은 불필요하기 때문이다.

      만약 CPC를 지정하지 않는다면 MAXTHR / MAXCLH의 값이 적용된다.

  • MINTHR = numeric

    • 범위 : 0 ~ MAXTHR

    • 기본값 : 0

    • STD_MT 타입의 서버 프로세스에서 초기 기동할 경우 생성될 서비스 thread의 최소 개수를 결정하는 항목이다. STD_MT 타입 서버라면 반드시 설정해야 한다.

    • 설정값이 0이면 CLH로부터 서비스 요청을 받았을 때 Thread가 생성된 뒤에 서비스를 처리한다.

  • MAXTHR = numeric

    • 범위 : 1 ~ 1000

    • 기본값 : 1

    • STD_MT 타입의 서버 프로세스에서 Thread pool에서 관리하는 서비스 Thread의 최대 개수를 결정하는 항목이다. STD_MT 타입 서버라면 반드시 설정해야 한다.

    • 매번 서비스 요청마다 Thread를 제한없이 계속 추가하여 생성하면 오히려 성능이 저하될 수 있으므로 최대 개수까지만 Thread를 생성할 수 있도록 제한해야 한다. 시스템의 성능에 영향을 주기 때문에 적절한 값으로 설정해야 한다.

    • Thread는 서비스 Thread의 최대 개수에 메인 Thread가 추가되므로 총 MAXTHR + 1개의 Thread가 동작한다. Main Thread는 서비스 요청을 직접 수행하지 않고 서비스 Thread들과 서비스 요청을 관리한다. 만약 설정값이 1이면 서비스 Thread가 1개만 생성되므로 일반 서버 라이브러리를 사용할 것을 권장한다.

      MAXTHR 항목은 CPC 항목 및 MAXCLH 항목과 관련이 있다. 자세한 정보는 CPC 항목을 참고한다.

  • STACKSIZE = numeric

    • 범위 : 0 ~ MAX_INT

    • 기본값 : 0 (단위: Kbyte)

    • STD_MT 타입의 서버 프로세스에서 서비스 Thread들의 stack 크기를 설정하는 항목이다. 설정하지 않으면 OS에서 기본적으로 적용되는 크기로 설정된다.

  • RESTART = Y | N

    • 기본값 : Y

    • 서버 프로세스의 재기동 여부를 결정하는 항목으로 비정상적으로 종료될 때 재기동한다.

  • TARGET = literal

    • 서버명은 서버 실행 파일명인데 비해 TARGET 항목은 서버 프로세스명을 재정의하는 항목이다. 여기에서 말하는 서버 프로세스란 APPDIR에 존재하는 서버 실행 파일을 실행시킨 프로세스를 의미한다.

    • 다음과 같이 TARGET 항목을 설정한 경우 tmadmin은 실제 서버명을 확인하며 ps를 통해 서버 프로세스명을 확인할 수 있다.

      예) SVGNAME = svrgrp, MIN =1, MAX = 1, TARGET = "svr2"

      /user1/starbj/tmax/sample/server> tmadmin   
      --- Welcome to Tmax Admin (Type "quit" to leave) ---   
      $$1 tmaxs1 (tmadm): st -p  
      CLH 0:   
      ---------------------------------------------------
      svr_name  svgname  spr_no  status  count  avg  svc
      ---------------------------------------------------
      SVR      svrgrp     32     RDY      0   0 .00  -1  
       
      /user2/starbj/tmax/sample/server> ps  
      starbj 28702 1 0 11:13:03 pts/8 0:00 cll -b 28700  
      starbj 28704 1 0 11:13:03 pts/8 0:00 svr2
       -b 28700 -S SVR -s SVR -d -1  
      starbj 28701 1 0 11:13:03 pts/8 0:00 tmm -b 28700  
      starbj 28703 1 0 11:13:03 pts/8 0:00 clh -b 28700 
    • 다음은 TARGET의 사용 환경 파일 예제이다.

      *SERVER
      original        SVGNAME = svg0, 
      copied1         SVGNAME = svg0, 
                      TARGET  = "original", 
                      CLOPT   = "-e $(SVR).err -o $(SVR).out -x ORIGINAL:COPIED1" 
      copied2         SVGNAME = svg0, 
                      TARGET  = "original", 
                      CLOPT   = "-e $(SVR).err -o $(SVR).out -x ORIGINAL:COPIED2" 
      *SERVICE 
      ORIGINAL        SVRNAME = original 
      COPIED1         SVRNAME = copied1 
      COPIED2         SVRNAME = copied2 

      copied1, copied2 서버는 original의 이름으로 서버 프로세스가 기동된다. 일반적으로 tmax에서 서버명과 서버 프로세스명은 동일하지만 TARGET을 사용하는 경우, 서버명과 서버 프로세스명이 동일하지 않다. 즉, Tmax가 기동될 때 original이라는 process가 3개 기동된다.

      또한 서비스 요청이 COPIED1, COPIED2로 들어오면, CLOPT 절의 [-x]에 의해서 original로 대체된다. 클라이언트에서 COPIED1, COPIED2 각각에 대하여 서비스 요청을 할 수 있다. tmadmin에서 count를 확인하는 경우도 서버, 서비스가 증가한다.

      TARGET 항목 설정은 같은 프로그램을 사용하는데 tpcall을 하는 주체에 따라서 COUNT 등을 다르게 확인하고 싶을 경우에 유용하게 쓰일 수 있다.

    주의

    원본 서버를 수정하는 경우, tmdown -S을 명령을 사용하는 경우 원본 서버만 다운이 되므로 COPY된 서버들과의 버전이 맞지 않을 수 있다. 따라서 tmdown할 때 target을 사용한 서버를 모두 다운시키는 것을 권장한다.

  • AUTOTRAN = Y | N | B

    • 기본값 : N

    • mksvr 명령을 이용하여 서비스를 동적으로 추가하였을 경우 동적으로 추가된 서비스의 AUTOTRAN은 기본값인 'N'으로 설정된다.

    • SERVER 절의 AUTOTRAN 항목은 동적으로 추가된 서비스의 트랜잭션을 자동으로 기동할 수 있도록 하는 항목으로 서버의 AUTOTRAN 여부에 따라 동적으로 추가되는 서비스의 설정값에 영향을 주게 된다. AUTOTRAN 항목은 SERVICE 절의 AUTOTRAN 항목 설명에 자세하게 설명되어 있다.

    • SERVER 절과 SERVICE 절 모두에 AUTOTRAN이 설정되어 있다면 SERVICE 절의 AUTOTRAN에 설정한 값이 적용된다.

    • B는 구버전(~3.8.8) AUTOTRAN 호환 설정으로 Y와 동일하지만 해당 트랜잭션은 글로벌이 아닌 로컬 트랜잭션으로 동작한다.

      • 구버전 동작 방식 : 3.8.9 이전 버전

        XA 서버가 tx_begin없이 호출될 경우 자동으로 트랜잭션이 시작되었으며 (기본값 AUTOTRAN=Y), 이때 트랜잭션은 일종의 로컬 트랜잭션 형태로 수행되었다.

        외부 호출의 경우 트랜잭션이 함께 묶이지 않게 되며 결과적으로 현재의 TPNOTRAN으로 호출하는 것과 동일하게 동작한다.

      • 현 버전 동작 방식 : 3.8.9 버전 (이후 버전 포함)

        AUTOTRAN=Y일 경우 전역 트랜잭션이 자동 시작되어 외부로부터의 호출이 있을 경우 자동으로 트랜잭션으로 묶이게 된다. 또한 기본값이 'N'으로 변경되었기 때문에 업그레이드할 때 해당 값을 명시적으로 설정해 주어야만 한다.

  • SCHEDULE = FA | RR

    • 기본값 : FA

    • SCHEDULE 항목은 MIN 값이 2이상으로 지정된 경우 서버 프로세스 사이의 처리 순서를 지정하기 위한 항목이다.

    • 다음은 SCHEDULE 항목의 설정값이다.

      설정값설명
      FA(First Available)번호가 우선하는 프로세스에 우선적으로 일을 할당한다.
      RR(Round-Robin)모든 프로세스들이 동일하게 일을 처리하도록 한다.
  • LIFESPAN = IDLE_DOWN | IDLE_0 | IDLE_sec

    • 기본값 : IDLE_DOWN

    • MIN개 이상 추가로 구동된 서버 프로세스의 종료 시점을 결정하는 항목으로 다음과 같은 경우 적용된다.

      • POD에 의해 구동된 서버 프로세스

      • ASQCOUNT에 의해 추가 구동된 서버 프로세스

      • tmboot -s 명령에 의해 수동으로 추가 구동된 서버 프로세스

    • POD에 의해 구동된 서버 프로세스 (MIN=0 인 경우)

      • MIN = 0, MAX = 1 이상, LIFESPAN = IDLE_DOWN일 경우

        처음 Tmax를 기동할 때 MIN = 0이므로 서버 프로세스의 개수는 0이 된다. 클라이언트의 요청이 있을 경우 서버 프로세스의 개수가 1이 되며, 사용자가 서버 프로세스를 종료시킬 때까지 종료되지 않는다.

      • MIN = 0, MAX = 1이상, LIFESPAN = IDLE_0일 경우

        클라이언트의 요청이 있을 경우 서버 프로세스의 개수가 1이 되며, 서비스 수행 후 다음 요청이 없으면 바로 종료된다.

      • MIN = 0, MAX = 1이상, LIFESPAN = IDLE_sec일 경우

        클라이언트의 요청이 있을 경우 서버 프로세스의 개수가 1이 되며, 서비스 수행 후 sec에 설정된 시간동안 요청이 없으면 종료된다.

    • ASQCOUNT에 의해 추가 구동된 서버 프로세스

      • MIN = 1, MAX = 2이상, ASQCOUNT = 2, LIFESPAN = IDLE_DOWN일 경우

        처음 Tmax가 기동될 때 MIN = 1이므로 서버 프로세스의 개수는 1이 된다. 클라이언트의 요청이 2개 이상 큐에 쌓여 있을 경우, 서버 프로세스의 개수가 2이상이 되며, 사용자가 서버 프로세스를 종료시킬 때까지 서버 프로세스의 개수는 2이상이 된다.

      • MIN = 1, MAX = 2이상, ASQCOUNT = 2, LIFESPAN = IDLE_0일 경우

        클라이언트의 요청이 2개 이상 큐에 쌓여 있을 경우, 서버 프로세스의 개수가 2이상이 되며, 서비스 수행 후 다음 요청이 없으면 바로 종료되어 다시 서버 프로세스의 개수가 1이 된다.

      • MIN = 1, MAX = 2이상, ASQCOUNT = 2, LIFESPAN = IDLE_sec일 경우

        클라이언트의 요청이 2개 이상 큐에 쌓여 있을 경우 서버 프로세스의 개수가 1이 되며, 서비스 수행 후 sec에 설정된 시간동안 요청이 없으면 종료되어 다시 서버 프로세스의 개수가 1이 된다.

  • DUMMY = Y | N

    • 기본값 : N

    • 임시로 서버명을 "__dummy"로 사용하는 방식을 대신해서 사용한다.

    • SERVER 절에서 DUMMY=Y로 설정할 경우, tmboot가 수행될 때 해당 서버 프로세스가 기동되지 않는다.

    • DUMMY 옵션이 없을 경우에는 tmboot를 수행하면 다음과 같은 에러가 발생한다.

      (F) BOOT0014 exec error : /data1/tmaxkjh/tmax/appbin/tbrtest [BOOT0029]: No such file or directory
  • AUS = Y | N

    • 기본값 : N

    • Allowing Unregisterd Services

    • 환경설정에서 서비스를 삭제하고 AP에 서비스를 삭제(rebuild)하지 않은 상태로 부트를 진행하면 MAXRSTART 만큼 서버 재시작을 시도하게 되는데

      SERVER 절에서 AUS=Y로 설정할 경우, 이를 무시하고 부팅한다.

  • CTX_EREPLY = Y | N

    • 기본값 : Y

    • UCS 서버 타입에서만 설정할 수 있다. 다른 서버 타입에서는 이 옵션을 사용할 수 없다.

    • UCS 타입의 서버에서 tpsavectx() 호출해서 클라이언트의 정보를 저장한 다음에 tprelay()를 호출하기 전에 tmdown -s, tmdown -s -i, 비정상 종료 등으로 인해 서버 프로세스가 종료되면 서비스 호출자는 해당 서비스 요청에 대한 응답을 받지 못한다. 'Y'로 설정하면 서버 프로세스가 종료될 때 아직 tprelay()로 처리되지 못한 요청건들에 대해서 호출자에게 에러 응답을 리턴한다.

    • CTX_EREPLY 옵션을 기본값으로 설정하면 서버 프로세스가 종료하는 경우에 해당 프로세스에서 서비스가 처리되었던 요청건들에 대해서 호출자에게 에러 응답이 전달된다. 즉, 같은 서버의 다른 프로세스들은 영향을 받지 않는다. tpsavectx() 호출로 생성된 클라이언트 정보(CTX_T)를 서버 프로세스 내부적으로만 관리하는 경우에는 정상적으로 동작한다.

      그러나 만약 클라이언트 정보를 IPC 등을 통해 여러 프로세스가 공유하고 특정 프로세스가 비정상 종료되더라도 다른 프로세스에 의해서 tprelay()를 처리할 수 있도록 구성된 환경에서는 정상적으로 처리할 수 있음에도 불구하고 에러 응답이 전달될 수 있다. 따라서 이러한 경우에는 설정값을 'N'으로 설정해서 에러 응답이 전달되지 않도록 설정한다.

  • MULTICLH = Y | N

    • 기본값 : Y

    • 기본값으로 설정하면 MINCLH가 2 이상인 환경에서 한 서버 프로세스가 여러 CLH로우부터 서비스 요청을 동시에 받을 수 있다. 서버 프로세스는 서비스 요청을 동시에 받으면 먼저 들어온 서비스 요청을 처리하고, 해당 서비스가 tpreturn으로 끝났을 때 다른 CLH의 서비스 요청을 처리하게 된다.

    • 설정값을 'N'으로 설정하면 각각의 서버 프로세스는 하나의 CLH로부터만 서비스 요청을 받아서 처리하게 된다. 따라서 여러 CLH로부터 한 서버 프로세스로 동시에 서비스 요청을 하는 것을 방지할 수 있다. 반면에 각 서버 프로세스는 하나의 CLH로부터만 서비스를 요청받기 때문에, 다른 CLH에서 부하가 발생하더라도 이와 상관없이 자신에게 할당된 CLH의 요청만 처리하게 되어 성능적인 측면에서 비효율적인 상황이 발생할 수 있다.

    • 설정값을 N으로 설정할 경우 주의사항

      • 서버의 MIN 값을 설정할 경우 반드시 MINCLH 이상의 값을 설정해야 한다.

      • 서버의 MAX 값을 설정할 경우 반드시 MAXCLH 이상의 값을 설정해야 한다. MAX 설정값은 MAXCLH 설정값의 배수일 필요는 없다.

      • 각 서버 프로세스는 자신이 담당할 CLH를 서버 프로세스 번호(spri)의 값이 낮은 순서부터 차례대로 순서에 따라 clh 번호에 할당된다. 즉, 첫 번째 서버 프로세스는 첫 번째 CLH를 담당하고, 두 번째 서버 프로세스는 두 번째 CLH, 서버 프로세스 순서가 MAXCLH를 초과하는 경우에는 다시 첫 번째 CLH부터 순서대로 담당하게 된다.

        만약 MINCLH와 MAXCLH의 설정값이 다르고, CLH가 MAXCLH까지 기동되지 않았다면 기동되지 않은 CLH를 담당하는 서버 프로세스들은 어떤 서비스 요청도 받지 못하게 된다. 따라서 tmboot나tmm에 의해 서버 프로세스가 기동될 때 미기동된 CLH를 담당하는 spri를 가진 서버 프로세스들은 기동되지 않으며, CLH가 기동해야 해당 CLH를 담당하는 spri의 서버 프로세스들도 기동할 수 있다.

      • MINCLH와 MAXCLH의 설정값이 다른 환경에서 CLH를 추가로 기동시킨 경우에는 해당 CLH를 담당하는 서버 프로세스들은 기동되지 않은 상태이기 때문에 즉시 tmboot로 추가 기동시켜야 한다. 그렇지 않으면 해당 CLH로 접속된 클라이언트에서 서비스를 요청하면 TPENOREADY 에러를 리턴받게 된다.

      • MULTICLH 옵션이 기본값으로 설정된 서버를 'N'으로 변경할 때는 MIN, MAX 설정값을 조정할 필요가 있는지 검토해야 한다. MIN, MAX 설정값을 변경하지 않고 MULTICLH를 'N'으로 설정하면 기존보다 각 CLH가 스케줄링할 수 있는 서버 프로세스 수가 줄어들기 때문에 특정 CLH에 부하가 발생하는 경우에 요청이 큐에 쌓일 수 있다.

  • TMAPM = Y | N

    • 기본값 : Y

    • tmapm 사용 여부를 서비스별로 설정한다.

    • 사용자 함수로 타임아웃을 재조정할 경우(tpsetsvctimeout()) tmapm을 사용하지 않는 것을 권장한다.

  • MAC = Y | N

    • 기본값 : N

    • MAC(Master Alive Check)는 TMM이 종료되었을 때, 좀비 프로세스로 남는 것을 방지하기 위해 경우에 따라서 서버를 종료시킬 필요가 있다.

    • MAC=Y로 설정할 경우, TMM이 비정상 종료하면 서버도 따라서 종료한다.

  • ROC = Y | N

    • 기본값 : N

    • ROC(Reconncet Outbound CPC)는 서버가 CLH와 연결이 끊어졌을 경우 cpc 연결을 다시 해야 할 경우가 발생한다.

    • ROC=Y로 설정할 경우, CLH는 살아 있고 소켓의 연결이 끊겼을 경우 재연결을 시도한다.

  • MAX_USE_COUNT = Y | N

    • 기본값 : N

    • 해당 서버의 서비스 호출 회수가 MAX_USE_COUNT 보다 크면 종료하고 재시작한다.

    • 만약 MAX_USE_COUNT를 통해 서버가 재시작 되면 TMM은 sever closed due to MAX_USE_COUNT or MEM_USAGE(CLOPT:-m)을 출력한다.

재정의 가능 항목

  • LOGLVL = string

    • 서버의 로그 레벨을 설정한다.

  • ULOGDIR = literal

    • 사용자 메시지가 기록(logging)될 디렉터리의 절대 경로를 지정한다.

    • 사용자, 즉 Tmax 응용 프로그래머는 userlog() 함수를 이용하여 디버그용 메시지, 각종 에러 및 경고 메시지 등을 사용자에 따라 간편하게 로깅(logging)할 수 있다. 이렇게 프로그래머가 userlog() 함수를 통해 내보내는 메시지들이 저장될 디렉터리가 ULOGDIR이다. 지정된 ULOGDIR 디렉터리에는 날짜별로 ‘ulog_날짜’ 파일이 생성되어 각 파일에는 일자별로 발생한 메시지들이 기록된다.

      항목이 정의되지 않은 경우에는 TMAXDIR에서 지정한 디렉터리 아래 log/ulog 디렉터리에 기록된다. 지정된 경로에는 사용 중인 시스템이 존재해야 한다.

참고

userlog 함수에 대한 설명은 "Tmax Application Development Guide"를 참고한다.

사용 예제

다음은 SERVER 절의 사용 예제이다.

*SERVER
svr1     SVGNAME = svg1,
         CLOPT = "-e err1 -o out1 -- svr1 1",
         MIN = 1,MAX = 10, CONV = N

svr2     SVGNAME = svg1,
         CLOPT = "-e err1 -o out1 -- svr1 2",
         MIN = 1, MAX = 10,
         CONV = N,
         SVRTYPE = UCS,
         CPC = 5

3.2.5. SERVICE 절

Tmax 시스템에서 제공하는 서비스를 등록하는 절이다. 서비스를 제공하는 서버 프로세스가 동작 중이더라도 서비스가 환경 파일에 등록되어 있지 않으면 그 서비스는 처리될 수 없다. 따라서 사용할 서비스는 반드시 SERVICE 절에 정의되어야 한다.

각 서비스에 대해서는 다음과 같은 내용을 정의할 수 있다.

  • 서비스가 제공되는 서버 프로세스

  • 서비스 우선순위

  • 서비스 처리 제한시간

  • 라우팅 정보

SERVICE 절은 다음과 같은 형식으로 정의된다.

[DEFAULT : ]
Service Name        SVRNAME = server-process-name or gateway-name
                    [FUNCTION= module-name,]
                    [PRIO = priority-value,]
                    [ROUTING = rout-name,]
                    [SVCTIME = timeout-value,]
                    [EXPORT = (Y) | N,]
                    [AUTOTRAN = Y | (N) | B ,]
                    [TXTIME = transaction-timeout-value]

필수 항목

  • Service Name = string

    • 크기 : 15자 이내

    • 서버 프로그램 내의 함수명(서비스 루틴명)이 사용된다. 반드시 SERVICE 절에서 고유한 이름이어야 한다. 멀티 도메인 환경에서는 모든 도메인에서 고유해야 한다.

  • SVRNAME = string / literal

    • 크기 : 15자 이내

    • 해당 서비스를 제공하는 서버 프로세스를 지정한다.

    • 해당 서비스 루틴을 가진 서버 프로그램의 실행 파일명이 정의된다. 서버 프로세스는 SERVER 절에 정의되어 있어야 한다. 서버 프로세스에 특수문자가 있을 경우에는 "서버 프로세스명" 형태로 정의해야 한다. 하나의 서버 프로세스에 여러 개의 서비스를 제공할 때, 각 서비스마다 동일한 서버 프로세스명을 지정하는 경우, SERVICE 절에서 동일한 서버 프로세스명은 여러 번 나타날 수 있다.

선택 항목

  • DEFAULT: 항목 = 값, …

  • FUNCTION = string

    • 서비스명과 실제로 동작시킬 모듈의 파일명이 다를 때 모듈의 실제 파일명을 기술한다.

  • PRIO = numeric

    • 범위 : 1 ~ 100

    • 기본값 : 50

    • 클라이언트의 요구를 처리하는 우선순위 값이다. 각 서비스 사이의 우선순위를 나타내며, 높은 우선순위의 서비스를 낮은 우선순위의 서비스보다 먼저 처리한다. 숫자가 클수록 높은 우선순위를 갖는다. 즉, 100을 가장 먼저 처리한다.

  • SVCTIME = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 0

    • 값을 설정하지 않으면 기본값으로 설정되어 무한대기한다.

    • 서비스 처리의 제한시간으로 각 서비스는 서비스 처리가 시작되는 순간부터 끝날 때까지 지정된 SVCTIME 시간 안에 처리되어야 한다.

      만약, SVCTIME을 초과하면 서버 프로세스는 서비스를 중지하고, 클라이언트에게 에러를 반환한다. DOMAIN 절의 BLOCKTIME 항목이 클라이언트가 서비스를 요구하는 시점(tpcall()이나tpacall()이 불려지는 시점)부터라면, SVCTIME은 서버 프로세스가 CLH 프로세스로부터 서비스 요청을 넘겨받아 서비스 루틴이 시작되는 시점부터이다. 값이 0인 경우, 서비스 처리에 시간 제한이 없는 것으로 간주한다.

    • 데이터베이스 세션을 사용 중일 때 서비스 타임아웃이 발생하는 경우 데이터베이스와 연결된 세션을 일방적으로 완전히 끊을 수 없어 다음 서비스의 수행이 불가능해진다. 이 경우 Tmax는 다른 방법을 사용하여 이 문제를 해결한다. 서비스 타임아웃이 발생할 경우 사용자는 tpsvctimeout 루틴에서 TPRETURN(TPEXIT, ...)을 이용하여 서버를 재기동할 수 있으며 이것은 SERVER 절에 정의한 MAXRSTART 횟수에 포함된다.

      또한 Windows에서 XA 모드로 애플리케이션을 개발하는 것을 권장하며 Non-XA 모드를 사용하는 경우는 RESTART 횟수를 충분히 설정할 필요가 있다. SVCTIME은 서버가 동작하고 있을 때에만 적용된다. 따라서 클라이언트가 요청한 서비스가 큐에 저장되어 있는 동안에는 SVCTIME이 적용되지 않는다.

      참고

      tpsvctimeout에 대한 자세한 내용은 "Tmax Reference Guide"를 참고한다.

  • EXPORT = Y | N

    • 기본값 : Y

    • 멀티 도메인 환경에서 게이트웨이를 통해 서비스를 요청받았을 경우 서비스를 수행할 것인지 여부를 정의한다.

    • EXPORT=N으로 설정할 경우 다른 도메인에서 서비스를 요청하면 TPESECURITY 에러가 발생한다.

  • AUTOTRAN= Y | N | B

    • 기본값 : N

    • SERVICE 절에 속한 항목으로 트랜잭션 모드가 아닌 상태에서 서비스가 요청 메시지를 받았을 때 트랜잭션을 자동으로 기동할지 여부를 정의한다.

    • Tmax 3.8.8 이전에 있던 AUTOTRAN 항목과는 차이점이 있다.

      이전에는 AUTOTRAN을 설정하지 않더라도 기본적으로 AUTOTRAN=Y로 설정되어 tx_begin을 수행하지 않아도 트랜잭션을 시동하였으며 이 트랜잭션은 로컬 트랜잭션이었다. 그러나 Tmax 3.8.8에서 추가된 AUTOTRAN은 이 항목이 설정되지 않은 경우 기본적으로 'N'이 설정되어 트랜잭션을 자동으로 시동하지 않는다.

      따라서 이 항목을 설정하지 않은 경우는 tx_begin으로 트랜잭션을 명시적으로 기동시켜야 한다. 이 항목을 'Y'로 설정한 경우 해당 서비스가 다른 서비스를 요청하면 이들은 모두 하나의 트랜잭션(글로벌 트랜잭션)으로 묶이게 된다. 'Y'로 설정한 경우는 tx_begin으로 트랜잭션을 명시적으로 기동시키면 에러(TPESVCERR)가 발생한다.

    • 다음은 환경 파일과 tmadmin의 예제이다.

      < config.m>

      *SVRGROUP
      svg2            NODENAME = "tmax1"
      
      ### tms for Oracle ###
      svg3            NODENAME = "tmax1",    DBNAME = ORACLE,
                      OPENINFO = "Oracle_XA+Acc=P/scott/tiger+SesTm=60",
                      TMSNAME  = tms_ora
      
      *SERVER
      svr2            SVGNAME = svg2
      ### servers for Oracle sample program###
      fdltest         SVGNAME = svg3
      
      *SERVICE
      ### services for fdltest ###
      FDLINS          SVRNAME = fdltest
      FDLSEL          SVRNAME = fdltest
      FDLUPT          SVRNAME = fdltest
      FDLDEL          SVRNAME = fdltest
      TOUPPER         SVRNAME = svr2

      <tmadmin의 예제>

      tmax@tmax1;/user/tmax/tmax/config>tmadmin
      --- Welcome to Tmax Admin (Type "quit" to leave) --- 
      
      $$1 tmax1 (tmadm): cfg -s
         ------------------------------------------------- 
         svc_name    prio(pr)  autotran  svctime(st)  routno  svrname      svgno 
         ------------------------------------------------- 
      FDLINS          50      YES         0           -1      fdltest         2 
      FDLUPT          50      YES         0           -1      fdltest         2 
      FDLSEL          50      YES         0           -1      fdltest         2 
      FDLDEL          50      YES         0           -1      fdltest         2
      TOUPPER         50       NO         0           -1        svr2          0
      
      $$2 tmax1 (tmadm): q
      ADM quit for node (tmax1)

사용 예제

다음은 SERVICE 절의 사용 예제이다.

* SERVICE
TOUPPER        SVRNAME = svr1,
               PRIO = 1,
               SVCTIME = 60
TOLOWER        SVRNAME = svr1,
               PRIO = 2

3.2.6. GATEWAY 절

DOMAIN 절, NODE 절, SVRGROUP 절, SERVER 절, SERVICE 절은 필수적인 절들이었으나 GATEWAY 절은 선택이 가능한 절이다.

시스템이 수많은 노드로 구성되어 모든 노드를 하나의 도메인으로 연결하였을 경우에는 전체 시스템의 관리가 어렵고, 노드 사이의 통신 트래픽이 심하여 시스템의 성능을 저하시킬 수 있다. 이러한 문제점을 해결하기 위해 적정한 노드들을 하나의 도메인에 할당하고, 도메인 사이의 게이트웨이를 통해 연결함으로써 시스템 성능을 향상시킬 수 있다.

클라이언트의 해당 서비스를 어떤 시스템이든 관계없이 처리할 수 있도록 등록하는 절이 GATEWAY 절이다. GATEWAY 절은 하나의 도메인에 여러 개를 지정하는 것이 가능하다. 그러나 하나의 노드에는 하나의 게이트웨이만을 지정할 수 있다. GATEWAY 절은 선택적으로 등록하는 절로 해당 절이 등록되었을 경우에는 게이트웨이의 종류에 따라 적절한 프로세스가 수행된다.

GATEWAY 절에는 다음과 같은 내용이 정의된다.

  • 게이트웨이 프로세스가 실행될 노드

  • 게이트웨이 사이의 통신을 위한 TCP/IP 정보

  • 게이트웨이 종류

GATEWAY 절의 기본 환경설정 형식은 다음과 같다.

[DEFAULT : ]
Gateway Name        NODENAME = node-name,
                    PORTNO = port-number,
                    RGWADDR = remote-ip-addr,
                    RGWPORTNO = remote-port-number,
                    GWTYPE = {TMAX | TMAXNONTX | SNACICS | OSITP | JEUS 
                           | JEUS_ASYNC | TUXEDO | TUXEDO_ASYNC | WSGW | XAGW }
                    [MAXINRGW = numeric(32),]
                    [CPC = channel-number,]
                    [COUSIN = gateway-name,]
                    [BACKUP = gateway-name,]
                    [BACKUP_RGWADDR = remote-ip-addr,]
                    [BACKUP_RGWPORTNO = remote-port-number,]
                    [BACKUP_RGWADDR2 = Backup-Tuxedo-ipaddr2,]
                    [BACKUP_RGWPORTNO2 = Backup-Tuxedo-domaingw-portno2,]
                    [BACKUP_RGWADDR3 = Backup-Tuxedo-ipaddr3,]
                    [BACKUP_RGWPORTNO3 = Backup-Tuxedo-domaingw-portno3,]
                    [LOCAL_IPV6 = Y|(N),]
                    [RGW_IPV6 = Y|(N),]
                    [RGW_B1_IPV6 = Y|(N),]
                    [RGW_B2_IPV6 = Y|(N),]
                    [RGW_B3_IPV6 = Y|(N),]
                    [TIMEOUT = second,]
                    [DIRECTION = (BIDIR) | IN | OUT,]
                    [CLOPT = string,]
                    [RESTART = (Y)|N,]
                    [MAXRSTART = numeric,]
                    [GPERIOD = numeric,]
                    [LOAD = numeric,]
                    [PTIMEOUT = 1~MAXINT/2,]
                    [PTIMEINT = 1~MAXINT/2,]
                    [GWCHKINT = numeric,]
                    [GWCONNECT_TIMEOUT = numeric,]
                    [NLIVEINQ = numeric,]
                    [TRB = nodename]

필수 항목

  • Gateway Name = string

    • 크기 : 15자 이내

    • 게이트웨이에 대한 논리적인 이름으로, GATEWAY 절 내에서 유일한 값이어야 한다.

  • NODENAME = literal

    • 크기 : 255자 이내

    • 도메인 내에서 게이트웨이 프로세스가 실행될 노드명을 지정하는 항목이다.

    • 사용되는 NODENAME은 NODE 절에서 정의한 노드명이어야 한다.

  • PORTNO = numeric

    • 로컬 게이트웨이 프로세스가 사용하는 Listen 포트 번호이다. 이 포트 번호는 리모트 게이트웨이 프로세스가 로컬 게이트웨이 프로세스와 연결할 때 사용한다. 이를 위해서 포트 번호를 RGWPORTNO 항목에 등록해야 한다. 일반적으로 시스템 영역에서는 1024 이내의 포트 번호를 사용하므로 관리자는 이 범위를 피해야 한다.

    • 포트 번호는 게이트웨이 사이의 통신에 사용되므로 이 값들이 다른 곳에 사용되고 있는지 반드시 확인해야 한다.

  • RGWADDR = literal

    • 크기 : 255자 이내

    • 로컬 게이트웨이 프로세스가 접속하기를 원하는 리모트 게이트웨이의 프로세스가 실행되는 노드의 IP 주소나 노드명을 등록하는 항목이다.

    • 노드명을 지정할 경우 그 노드명은 반드시 "/etc/hosts" 파일에 등록되어 있어야 한다. 로컬 게이트웨이 프로세스는 RGWADDR 항목의 IP 주소와 RGWPORTNO 항목의 포트 번호를 이용하여 리모트 게이트웨이 프로세스와 접속한다.

  • RGWPORTNO = numeric

    • 로컬 게이트웨이 프로세스가 리모트 게이트웨이 프로세스와 접속하기 위한 포트 번호이다.

    • 포트 번호는 리모트 게이트웨이 프로세스의 Listen 포트 번호이다. 일반적으로 시스템 영역에서는 1024 이내의 포트 번호를 사용하므로 관리자는 이 범위를 피해야 한다.

      주의

      RGWPORTNO는 게이트웨이 사이의 통신에 사용되므로 이 값의 사용 여부를 반드시 확인해야 한다.

  • GWTYPE = string

    • 로컬 게이트웨이 프로세스가 접속할 리모트 게이트웨이의 종류를 지정하는 항목이다.

    • 현재는 TMAX, TMAXNONTX, JEUS, JEUS_ASYNC, TUXEDO, TUXEDO_ASYNC, WSGW의 7가지를 지원하고 있다.

      설정값설명
      TMAX리모트 시스템을 Tmax 시스템으로 지정한다.
      TMAXNONTX리모트 시스템이 Tmax 시스템이고 도메인 간 트랜잭션을 사용하지 않을 경우 도메인 사이의 채널을 Mulit-flexing하여 CPC의 효율을 증가시킨다. 하나의 요청이 결과를 받을 때까지 채널을 점유하지 않으므로 응답시간 향상과 리소스 사용량 감소 효과를 볼 수 있다.
      TUXEDO리모트 시스템을 Tuxedo 시스템으로 지정한다. Tuxedo의 도메인 게이트웨이와 동기 형태의 채널로 통신한다.
      TUXEDO_ASYNC리모트 시스템을 Tuxedo 시스템으로 지정한다. Tuxedo의 도메인 게이트웨이와 비동기 형태의 채널로 통신한다.
      JEUS리모트 시스템을 JEUS 시스템으로 지정한다.
      JEUS_ASYNC

      웹 애플리케이션 서버(Web Application Server)의 Async WebT와 In/Out 통신을 비동기 형식으로 하기 위한 Tmax의 게이트웨이이다.

      GWTYPE = JEUS일 경우 리모트 시스템은 반드시 JEUS이어야 하는 반면에 JEUS_ASYNC는 타 웹 애플리케이션 서버와도 연동이 가능하다. 자세한 사항은 "Tmax WebtAsync User Guide"를 참고한다.

      WSGWTmax 서비스를 특별한 변경없이 웹 서비스로 사용할 수 있도록 하기 위하여 제공되는 게이트웨이로 양방향 통신이 가능하다.
      XAGWXA 라이브러리(libtxa.so)에서 올라온 데이터를 처리하기 위한 게이트웨이로 이기종 간의 2PC를 보장한다.
      SNACICSSNA LU6.2에서만 사용 가능하며, 트랜잭션 통신을 하기 위한 Hostlink와의 게이트웨이이다.

선택 항목

  • DEFAULT: 항목 = 값, …

  • MAXINRGW = numeric

    • 범위 : 1 ~ 128

    • 기본값 : 32

    • 멀티 도메인 환경에서 한 게이트웨이로 들어올 수 있는 채널의 개수를 지정한다.

    • TMAXNONTX 타입의 경우에만 사용 가능하며 이 항목을 정의하지 않으면 하나의 게이트웨이는 32개의 도메인과 연결되어 서비스 요청을 받을 수 있다.

  • LOCAL_IPV6 = Y | N

    • 기본값 : N

    • 로컬 게이트웨이가 listen을 위해 IPv6의 사용 여부를 결정하는 항목이다.

  • RGW_IPV6 = Y | N

    • 기본값 : N

    • 로컬 게이트웨이가 리모트 게이트웨이에 접속할 때 IPv6를 사용하여 접속하는지의 여부를 결정하는 항목이다.

  • CPC = numeric

    • 범위 : 1 ~ 128

    • 기본값 : 1

    • 게이트웨이 이용하는 경우 양 도메인의 CLH 프로세스 간 병렬 통신 채널 수를 지정하는 항목이다.

    • 게이트웨이 프로세스가 처리량이 아주 많고 서비스의 소요시간이 길 경우 다중 채널을 두어 병렬 통신으로 처리하여 처리속도를 증가시킬 수 있다. TMAXNONTX 타입의 게이트웨이의 경우 2~3개 이하의 CPC로도 충분하다.

  • TIMEOUT = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 0

    • 값을 설정하지 않으면 기본값으로 설정되어 무한대기한다.

    • 도메인 사이의 tpcall / tpacall 호출이 있을 경우 사용되는 타임아웃 시간을 지정한다.

      0일 경우 제한이 없음을 나타내며 게이트웨이는 서버와 달리 30초 간격으로 타임아웃을 체크하므로 지연시간이 30초보다 작을 경우 TIMEOUT 항목이 적용되지 않는다.

  • COUSIN = literal

    • 크기 : 8000자 이내

    • 동일한 서비스를 여러 게이트웨이를 통해 부하 분산할 필요가 있을 경우에 관련된 게이트웨이들의 이름을 지정한다. 같은 노드이거나 다른 노드에 속한 게이트웨이의 경우에도 이름을 지정할 수 있다. COUSIN과 BACKUP을 함께 지정할 수 있는데 이 경우 COUSIN, BACKUP 각각 다른 게이트웨이로 설정해야 한다.

      라우팅은 COUSIN에 지정한 게이트웨이가 담당하며, 장애가 발생할 경우 백업에 지정한 게이트웨이가 담당한다.

    • COUSIN 항목에는 GATEWAY 절에 등록된 게이트웨이명만 지정할 수 있다. 서버 그룹은 지정할 수 없다.

    • 다음은 환경 파일의 예제이다.

      < config.m>

      *SERVICE
      GWSVC1       SVRNAME = gw1
      GWSVC2       SVRNAME = gw1
      GWSVC3       SVRNAME = gw1
      
      *GATEWAY
      gw1         NODENAME = node1, GWTYPE = TMAXNONTX, PORTNO = 10001,
                  RGWADDR = "192.168.1.1",   RGWPORTNO = 10002,
                  LOAD = 1, CPC = 5, CLOPT = "-i",
                  COUSIN = "gw1"
      
      gw2         NODENAME = node2, GWTYPE = TMAXNONTX, PORTNO = 10001,
                  RGWADDR = "192.168.1.2",   RGWPORTNO = 10002,
                  LOAD = 1, CPC = 5, CLOPT = "-i"

      게이트웨이 gw1과 gw2를 COUSIN으로 설정하였다. GWSVC1 서비스 요청을 받으면 LOAD 설정에 따라 분산 처리된다.

  • LOAD = numeric

  • BACKUP = gateway name

    • 크기 : 7999자 이내

    • 주 게이트웨이에 장애가 발생하는 경우 사용할 백업 게이트웨이의 이름을 정의한다. 이 필드에 정의된 값은 Tmax 환경 파일의 GATEWAY 절에 정의된 값과 같아야 한다.

  • BACKUP_RGWADDR = remote address

    • 크기 : 255자 이내

    • 백업을 위해 로컬 게이트웨이 연결에 사용된 리모트 게이트웨이의 노드명이나 IP 주소를 정의한다.

    • IP 주소 대신 노드명이 정의되었다면 '/etc/hosts' 파일에도 정의되어 있어야 한다.

  • BACKUP_RGWPORTNO = remote-port-no

    • 백업을 위해 로컬 게이트웨이 연결에 사용된 리모트 게이트웨이의 포트 번호를 정의한다.

    • 대기(listening)하고 있는 리모트 게이트웨이의 포트 번호이다. 일반적으로 시스템 영역에서는 1024 이내의 포트 번호를 사용하므로 관리자는 이 범위는 피해야 한다.

    • BACKUP, BACKUP_RGWADDR, BACKUP_RGWPORTNO 필드는 장애 대책에 사용된다.

      주의

      BACKUP_RGWPORTNO는 게이트웨이 사이의 통신에 사용되므로, 그 사용 여부가 먼저 확인되어야 한다.

  • RGW_B1_IPV6 = Y | N

    • 기본값 : N

    • 로컬 게이트웨이가 백업 리모트 게이트웨이로 접속할 때 IPv6를 사용하여 접속하는지의 여부를 결정하는 항목이다.

    • 주소가 BACKUP_RGWADDR에, 포트가 BACKUP_RGWPORTNO에 지정된 리모트 게이트웨이로 접속할 때 적용된다.

  • BACKUP_RGWADDR2, BACKUP_RGWPORTNO2 = remote address

    • 크기 : 255자 이내

    • Tuxedo 게이트웨이(GWTYPE = TUXEDO | TUXEDO_ASYNC)에서만 설정할 수 있다. 백업 Tuxedo 게이트웨이는 3개까지 지정할 수 있으며, BACKUP_RGWADDR2-BACKUP_RGWPORTNO2, BACKUP_RGWPORT3-BACKUP_RGWPORTNO3로 지정한다.

  • RGW_B2_IPV6, RGW_B3_IPV6 = Y | N

    • 기본값 : N

    • Tuxedo 게이트웨이(GWTYPE = TUXEDO | TUXEDO_ASYNC)에서만 사용한다. 두 번째 및 세 번째의 백업 리모트 게이트웨이로 접속할 때 IPv6를 사용하여 접속하는지의 여부를 결정하는 항목이다.

    • 각각 주소가 BACKUP_RGWADDR2이고 포트가 BACKUP_RGWPORTNO2에 지정된 리모트 게이트웨이, 주소가 BACKUP_RGWADDR3이고 포트가 BACKUP_RGWPORTNO3에 지정된 리모트 게이트웨이로 접속할 때 적용된다.

  • DIRECTION = BIDIR | IN | OUT

    • 기본값 : BIDIR

    • DIRECTION은 GWTYPE이 TMAX와 TMAXNONTX인 경우에만 유효한 항목이다.

    • 다음은 설정값에 대한 설명이다.

      설정값설명
      BIDIR양방향 요청 처리가 모두 가능하다.
      IN상대편 도메인에서 들어오는 요청만 처리가 가능하다. 자신의 도메인에서 상대편 도메인으로 나가는 요청에 대해서는 TPESECURITY 에러가 발생한다.
      OUT상대편 도메인으로 나가는 요청만 처리가 가능하다. 상대편 도메인에서 자신의 도메인으로 들어오는 요청에 대해서는 TPESECURITY 에러가 발생한다.
  • CLOPT = string

    • 크기 : 255자 이내

    • 게이트웨이가 기동될 때 그 게이트웨이로 전달되는 명령어 옵션을 정의한다. 정의된 옵션 중에 '--' 이전에 지정된 옵션은 시스템에서 사용하고, 그 이후에 지정된 옵션은 사용자가 자유롭게 사용할 수 있다.

    • 주로 사용되는 사용자 옵션은 다음과 같다.

      • [-h Tmax Version Number]

        Tmax 4.0 이후 버전과 4.0 이전 버전의 Tmax 시스템으로 이루어진 도메인 사이의 연동이 가능하도록 하기 위해서 사용하는 옵션으로 Tmax 4.0 이후 버전에 해당하는 도메인의 환경 파일에 상대방 도메인에 해당하는 Tmax 시스템의 엔진 버전을 xxyyzz의 6자리 형식으로 지정해 준다. 게이트웨이는 설정된 버전을 토대로 상대편 도메인과 통신을 한다. 단, 상대편 도메인의 버전은 하위 버전까지 명확하게 명시해 주어야 한다. 그렇지 않을 경우, 서비스 블록 등 여러 가지 문제가 발생할 수 있다. TYPE=JEUS일 경우(JEUSGW일 경우) 항상 CLOPT = "–h 1"로 지정해 준다.

        다음은 Tmax 3.14.4일 경우의 예제이다.

        CLOPT = "-h 031404"
      • [-c checktime]

        항목에 -c 옵션을 설정해서 checktime을 주기로 체크를 하여, CLH와의 연결이 끊겼으면 재연결을 시도한다. -c 옵션으로 GW의 checktime을 15초로 주었다 하더라도 BLOCKTIME이 5초일 경우, 매 5초마다 (CLH 또는 RGW로부터 아무런 요청도 없는 경우) CLH와의 채널이 끊겼는지 체크한다.

        TUXEDO, TUXEDO_ASYNC 게이트웨이에서는 이 옵션은 Tuxedo의 채널에 대한 alive 체크 기능으로 동작한다. 주기적으로 "dus$%@tjq" 이름의 서비스를 호출하며, 옵션으로 지정한 초 * 2 의 시간이 지나도 Tuxedo로부터 응답이나 요청이 없을 경우 채널 연결이 종료된 것으로 판단하고, 연결을 종료시킨다. 이후 Tuxedo와의 재연결은 새로운 서비스 요청이 들어오거나, 상대방 게이트웨이에서 연결 시도시 맺어질 수 있다. 연결이 종료되었을 때는 아래와 같은 로그가 slog에 기록된다. 이 기능은 Tmax v5.0 SP2 Fix#1 이후 버전부터 적용되었다.

        (E) GATEWAY2062 remote gateway closed: 192.168.1.2 [TUXGW0307]
        (E) GATEWAY3030 failed to check rgw alive: rgw closed [TUXGW0027]
      • [-C svcname]

        TUXEDO, TUXEDO_ASYNC 게이트웨이에서 [-c] 옵션이 설정된 경우 주기적으로 alive 체크를 수행하는데, 이때 기본적으로 "dus$%@tjq" 이름의 서비스를 호출한다. 이 옵션을 지정하면 alive check를 위한 서비스 호출시 지정한 이름으로 호출하게 된다.

      • [-i]

        서비스 요청과 독립적으로 채널을 연결한다. 옵션을 설정하지 않으면 기존과 동일하게 동작하게 된다. 리모트 도메인의 네트워크나 시스템 장애로 인하여 리모트 도메인과의 연결이 끊어진 경우, 재연결을 시도하게 된다.

        기존에는 서비스 요청이 들어오면 재연결을 시도하여 GWCONNECT_TIMEOUT 동안 기다렸으나, 추가된 기능은 재연결 시도를 서비스 요청과 분리하여 서비스를 요청할 때 분리 재연결을 시도하지 않고 현재 상태에 따라서 응답을 전달한다. 결과적으로 리모트와 연결이 끊어진 상황에서 발생하는 서비스 요청에 보다 빠른 에러 응답을 전달하기 위해 사용하는 옵션이다.

        서비스를 요청할 때 리모트 도메인과의 연결이 끊어진 상태인 경우에는 즉시 TPENOREADY 에러를 전달하며, 리모트 도메인과의 연결이 끊어진 것을 확인한 후 이미 리모트 도메인에게 요청한 서비스에 대해서는 TPESYSTEM 에러를 전달한다. 이 경우 기존 버전에서는 TPETIME 에러를 전달하였다. 그리고 연결이 되어 있는 상태에서는 서비스 요청을 하게 된다. 재연결 서비스 요청과는 별도로 시도하며, 그 시간은 NLIVEINQ 또는 BLOCKTIME 중 작은 값을 사용한다. 만약 GWCHKINT가 설정되어 있으면 이 값의 간격으로 재연결을 시도한다.

        NLIVEINQ에 따라서 BLOCTIME의 값을 적절하게 설정해야 서비스 요청에 대한 빠른 응답을 할 수 있다. BLOCKTIME이 너무 짧은 경우에는 채널이 끊어진 것을 감지하기 전에 TPETIME 에러를 받을 확률이 높아진다. 그리고 NLIVEINQ가 너무 짧은 경우에는 게이트웨이와의 연결 시도를 빈번하게 하기 때문에 네트워크 장애가 발생할 때 대부분의 요청에 대해서 TPENOREADY나 TPESYSTEM 에러가 아닌 TPETIME 에러가 발생할 확률이 높다.

        반대로 NLIVEINQ가 너무 짧은 경우에는 네트워크 장애 감지 후 대부분 요청에 대해서 TPENOREADY를 보내게 되지만 네트워크 장애를 감지하는 데 시간이 오래 걸린다. IRT 게이트웨이를 사용하는 경우, 해당 옵션을 사용하여 독립적으로 연결을 시도할 수 있도록 해야 한다. IRT COUSIN을 사용하는 경우에는 문제가 있는 게이트웨이로는 서비스 요청 자체가 이루어지지 않기 때문에 재연결을 시도할 수 없다. 따라서 서비스 요청과는 별도로 연결을 시도해야 한다.

        IRT COUSIN은 TMAXNONTX, TMAX, JEUS, JEUS_ASYNC, TUXEDO, TUXEDO_ASYNC 게이트웨이에 대해서만 지원한다.

        TUXEDO, TUXEDO_ASYNC 게이트웨이는 Tmax v5.0 SP2 Fix#1부터 IRT 기능이 지원된다.

      • [-R]

        Tmax 3.x 버전과 JTmax에서 트랜잭션 복구 기능이 지원되지 않으므로 Pending 트랜잭션에 대한 처리가 수행되지 않을 수 있다. 따라서 Tmax 5.0에서 Pending 트랜잭션에 대한 처리 방법을 사전에 정의하여 pending 트랜잭션을 처리할 수 있도록 한다.

        옵션에 사용할 수 있는 값은 다음과 같다.

        설정값설명
        IGNPending 트랜잭션을 Commit/Rollback 처리하지 않는다. 데이터베이스에서 Commit/Rollback을 해주어야 한다.
        COMPending 중인 트랜잭션은 모두 Commit된다.
        RBKPending 중인 트랜잭션은 모두 Rollback된다.
      • [-r]

        트랜잭션 복구 기능을 지원하는 옵션이다.

        구분설명

        GWTYPE=JEUS 또는

        JEUS_ASYNC

        WebT-JEUSGW 사이의 트랜잭션 복구 기능을 사용한다. JEUSGW-JTmax 사이의 트랜잭션 복구 기능도 가능하다. 트랜잭션 복구를 지원하는 WebT 버전에서만 사용 가능하다.

        GWTYPE=TUXEDO 또는

        TUXEDO_ASYNC

        Tuxedo에서 Tmax로 연결할 때 전송되는 Tuxedo의 도메인 ID 값을 설정한다. Tuxedo의 도메인 ID를 검사하여 인증을 하고자 할 때 사용한다. 해당 값에 설정되지 않은 도메인 ID를 가진 게이트웨이가 접속을 시도할 때에는 에러가 발생하며 접속을 거부한다.

        GWTYPE = TMAX 또는

        TMAXNONTX

        서로 다른 3.X 버전의 Tmax 시스템으로 이루어진 도메인 간의 연동이 가능하도록 하기 위해서 사용하는 옵션으로 상대방 도메인에 해당하는 Tmax 시스템의 엔진 버전을 xxyyzz의 6자리 형식으로 지정해준다.

        (예 : Tmax 3.8.15 : 030815)

        이 옵션을 지정하면 상대편 도메인에 해당하는 Tmax 시스템의 엔진 버전에 따라서 게이트웨이의 기능이 달라진다. 현재 다음 각 분류별(Tmax 버전)로 XA 관련 동작이 다른데 상대편 도메인에 해당하는 Tmax 시스템의 엔진 버전이 현재 버전과 다른 부류에 속한다면 반드시 –r 옵션을 지정해야 한다.

        • 분류 1 : 2.0 ~ 3.8.7

        • 분류2 : 3.8.8 ~ 3.8.13

        • 분류3 : 3.8.14 이후

      • [-a]

        Tuxedo로 연결할 때 전송되는 도메인 ID 값을 설정한다. 반드시 Tuxedo의 환경설정 파일 내에 정의된 이름이어야 한다.

      • [-p configuration file path]

        Domain Gateway의 요청에 대해서 지정한 환경설정 파일에 정의된 각각의 경우에 요청 처리된 결과 및 전문 내용을 로그로 남긴다. 이 기능을 이용하기 위해서는 해당 gateway의 LOGLVL 항목을 DEBUG4로 설정해야 한다. tmadmin의 chlog 명령을 통해 동적으로 LOGLVL을 변경할 수 있다. 또한 stdout으로 로그가 출력되기 때문에 -o 옵션으로 로그 파일명을 지정해야 한다.

        이 옵션에 지정한 환경설정 파일은 각 라인마다 type [on | off] 형식으로 작성한다. type은 0~7까지의 숫자이며, 각각 아래 표와 같은 의미를 가진다. 각 type에 해당하는 시점에 메시지 처리에 대한 로그를 기록하려면 해당 type에 대해서 on(ON)으로 설정하면 된다.

        type설명

        0

        clh로부터 요청(call/acall) 메시지 수신

        1

        clh로부터 응답(call/acall) 메시지 수신

        2

        remote gateway로부터 요청(call/acall) 메시지 수신

        3

        remote gateway로부터 응답(call/acall) 메시지 수신

        4

        clh에서 요청(call/acall) 송신

        5

        clh에서 응답(call/acall) 송신

        6

        remote gateway에서 요청(call/acall) 송신

        7

        remote gateway에서 응답(call/acall) 송신

        다음은 환경 파일을 작성하는 예제이다. 모든 경우에 로그를 남기는 설정이다.

        0 on
        1 on
        2 on
        3 on
        4 on
        5 on
        6 on
        7 on

        기능이 활성화되면 다음과 같은 형식으로 로그가 기록된다.

        success는 성공일 경우 0, 실패일 경우 1로 표시된다. 그 외의 항목들은 적절한 값이 설정되며, 다음 줄에 메시지 전문을 hex 형태로 출력한다.

        시간 [서비스명] call type(0~7):success(0 or 1):data type(xx):data size(xx):errno(xx):urcode(xx)
        메시지 전문
        
    • 다음은 항목 설정에 고려할 사항이다.

      • TMAXGW -h 옵션에 Tmax 3.x (예 : 031404)로 설정되면 -R 옵션을 따로 설정하지 않으면 기본값인 RBK로 설정된다.

      • JEUSGW -h1 옵션이 설정되고 -R 옵션을 따로 설정하지 않으면 기본값인 RBK로 설정된다.

      • JEUSGW -r 옵션(복구 지원)과 -R 옵션의 중복 설정은 지원하지 않는다.

  • RESTART = Y | N

    • 기본값 : Y

    • GATEWAY 절에 지정하였을 경우 해당 게이트웨이 프로세스 재기동 여부를 결정하는 항목이다. 비정상적으로 종료될 때 재기동한다.

  • MAXRSTART, GPERIOD

  • PTIMEOUT = numeric

    • 범위 : 1 ~ MAX_INT/2

    • 기본값 : -1

    • GW에서 pending list를 가지고 있는 최대시간을 지정한다.

    • 최대 시간 설정은 TIMEOUT 항목의 값을 2로 나눈 값보다 작거나 같아야 한다(TIMEOUT >=PTIMEOUT).

    • 도메인 게이트웨이에서 pending(Prepare-done, Commit, Rollback)을 재전송하여 Decision을 받지 못한 상황에서도 pending이 생기지 않도록 한다.

      Gateway1, Gateway2가 2PC로 연결이 되는 경우 Gateway2가 Prepare를 받은 후 Commit/Rollback 등을 받지 못하면 Gateway2가 Gateway1로 Prepare-done 등을 보낸다. 게이트웨이 사이의 네트워크 문제(혹은 비정상 종료) 등으로 Decision을 받지못한 상황에서 pending이 생기는 경우 PTIMEOUT, PTIMEINT를 설정하여 pending을 제거할 수 있다.

  • PTIMEINT = numeric

    • 범위 : 1 ~ MAX_INT/2

    • 기본값 : -1

    • 게이트웨이에서 pending(Prepare-done, Commit, Rollback)을 재전송하는 시간 간격을 지정한다.

    • 최대시간은 PTIMEOUT 값보다 작거나 같아야 한다.

  • GWCHKINT = numeric

    • 범위 : -1 ~ MAX_INT

    • 기본값 : -1

    • 게이트웨이에서 backup에 연결된 상태에서 failback으로 main으로 연결을 시도할 주기이다.

      설정값설명
      -1DOMAIN 절 설정을 참조한다.
      0failback 기능을 사용하지 않는 것을 의미한다.
  • GWCONNECT_TIMEOUT = numeric

    • 범위 : -1 ~ MAX_INT

    • 기본값 : -1

    • GW에서 리모트 게이트웨이에 소켓 연결(connect) 시도시 연결이 맺어질 때 까지 기다릴 수 있는 시간이다.

      설정값설명
      -1DOMAIN 절 GWCONNECT_TIMEOUT 설정을 참조한다.
      0기본으로 5초를 대기함을 의미한다.
  • NLIVEINQ = numeric

    • 범위 : -1 ~ MAX_INT

    • 기본값 : -1

    • 게이트웨이에서 리모트 게이트웨이에 연결한 채널이 가용한지 알기 위해 주기적으로 체크 메시지를 보내는 주기이다.

      설정값설명
      -1DOMAIN 절 설정을 참조한다.
      0사용하지 않는 것을 의미한다.

사용 예제

다음은 GATEWAY 절의 사용 예제이다.

*GATEWAY
gw1            NODENAME = "tmax1",
               PORTNO = 2222,
               RGWADDR = "192.168.23.1",
               RGWPORTNO = 2225,
               GWTYPE = TMAX,
               CPC = 10,
               CLOPT = "-r 030815"

다음은 Tuxedo의 VIEW 타입 사용 예제이다.

*DOMAIN
…
*NODE
ibm5l       TMAXDIR = "…",
            APPDIR  = "…",

*SVRGROUP
svg1        NODENAME = "ibm5l"

*SERVER
svr_sdl     SVGNAME = svg1

*SERVICE
TOUPPER_SDL     SVRNAME = svr_sdl

#svc for tuxedo
TUX_TOUPPERSDL     SVRNAME = TUXGW

*GATEWAY
TUXGW          GWTYPE = TUXEDO,
               PORTNO = 9521,
               RGWADDR = "192.168.1.43",
               RGWPORTNO = 9511,
               CLOPT = "-a TUXGW1 -v",
               NODENAME = ibm5l,
               CPC = 20,
               TIMEOUT = 30

다음은 GATEWAY를 이용하여 로컬 노드를 우선 처리하는 환경설정의 예제이다.

*DOMAIN
tmax1           SHMKEY = @SHMEMKY@, MINCLH = 1, MAXCLH = 3,
                TPORTNO = @TPORTNO@, BLOCKTIME = 25, RACPORT = @TRACPORT@

*NODE
@HOSTNAME@      TMAXDIR = "@TMAXDIR@",
                 . . . 
@RMTNAME@       TMAXDIR = "@RMTDIR@",
                 . . .

*SVRGROUP
svg1            NODENAME = "@HOSTNAME@", COUSIN = "svg2, svg3, svg4, gw1, gw2", 
                LOAD = -2
svg2            NODENAME = "@HOSTNAME@", LOAD = -2
svg3            NODENAME = "@RMTNAME@", LOAD = -2
svg4            NODENAME = "@RMTNAME@", LOAD = -2


*SERVER
svr2            SVGNAME = svg1

*SERVICE
TOUPPER         SVRNAME = svr2

*GATEWAY
gw1             GWTYPE = TMAXNONTX, PORTNO = 7788,
                RGWADDR = "@GATENAME@",
                RGWPORTNO = 6688,
                NODENAME = @HOSTNAME@,
                CPC = 2, LOAD = -2
gw2             GWTYPE = TMAXNONTX, PORTNO = 7788,
                RGWADDR = "@GATENAME2@",
                RGWPORTNO = 6688,
                NODENAME = @RMTNAME@,
                CPC = 2, LOAD = -2

위의 예제를 보면, 클라이언트가 HOSTNAME으로 접속하여 TOUPPER 서비스를 호출했을 경우, svg2, gw1, svg1에 속한 서버가 1:1:1로 처리한다. 만약 svg1에 속한 서버에 장애가 발생했을 경우 svg2, gw1이 1:1로 처리를 하며, svg2와 gw1 모두 장애가 발생했을 경우에는 COUSIN에 속해있는 다른 노드의 서버 그룹이 처리한다. RMTNAME으로 접속한 경우, svg3, svg4, gw2에 속한 서버가 1:1:1로 처리한다.

주의

도메인 게이트웨이의 로컬 우선 처리 부하 분산 기능은 비트랜잭션 게이트웨이에 한해서만 지원한다.

3.2.7. ROUTING 절

ROUTING 절은 한 도메인 안에서 노드 사이에, 또는 멀티 도메인 환경에서 도메인 사이에 데이터에 따른 라우팅 환경을 설정하기 위해서 필요한 절이다. 자세한 내용은 “3.5. 부하 조절 환경설정”의 "데이터에 따른 부하 조절"을 참고한다.

3.2.8. RQ 절

RQ 절도 ROUTING 절과 같이 선택적으로 정의하는 절이다. 자세한 내용은 “3.6. 신뢰성 큐 환경설정”을 참고한다.

3.2.9. HMS 절

HMS 절도 ROUTING 절과 같이 선택적으로 정의하는 절이다. 자세한 내용은 “3.7. HMS 환경설정”를 참고한다.

3.2.10. 기본 환경설정의 예

다음은 기본적인 Tmax 환경 파일의 예이다.

*DOMAIN
res             SHMKEY = 77990, MAXUSER = 300, MINCLH = 3,
                MAXCLH = 5, TPORTNO = 8899, BLOCKTIME = 60
*NODE
tmax1           TMAXDIR = "/home/tmax", 
                APPDIR = "/home/tmax/appbin",
                PATHDIR = "/home/tmax/path", 
                SLOGDIR = "/home/tmax/slog",
                ULOGDIR = "/home/tmax/ulog", 
                ENVFILE = svr_env
tmax2           TMAXDIR = "/system/tmax", 
                APPDIR = "/system/tmax/server",
                SLOGDIR = "/system/tmax/slog", 
                ULOGDIR = "/system/tmax/ulog",
                ENVFILE = app_env
*SVRGROUP
svg1            NODENAME = tmax1
svg2            NODENAME = tmax2
svg3            NODENAME = tmax2, cousin = svg4
svg4            NODENAME = tmax2
*SERVER
svr1            SVGNAME = svg1, CLOPT="-e err1 -- apple", MIN = 3, MAX = 5
svr2            SVGNAME = svg2, MIN = 4, MAX = 5
svr3            SVGNAME = svg3,
                CLOPT = "-e $(SVR).$(DATE).err –o 
                $(SVR).$(DATE).out"
*SERVICE
svc1            SVRNAME = svr1, PRIO = 100, SVCTIME = 40
svc2            SVRNAME = svr2
svc3            SVRNAME = svr3

3.3. 데이터베이스 환경설정

데이터베이스에 연관된 서비스를 제공하는 경우, 환경 파일에 데이터베이스 정보를 등록할 수 있다. 데이터베이스 정보를 등록하여 애플리케이션에서 처리하는 데이터베이스 open/close 등 리소스 매니저와의 연결 및 해제가 Tmax 시스템에 의해서 관리되며, 분산 트랜잭션 처리도 가능하다.

데이터베이스 환경설정에서 서버 그룹은 중요한 의미를 갖는다. 서버 프로세스들이 존재하는 노드도 서버 그룹을 형성하는 요소가 되지만, 동일한 노드에 존재하는 서버 프로세스일지라도 사용하는 데이터베이스의 종류에 따라 서버 그룹이 구분된다.

한 서버 그룹 내의 서버 프로세스들은 반드시 동일한 DBMS를 사용해야 한다. 만일 사용하는 DBMS가 다르다면 같은 서버 그룹이 될 수 없다. 서버 그룹은 데이터베이스 관리의 기본 단위가 된다.

데이터베이스 관리를 위해서는 TMS(Transaction Management Server)라는 Tmax 기능 프로세스가 필요하다. TMS 프로세스는 데이터베이스 관리가 필요할 경우, 서버 그룹별로 기동되어 각 서버 그룹의 데이터베이스 관리와 트랜잭션 처리를 담당하는 서버 프로세스이다. 트랜잭션 처리를 담당하는 TMS 프로세스의 기능에 대해서는 “3.4. 분산 트랜잭션 환경설정”을 참고한다.

[그림 3.7] 데이터베이스 관리를 위한 TMS 프로세스

데이터베이스 관리를 위한 TMS 프로세스

데이터베이스 정보 등록을 위한 환경설정은 모두 SVRGROUP 절에서 설정한다.

3.3.1. SVRGROUP 절

Tmax의 데이터베이스 관리 기능을 제공받기 위해서는 서버 그룹이 사용하는 데이터베이스의 open/close 정보와 그 서버 그룹과 관련된 TMS 프로세스에 대한 정보가 필요하다.

데이터베이스 환경설정과 관련하여 SVRGROUP 절에 정의하는 항목은 다음과 같다.

*SVRGROUP
SVRGROUP Name      [DBNAME = DBMS-name,] 
                   [OPENINFO = DBMS-open-information,]
                   [CLOSEINFO = DBMS-close-information,]
                   [TMSNAME = TMS-process-name,]
                   [MINTMS = TMS-process-min-number,]
                   [MAXTMS = TMS-process-max-number]

  • DBNAME = string

    • 크기 : 63자 이내

    • 사용하는 DBMS명을 기술한다. 사용되는 값은 Oracle, Informix, Sybase 등의 DBMS명이다.

  • OPENINFO = string

    • 크기 : 255자 이내

    • 서버 그룹과 관련된 데이터베이스 정보를 등록하는 항목이다.

    • 같은 리소스 매니저 즉, 같은 데이터베이스를 사용하는 경우 한 서버 그룹으로 관리하면 리소스의 효율을 높이고 분산 트랜잭션 처리를 할 수 있다.

      OPENINFO 형식은 리소스 매니저를 제공하는 벤더(Oracle이나 Informix 등 데이터베이스)의 종류에 따라 다르다. 그 외 다른 데이터베이스는 해당 데이터베이스의 안내서를 참고해서 등록한다.

      • Oracle 데이터베이스

        OPENINFO="Oracle_XA+Acc=P/scott/tiger+SesTm=60" 

        "Oracle_XA"는 Oracle 데이터베이스, XA 인터페이스를 의미하며, "Acc=P/scott/tiger" 부분은 Oracle 데이터베이스에 접근하기 위한 계정과 암호를 뜻한다.

      • Informix 데이터베이스

        Informix 데이터베이스의 OPENINFO의 값은 단순히 데이터베이스명만 요구하므로 Oracle과 같이 복잡하지 않다.

        OPENINFO= Database Name 

  • CLOSEINFO = literal (NULL)

    • 크기 : 255자 이내

    • 기본값 : NULL

    • CLOSEINFO 항목은 리소스 매니저가 데이터베이스를 close할 때 필요한 정보를 지정한다.

    • 보통 생략되거나 NULL로 정의된다. Informix 데이터베이스에서는 반드시 널 문자열("")로 지정해야 하며, Oracle 데이터베이스에서는 생략해도 된다.

      <Oracle을 사용하는 서버 그룹의 예>

      *SVRGROUP
      svg1           NODENAME = tmax1,
                     DBNAME = ORACLE,
                     OPENINFO = "Oracle_XA+Acc = P/scott/tiger+SesTm= 60"

      <Informix를 사용하는 서버 그룹의 예>

      *SVRGROUP
      svg2           NODENAME = tmax2,
                     DBNAME = INFORMIX,
                     OPENINFO = "test",
                     CLOSEINFO = ''''
  • TMSNAME = string

    • 크기 : 15자 이내

    • TMSNAME은 해당 서버 그룹의 데이터베이스 관리를 담당할 TMS 프로세스명을 정의한다.

    • 데이터베이스의 open 정보(OPENINFO 항목)를 등록한 경우에는 반드시 TMSNAME에 대한 정의가 필요하다. TMS 프로세스는 데이터베이스와 관련된 시스템에서 해당 서버 그룹의 데이터베이스 관리를 담당하기 위하여 반드시 필요하다. 그러므로 Tmax 시스템에서 데이터베이스를 관리하도록 하기 위해서는 데이터베이스의 open/close 정보를 등록하고, 서버 그룹별로 반드시 TMSNAME을 정의하여 TMS 프로세스를 기동시켜야 한다. TMS 프로세스는 데이터베이스와 연동하는 XA로 업무를 처리하는 트랜잭션 매니저이다. 이 프로세스는 "$TMAXDIR/lib"에 있는 <libtms.a>와 SVRGROUP 절에 있는 DBNAME의 데이터베이스 라이브러리를 연결하여 생성된다.

  • MINTMS = numeric

    • 범위 : 1 ~ 32

    • 기본값 : 2

    • 해당 서버 그룹의 TMS 프로세스 기동 개수를 정의한다. TMS 개수는 데이터베이스 관리보다는 트랜잭션 관리에 영향을 주는 요소이다. 기본값으로 서버 그룹당 2개가 기동되는데, 데이터베이스 관리만을 원할 경우 1,2개의 TMS로 충분히 관리가 가능하다.

3.3.2. 데이터베이스 환경설정의 예

다음은 기본적인 환경설정에 데이터베이스 환경설정 내용이 추가된 Tmax 환경 파일의 예이다.

*DOMAIN
res       SHMKEY = 77990, MAXUSER = 300 , MINCLH = 3 ,
          MAXCLH = 5 , TPORTNO = 8899, BLOCKTIME = 60

*NODE
tmax1     TMAXDIR = "/home/tmax" , 
          APPDIR = "/home/tmax/appbin",
          PATHDIR = "/home/tmax/path",
          SLOGDIR = "/home/tmax/slog",
          ULOGDIR = "/home/tmax/ulog",
          TLOGDIR = "/home/tmax/tlog"
tmax2     TMAXDIR = "/system/tmax",
          APPDIR = "/system/tmax/server",
          SLOGDIR = "/system/tmax/slog",
          ULOGDIR = "/system/tmax/ulog",
          TLOGDIR = "/system/tmax/tlog",
          ENVFILE = app_env

*SVRGROUP
svg1      NODENAME = tmax1, DBNAME = ORACLE,
          OPENINFO = "Oracle_XA+Acc=P/scott/tiger+SesTm=60",
          TMSNAME = ora_ tms, MINTMS = 3, MAXTMS = 5
svg2      NODENAME = tmax2, DBNAME = INFORMIX,
          OPENINFO = "infodb",TMSNAME = info_tms, CLOSEINFO = ""

*SERVER
svr1      SVGNAME = svg1 , CLOPT="-e err1 -- apple", MIN = 3,
          MAX = 5
svr2      SVGNAME = svg2 , MIN = 4 , MAX = 5
svr3      SVGNAME = svg2, 
          CLOPT = "-e $(SVR).$(DATE).err –o
          $(SVR).$(DATE).out"

*SERVICE
svc1      SVRNAME = svr1 , PRIO=100, SVCTIME = 40
svc2      SVRNAME = svr2
svc3      SVRNAME = svr3

3.4. 분산 트랜잭션 환경설정

분산 트랜잭션 처리는 TP(Transaction Processing) 모니터의 주요기능 중 하나이다. 분산 트랜잭션 처리란 하나 이상의 이기종 데이터베이스 시스템과 관련된 여러 개의 트랜잭션을 하나의 글로벌 트랜잭션(Global Transaction)으로 묶어서 처리하는 것을 말한다. 이러한 분산 트랜잭션 기능을 제공받고자 할 경우 기본적으로 데이터베이스 환경설정이 필요하다. 분산 트랜잭션 처리를 위해서는 각 서버 그룹별로 TMS 프로세스가 기동되어 다음과 같은 구조를 형성한다.

[그림 3.8] 분산 트랜잭션 처리 환경

분산 트랜잭션 처리 환경

CLH는 분산 트랜잭션과 관련된 서비스 요청을 받을 경우에는 서비스별로 하위 트랜잭션의 Commit / Rollback 여부를 관리한다. 따라서 하나의 분산 트랜잭션과 관련된 하위 트랜잭션들이 모두 Commit이 가능할 때 그 분산 트랜잭션을 Commit 처리하고, 하나라도 Rollback 처리되는 경우 전체를 Rollback 처리하여 분산 트랜잭션을 지원한다.

실질적으로 데이터베이스를 갱신(Update)하는 Commit, Rollback 처리는 각 서버 그룹의 TMS 프로세스가 담당한다. 분산 트랜잭션을 위한 환경설정은 DOMAIN, NODE, SVRGROUP 절을 통해 이루어진다.

3.4.1. DOMAIN 절

DOMAIN 절에는 분산 트랜잭션과 관련하여 2PC(Two Phase Commit) 가능 여부와 트랜잭션 타임아웃 시간을 설정할 수 있다.

데이터베이스 환경설정과 관련하여 DOMAIN 절에 정의하는 항목들은 다음과 같다.

*DOMAIN
Domain Name     [CMTRET = (Y) | N,]        
                [TXTIME = transaction-timeout-value]
  • CMTRET = Y | N

    • 기본값 : Y

    • 2PC(Two Phase Commit) 여부를 결정한다. 2PC란, 준비(Prepare)와 실행(Commit / Rollback)의 2단계로 트랜잭션을 처리하는 것을 말하며, Tmax에서는 분산 트랜잭션 구현을 위한 2PC를 지원한다.

      • 1단계(Prepare) : 하나의 트랜잭션과 관련하여 각각의 데이터의 관리 서버들에게 해당 트랜잭션의 정상 처리 여부(Commit / Rollback)를 확인한다.

      • 2단계(Commit / Rollback) : 1단계의 결과를 토대로 관련된 모든 트랜잭션이 정상 처리되면 Commit, 하나라도 불가능하면 Rollback한다.

      [그림 3.9] 2PC의 처리 과정

      2PC의 처리 과정

      Tmax에서는 2PC에 대하여 2가지 방법을 지원한다. 1, 2단계를 거쳐 Commit하고 Rollback에 대한 완전한 로깅(logging)이 이루어진 후 서비스를 반환(complete return)한다. 보다 빠른 처리를 위하여 2단계에서 Commit / Rollback 명령만 지시하고 서비스를 반환하는 것이며 시스템 환경에 따라 선택적으로 지정 가능하다.

    • CMTRET 항목은 complete return에 대한 내용을 결정한다.

      설정값설명
      Ycomplete return을 의미한다.
      N빠른 처리를 위하여 Commit / Rollback 명령 후에 즉시 서비스를 반환한다.
  • TXTIME = numeric

    • 범위 : 0 ~ MAX_INT

    • 기본값 : 0

    • 트랜잭션 처리 제한시간을 결정한다. tx_begin()의 트랜잭션 시작에서부터 tx_commit()이나 tx_rollback()으로 트랜잭션이 끝날 때까지의 시간으로, TXTIME이 지나면 자동으로 Rollback 처리된다.

3.4.2. NODE 절

NODE 절에서는 분산 트랜잭션 환경설정과 관련하여, 각 노드의 트랜잭션 처리 기록(logging)에 사용되는 파일을 정의할 수 있다.

데이터베이스 환경설정과 관련하여 NODE 절에 정의하는 항목들은 다음과 같다.

*NODE
Node Name    [TLOGDIR = transaction-log-path]
  • TLOGDIR = literal

    • 크기 : 255자 이내

    • 기본값 : TMAXDIR

    • 트랜잭션을 처리할 때 장애가 발생하면 복구를 위해 트랜잭션 처리에 대한 기록(logging)이 필요하다. TLOGDIR은 트랜잭션 정보가 저장될 파일을 지정한다.

      로그 파일은 일반 파일로 저장된다. Tmax는 로그 파일을 저장할 때 raw 파일을 지원하지 않는다. 트랜잭션 처리가 많지 않은 경우에는 TLOGDIR에 정의된 일반 파일을 사용하고 임의의 파일명을 정의한다. 반대로 트랜잭션 처리가 많은 경우에는 응답시간을 단축시키기 위해 UNIX 파일 시스템을 거치지 않고, 정의된 raw 파일을 사용하여 TLOGDIR에 device명을 직접 디스크에 기록하며, 여기에 정의된 device는 트랜잭션 기록(logging)을 위해서만 사용한다.

    주의

    정의된 경로는 사용 중인 시스템에 이미 있는 것이어야 한다.

사용 예제

TLOGDIR 경로의 로그 파일은 일반 사용자들이 읽지 못하는 이진(binary) 형태로 저장되어 있다. 트랜잭션과 관련된 데이터베이스 로그는 SVRGROUP 절의 OPENINFO에 있는 trace flag를 정의하여 저장할 수 있다.

TLOGDIR = "/home/tmax/log/tlog" 

/tmp 디렉터리의 <xa_NULLmmdd.trc> 파일에 다음과 같이 작성한다.

OPENINFO = "Oracle_XA+Acc=P/scott/tiger+SesTm = 60, DbgFl = 0x01 + LogDir=/tmp"

3.4.3. SVRGROUP 절

SVRGROUP 절에서는 데이터베이스의 환경설정이 이루어진다. 설정 항목 중 MINTMS와 MAXTMS는 트랜잭션 처리와 관련되어 있으므로 주의하여 설정한다. 설정 항목에 대한 자세한 내용은 “3.3. 데이터베이스 환경설정”을 참고한다.

SVRGROUP 절의 기본 환경설정 형식은 다음과 같이 정의한다.

*SVRGROUP
SVRGROUP Name       [DBNAME = name-of-database,]
                    [OPENINFO = string,]
                    [CLOSEINFO = string,]
                    [TMSNAME = name-of-tms,]
                    [MINTMS = numeric,]
                    [MAXRSTART = numeric,]
                    [MAXTMS = numeric]                    
  • DBNAME = string

    • 사용하는 데이터베이스명을 설정한다.

  • OPENINFO = literal

    • 데이터베이스의 open 정보를 등록한다.

  • CLOSEINFO = literal

    • 기본값 : NULL

    • 데이터베이스의 close 정보를 등록한다.

  • TMSNAME = string

    • TMS 프로세스명을 설정한다.

  • MINTMS = numeric

    • TMS 프로세스의 최소 개수이다.

    • 데이터베이스 관리만을 위해서는 TMS 프로세스 개수가 중요하지 않지만, 트랜잭션을 처리할 때는 매우 중요하다. 단순히 1,2개로 TMS 프로세스 개수가 고정되어 있다면, 트랜잭션 처리량이 많은 서버 그룹의 경우 Commit / Rollback 처리에 상당한 부하를 초래할 수 있다. 따라서 처리 속도와 리소스 관리를 위해 적절한 개수의 TMS를 기동시키는 것이 중요하다.

  • MAXRSTART = numeric

    • SVRGROUP 절에 설정되었을 경우 TMS 또는 RQ의 MAXRSTART를 의미한다.

  • MAXTMS = numeric

    • TMS 프로세스의 최대 개수로 적으로 더 기동시킬 수 있는 TMS 프로세스의 개수를 정의한다. 트랜잭션 처리량이 많아질 경우, MAXTMS 개수가 넘지 않는 범위 내에서 TMS 프로세스를 더 기동시킬 수 있다.

사용 예제

다음은 분산 트랜잭션 환경설정과 관련된 Tmax 환경 파일의 예이다.

*DOMAIN
res       SHMKEY = 77990, MAXUSER = 300 , MINCLH = 3 ,
          MAXCLH = 5 , TPORTNO = 8899 , BLOCKTIME = 60 ,
          CMTRET = N , TXTIME = 50

*NODE
tmax1     TMAXDIR = "/home/tmax", 
          APPDIR = "/home/tmax/appbin",
          PATHDIR = "/home/tmax/path", 
          SLOGDIR = "/home/tmax/log/slog",
          ULOGDIR = "/home/tmax/log/ulog", 
          TLOGDIR = "/home/tmax/log/tlog "
tmax2     TMAXDIR = "/system/tmax", 
          APPDIR = "/system/tmax/server",
          SLOGDIR = "/system/tmax/slog", 
          ULOGDIR = "/system/tmax/ulog",
          TLOGDIR = "/system/tmax/log/tlog"

*SVRGROUP
svg1      NODENAME = tmax1, DBNAME = ORACLE ,
          OPENINFO = "Oracle_XA+Acc=P/scott/tiger+SesTm=60, 
          DbgFl=0x01 + LogDir=/tmp",
          TMSNAME = ora_tms, MINTMS = 3, MAXTMS = 5
svg2      NODENAME = tmax2, DBNAME = INFORMIX,
          OPENINFO = "infodb", CLOSEINFO = "",
          TMSNAME = info_tms, MINTMS = 3, MAXTMS = 5
svg3      NODENAME = tmax2

*SERVER
svr1      SVGNAME = svg1, CLOPT = "-e err1 -- apple", MIN = 3, MAX = 5
svr2      SVGNAME = svg2, MIN = 4, MAX = 5,
          CLOPT = "-e $(SVR).$(PID).err –o $(SVR).$(PID).out"
svr3      SVGNAME = svg3
          CLOPT = "-e $(SVR).$(DATE).err –o $(SVR).$(DATE).out"

*SERVICE
svc1      SVRNAME = svr1, PRIO = 100, SVCTIME = 40
svr2      SVRNAME = svr2
svc3      SVRNAME = svr3

3.5. 부하 조절 환경설정

클라이언트의 서비스 요구가 집중될 경우, 최적의 시스템 성능과 자원 활용을 보장할 수 있다. 부하 조절에는 다음의 3가지 방법이 있다. 각 환경설정 파일의 항목을 설명할 때 본 절에서 언급하지 않은 항목은 “3.2. 기본 환경설정”을 참고한다.

  • 시스템 성능에 따른 부하 조절(System Load Management : SLM)

    노드의 성능이나 시스템 상황에 따라 노드별로 서비스 처리량을 조절하는 것이다.

  • 데이터에 따른 부하 조절(Data Dependent Routing : DDR)

    데이터의 범위에 따라 노드별로 서비스를 나누어 처리하는 것이다.

  • 동적 부하 조절(Dynamic Load Balancing : DLM)

    특정 노드에 부하가 집중되는 경우 부하를 분산하여 전체 시스템의 처리량을 극대화하는 것이다.

3.5.1. 시스템 성능에 따른 부하 조절

노드의 성능이나 시스템 상황에 따라 노드별로 서비스 처리량을 다르게 한다. 부하 조절이 가능하기 위해서는 한 서비스가 여러 노드에서 지원되어야 한다. 시스템 로드는 서버 그룹별로 설정된다.

[그림 3.10] 시스템 로드에 따른 부하 조절

시스템 로드에 따른 부하 조절

SVRGROUP 절

시스템 성능에 따른 부하 조절 환경설정과 관련하여 SVRGROUP 절에 정의하는 항목은 다음과 같다.

*SVRGROUP
SVRGROUP Name             [COUSIN = group-name,]
                          [LOAD = load-value]
  • COUSIN = literal

    • 크기 : 255자 이내

    • 2개 이상의 노드에서 부하 조절 기능을 사용하는 경우에 서버 그룹명을 지정하는 항목이다.

    • 각 서버 그룹명은 SVRGROUP 절에 등록되어야 한다. 기본적으로 Tmax 시스템의 부하 조절 기능은 서버 그룹 단위로 이루어진다. 그러나 부하 조절이 다수의 노드에 걸쳐 이루어지는 경우 해당 노드명은 각각의 서버 그룹에 다르게 설정되어야 하며 노드명은 반드시 환경 파일의 NODE 절에 등록된 것이어야 한다.

      다수의 서버 그룹을 정의할 경우는 콤마(,)로 분리하여 정의한다. 각 노드의 APPDIR에는 필요한 서버 프로그램이 존재해야 한다. 노드의 성능에 따라 부하 조절을 할 필요가 있을 경우에는 각 서버 그룹에 부하 조절을 위한 LOAD 값을 설정해야 한다.

  • LOAD = numeric

    • 범위 : -1 ~ MAX_INT

    • 기본값 : 1

    • 서버 그룹의 서비스 처리 능력을 의미한다. 값이 클수록 처리 능력이 높음을 나타낸다.

    • 서비스 처리 능력이 탁월한 노드에 대해서는 LOAD 값을 크게 설정하며, 반대로 노드의 성능이 저하된다면 LOAD 값을 작게 설정해야 한다.

      시스템 로드에 따른 부하 조절을 원한다면 COUSIN 항목 설정으로 서버 그룹을 복사한 후 각각의 서버 그룹에 적절한 LOAD 값을 설정하면 된다. 노드별 분산처리를 원하지 않는다면 LOAD 값을 -1로 설정하면 된다. 자동 부하분산은 LOAD 값을 설정하지 않거나 0으로 설정하면 되며 시스템 부하에 따라 자동적으로 서비스 요청이 분산된다.

사용 예제

다음은 SVRGROUP 복사를 위한 Tmax 환경 파일 설정의 예제이다.

  • SVRGROUP 복사를 위한 멀티 노드에서의 Tmax 환경 파일

    *DOMAIN
    site1     SHMKEY = 77990, MAXUSER = 400,
              MAXCLH = 5, TPORTNO = 8899, BLOCKTIME = 60,
              CMTRET = N, TXTIME = 50
    
    *NODE
    NODE1     TMAXDIR = "/home/tmax", 
              APPDIR = "/home/tmax/appbin",
              PATHDIR = "/home/tmax/path", 
              SLOGDIR = "/home/tmax/log/slog",
              ULOGDIR = "/home/tmax/log/ulog", 
              TLOGDIR = "/home/tmax/log/tlog " 
    NODE2     TMAXDIR = "/system/tmax", 
              APPDIR = "/system/tmax/appbin",
              SLOGDIR = "/system/tmax/log/slog", 
              ULOGDIR = "/system/tmax/log/ulog",
              TLOGDIR = "/system/tmax/log/tlog"
    NODE3     TMAXDIR = "/system/tmax", 
              APPDIR = "/system/tmax/appbin",
              SLOGDIR = "/system/tmax/log/slog", 
              ULOGDIR = "/system/tmax/log/ulog",
              TLOGDIR = "/system/tmax/log/tlog"
    
    *SVRGROUP
    SVG1      NODENAME = NODE1, COUSIN = "SVG2,SVG3"……..(1)
              LOAD = 3 , DBNAME = ORACLE,
              OPENINFO ="ORACLE_XA+Acc=P/scott/tiger+SesTm=60",
              TMSNAME = tms1, MINTMS = 3
    SVG2      NODENAME = NODE2, ……(2)
              LOAD = 2
    SVG3      NODENAME = NODE3, ……(3)
              LOAD = 1, DBNAME = INFORMIX ,
              OPENINFO = "infodb", CLOSEINFO = "",
              TMSNAME = tms2
              ......
    
    *SERVER
    SVR1      SVGNAME = SVG1, MIN = 5 , MAX = 10
    SVR2      SVGNAME = SVG1
              ......
    
    *SERVICE
    SVC_A     SVRNAME = SVR1
    SVC_B     SVRNAME = SVR1
    SVC_C     SVRNMAE = SVR2
  • SVRGROUP 복사를 위한 단일 노드에서의 Tmax 환경 파일

    *DOMAIN
    site1     SHMKEY = 77990, MAXUSER = 400,
              MAXCLH = 5, TPORTNO = 8899, BLOCKTIME = 60,
              CMTRET = N, TXTIME = 50
    
    *NODE
    NODE1     TMAXDIR = "/home/tmax", 
              APPDIR = "/home/tmax/appbin",
              PATHDIR = "/home/tmax/path", 
              SLOGDIR = "/home/tmax/log/slog",
              ULOGDIR = "/home/tmax/log/ulog", 
              TLOGDIR = "/home/tmax/log/tlog "
    
    *SVRGROUP
    SVG1      NODENAME = NODE1, COUSIN = "SVG2"
              LOAD = 3 , DBNAME = ORACLE,
              OPENINFO ="ORACLE_XA+Acc=P/scott/tiger+SesTm=60",
              TMSNAME = tms1, MINTMS = 3
    SVG2      NODENAME = NODE1, LOAD = 2
         ......
    
    *SERVER
    SVR1      SVGNAME = SVG1, MIN = 5 , MAX = 10
    SVR2      SVGNAME = SVG1
              ......
    
    *SERVICE
    SVC_A     SVRNAME = SVR1
    SVC_B     SVRNAME = SVR1
    SVC_C     SVRNMAE = SVR2

3.5.2. 데이터값에 따른 부하 조절

Tmax 시스템에서는 데이터값에 따라 부하 조절 기능을 제공한다. 데이터값에 따른 부하 조절(Data Dependent Routing: 이하 DDR)이란 데이터의 범위에 따라서 서비스가 처리될 서버 그룹을 다르게 지정하여 분산처리 및 부하 조절이 이루어지도록 하는 것이다.

라우팅은 STRUCT, STRING, CARRAY 형 버퍼나 FIELD 형 버퍼를 사용하는 서비스에 대해서 지정이 가능하다. 데이터값 의존형 라우팅을 하기 위해서는 SVRGROUP 절에 서버 그룹 환경 복사에 대한 환경설정과 SERVICE 절과 ROUTING 절의 라우팅에 대한 환경설정이 필요하다.

SVRGROUP 절

DDR 환경설정과 관련하여 SVRGROUP 절에 정의하는 항목은 다음과 같다.

* SVRGROUP
SVRGROUP Name             [COUSIN = group-name]
  • COUSIN = literal

    • 크기 : 255자 이내

    • DDR은 라우팅을 원하는 서비스가 다수의 서버 그룹에서 제공되어야 한다. 따라서 COUSIN 항목의 설정에 따라 원래의 SVRGROUP이 다른 노드로 복사되어야 할 필요가 있다. 자세한 내용은 “3.2.3. SVRGROUP 절”에 COUSIN 항목을 참고한다.

SERVICE 절

DDR 환경설정과 관련하여 SERVICE 절에 정의하는 항목은 다음과 같다.

* SERVICE 
SERVICE Name             [ROUTING = routing-name]
  • ROUTING = string

    • 크기 : 15자 이내

    • 라우팅의 논리적 이름을 정의한다.

    • SERVICE 절 내에서 유일해야 하며 이 이름은 아래 설명된 ROUTING 절에도 사용되는 것이다. DDR을 특정 서비스에 응용하기 위해서는 라우팅명이 정의되어야 하며 유형 버퍼명과 라우팅을 원하는 필드 및 그 범위를 서버 그룹명과 함께 정의해야 한다.

ROUTING 절

한 도메인 안에서 노드 사이, 또는 멀티 도메인 환경에서 도메인 사이 DDR은 ROUTING 절에 정의된 유형 버퍼의 특정 필드값 혹은 멤버값에 의해 이루어진다.

도메인 내의 노드 사이 DDR의 경우 SERVICE 절에서 정의한 "ROUTING Name"을 통하여 이루어지며 ROUTING 절에는 사용자가 원하는 조건을 기술한다. ROUTING 절에는 "ROUTING Name"과 더불어 STRUCT, STRING, CARRAY 형 버퍼나 FIELD 형 버퍼명을 정의하고 그 버퍼에서 라우팅을 적용할 멤버 혹은 필드와 그 값의 범위를 이를 처리할 서버 그룹명과 함께 정의한다. 멀티 도메인 환경의 DDR의 경우 서버 그룹명 대신 도메인의 게이트웨이명을 지정하면 된다.

ROUTING 절의 형식은 다음과 같다.

* ROUTING
ROUTING Name       FIELD = BufferType/field-name,
                   RANGES = "범위1: Group1, 범위2: Group 2, ....",
                   MATCH = (FIRST)|MULTIPLE
  • ROUTING Name = string

    • 크기 : 15자 이내

    • SERVICE 절의 ROUTING 항목에 정의한 이름이다. 데이터에 따른 부하 조절은 서비스별로 부하 조절이 이루어지므로 반드시 SERVICE 절에 등록된 이름이어야 한다.

  • FIELD = string

    • 크기 : 2000자 이내

    • FIELD에는 각 데이터 타입별로 설정하는 방법이 다르다. 데이터 의존형 라우팅을 적용할 서비스에 대해서 그 서비스가 사용하는 STRUCT, FIELD, STRING, CARRAY 형의 정보를 설정한다.

    • 각 데이터 타입별 형식은 다음과 같다.

      • STRUCT 형 버퍼

        STRUCT 형 버퍼는 사용자가 정의하는 C 구조체로, X/Open에 정의된 X_C_TYPE, X_COMMON 버퍼와 동일하다. 사용자는 미리 해당되는 구조체의 이름과 내용을 선언하여 절차에 따라 Tmax 시스템이 필요로 하는 파일을 제공해야 하며 이 항목에는 다음과 같이 설정한다. Tmax 시스템은 환경변수 SDLFILE을 참조하여 구조체의 내용을 식별한다.

        STRUCT/subtype/fieldname
        항목설명
        subtype구조체의 이름을 지정한다.
        fieldname구조체의 멤버 중 실제로 라우팅을 적용할 멤버를 선택하여 지정한다.
      • FIELD 형 버퍼

        사용자는 미리 FIELD 형 버퍼의 필드 항목과 유형을 정의하여 절차에 따라 Tmax 시스템이 필요로 하는 파일을 제공해야 한다. Tmax 시스템은 환경변수 FDLFILE을 참조하여 필드 버퍼의 내용을 식별한다.

        FIELD 형 버퍼가 사용되었을 경우에는 다음과 같이 설정한다.

        FIELD/fieldname
        항목설명
        fieldname라우팅을 적용할 필드명을 지정한다.
      • STRING, CARRAY 형 버퍼

        STRING과 CARRAY 형의 데이터에 대해서도 DDR을 적용할 수 있도록 지원하고 있다. CARRAY 형일 경우 "CARRAY" 혹은 "CARRAY/offset/length", STRING 형일 경우 "STRING" 혹은 "STRING/offset/length"의 형식으로 설정하면 STRING과 CARRAY 타입에 대한 DDR로 간주하게 된다. DDR은 매칭 타입과 범위 타입의 2가지 방식으로 나눌 수 있다. 매칭 타입과 범위 타입의 차이점은 절 3.5.2. “사용 예제 ”를 통해 설명한다. CARRAY 타입에는 이미지 형태의 데이터가 입력될 수 있는데 반드시 프린트가 가능한 형태의 데이터이어야 한다.

        STRING or STRING/offset/length
        CARRAY or CARRAY/offset/length

        offset과 length에 대한 설명은 다음 항목으로 설명되는 "STRING/CARRAY의 offset", "STRING / CARRAY의 length" 항목을 참고한다.

  • STRING / CARRAY의 offset = numeric(0)

    • 전체 데이터 중 일정 부분만을 DDR에 사용하고자 할 때 사용하는 항목으로, 입력 데이터 중 DDR에 사용하고자 하는 부분의 처음 시작 위치를 나타낸다. offset은 FLDLEN 항목과 함께 지정되어야 하며 입력 데이터의 해당 offset부터 FLDLEN 만큼의 데이터만 DDR될 때 사용된다. 예를 들어 STRING/0/4라고 설정했을 경우 offset은 0, length는 4가 되며 "Tmaxsoft"라는 입력 데이터를 처리하고자 한다면 0번째 위치부터 4Byte 만큼인 "Tmax"라는 문자열만이 DDR의 비교 기준이 된다. 이 항목은 STRING / CARRAY 형의 DDR의 경우만 유효하다.

    • offset과 length을 사용할 때 주의할 점은 매칭 타입일 경우에는 사용해서는 안되며, 범위 타입일 경우에만 사용할 수 있다는 것이다. 이것은 offset과 length는 입력 데이터만을 대상으로 지정하는 항목이며 RANGES 항목에 지정하는 데이터와는 관계가 없기 때문이다.

      아래와 같이 설정되어 있는 경우 "aaaaaaa"라는 문자열의 0 offset부터 4Byte인 "aaaa"라는 문자열만이 DDR될 때 비교 기준이 된다. 입력 데이터의 비교 기준인 "aaaa"와 RANGES에 지정한 "aaaaaaa"는 일치하지 않으므로 SVG2에서 처리하게 된다. 이 경우 어떤 데이터가 들어오더라도 무조건 SVG2에서 처리하게 되므로 주의해야 한다.

      ROUTE_1   FIELD = "STRING/0/4",
                RANGES = "aaaaaaa":SVG1, *:SVG2
    • 범위 타입으로 설정되어 있는 경우에는 offset과 length가 유효하다.

      아래와 같이 설정되어 있는 환경에서 입력 데이터가 "aaaaaaa" 일 경우, 입력 데이터 중 0 offset부터 4Byte 만큼의 "aaaa"만이 비교 기준이 되며, "aaaa"라는 문자열은 SVG1에서 지정한 범위보다 작게 되므로 SVG2에서 처리한다. 입력 데이터가 "bbbb"일 경우 SVG1에서 지정한 범위 안에 속하게 되므로 SVG1에서 처리한다.

      ROUTE_1    FIELD = "STRING/0/4",
                 RANGES = "aaaaaaa"-"ccccccc":SVG1, *:SVG2
  • STRING / CARRAY의 length = numeric

    • offset이 입력 데이터 중 DDR될 때 비교 기준으로 사용하고자 하는 부분의 처음 시작 위치를 나타낸다면 length는 offset 위치부터 지정한 길이만큼을 비교 기준으로 사용하고자 할 때 지정하는 항목으로 반드시 offset과 함께 사용되어야 한다.

    • 지정되지 않을 경우 NULL을 만날 때까지 혹은 메시지의 끝까지 비교하게 된다.

  • RANGES = "범위 : 그룹1, 범위 : 그룹2, ...."

    • 크기 : 2047자 이내

    • RANGES 항목은 FIELD에서 정의한 항목의 값을 기준으로 어디로 라우팅할 것인지에 대한 정보를 설정한다.

    • RANGES 항목의 값 지정 형식은 다음과 같다.

      • 라우팅 필드는 int, short, long, float, double, string, char 형이 지정될 수 있다.

      • 정수나 실수인 경우 하나의 값, 또는 하한값과 상한값으로 이루어진 범위로 표현될 수 있다.

      • 문자열인 경우 매칭 타입일 경우 일치하느냐 일치하지 않느냐만을 처리하며, 범위 타입일 경우 하한값과 상한값으로 이루어진 범위로 표현될 수 있다.

      • 부호(음수, 양수)를 표시할 수 있다.

      • 최솟값을 나타내는 MIN(해당 타입의 최솟값), 최댓값을 뜻하는 MAX(해당 타입의 최댓값)라는 문자를 사용할 수 있다.

      • "A - B" 형식의 범위에서 A는 B보다 크지 않아야 한다.

      • 애스터리스크(*)는 이전의 다른 범위들에 포함되지 않은 임의의 값을 대표하는 와일드 문자로 사용된다. 앞서 정의된 범위 이외의 값이 올라올 경우를 고려해 반드시 애스터리스크(*)에 대한 라우팅 서비스를 정의해야 한다. 단, MIN과 MAX를 모두 정의하였다면 애스터리스크(*)에 대한 정의는 생략할 수 있다.

      • 서버 그룹명은 범위 뒤의 콜론(:) 다음에 지정된다. 사용되는 서버 그룹명은 SVRGROUP 절의 COUSIN 항목에 정의된 서버 그룹명이어야 한다.

      • 전체 문자열은 큰따옴표(" ")로 묶어야 한다.

      • 도메인 사이의 라우팅은 서버 그룹명 대신 도메인 게이트웨이명을 지정해야 한다.

      • 문자열로 라우팅을 할 경우 해당 값은 작은 따옴표(')로 묶여야 한다.

  • MATCH = (FIRST)/MULTIPLE

    • MATCH 항목을 사용하지 않을 경우

      *ROUTING
      rout1    FIELD = "STRING, CARRAY, FIELD/INPUT,
               STRUCT/test/a",
               RANGES = "min-'100':svg1,'101'-'200':svg1_2,min-'100':svg1_3,*:svg1_4"

      위와 같은 환경 파일이 구성되어 있을 경우, 이전 버전에서는 min-100까지의 데이터를 처리하기 위하여, svg1의 서버를 먼저 검사하고, svg1이 속한 노드가 정상적으로 기동되어 있지 않은 경우, 백업을 검사하며, 백업이 기동되어 있지 않거나 존재하지 않으면 클라이언트에게 에러를 보내게 된다. 하지만 현재 버전에서 ROUTING 절에 MATCH 항목을 지정해 주면 새로운 방식으로 동작한다.

    • MATCH 항목을 사용할 경우

      *ROUTING
      rout1    FIELD = "STRING, CARRAY, FIELD/INPUT, 
               STRUCT/test/a",
               RANGES ="min-'100':svg1,'101'-'200':svg1_2, min-'100':svg1_3,*:svg1_4" , 
               MATCH=MULTIPLE

      위와 같은 환경 파일이 구성되어 있을 경우, min-100 까지의 데이터를 처리하기 위하여, svg1의 서버를 먼저 검사하고, svg1이 속한 노드가 기동되어 있지 않을 경우, 백업을 검사한다. 백업이 기동되어 있지 않거나 존재하지 않으면 RANGES에서 다음 번 일치하는 서버 그룹을 찾게 된다. 따라서 svg1_3이 그 대상이 된다. svg1_3이 속한 노드가 살아 있는지 검사하고, svg1_3의 서버 그룹 역시 기동이 되어 있지 않을 경우, svg1_3 서버 그룹의 백업을 검사하며, 백업이 존재하지 않거나 정상적으로 기동되어 있지 않을 경우, 그 다음 일치되는 서버 그룹은 svg1_4가 된다.

      "MATCH=FIRST"로 지정하면 기존과 동일한 방식으로 동작한다.

사용 예제

다음은 DDR의 사용 예제이다.

  • 정수인 경우

    다음은 student 구조체의 number 멤버에 대해서 그 데이터 값이 음수부터 3까지는 서버 그룹 SVG1으로, 4 ~ 6까지는 SVG2로, 7부터는 모두 SVG3으로 라우팅하는 예제이다.

    ROUTE_1        FIELD = "STRUCT/student/number",
                   RANGES = "MIN - 3 : SVG1,  4 - 6 : SVG2,  7 - MAX : 1SVG3"

    다음은 student 구조체의 number 멤버에 대해서 짝수는 서버 그룹 SVG1에서 처리되며 홀수는 SVG2에서 처리되는 예제이다. MOD 연산자를 통해 범위가 결정되므로 사용자의 폭이 훨씬 넓어질 수 있다.

    ROUTE_1        FIELD = "STRUCT/student/number",
                   RANGES = "MOD2 = 0 : SVG1,  MOD2 = 1 : SVG2"
  • FIELD 형 버퍼인 경우

    다음은 FIELD 형 버퍼의 INPUT 필드의 값이 STRING인 경우 서버 그룹 SVG1에서 처리되고 그 외의 경우에는 서버 그룹 SVG2에서 처리되는 예제이다. 도메인 사이에 라우팅을 하는 경우에는 서버 그룹명 대신 도메인 게이트웨이로 지정된 게이트웨이명을 지정해야 한다. 문자열인 경우는 반드시 작은 따옴표(')로 묶어서 표현해야 한다.

    ROUTE_1        FIELD = "FIELD/INPUT",
                   RANGES = "'STRING' : SVG1,  *: SVG2"
  • STRING, CARRAY 형 버퍼인 경우 (매칭 타입)

    다음은 STRING 또는 CARRAY의 값이 'aaa'일 경우에만 그룹 SVG1에서 처리되고 그 외의 경우에는 서버 그룹 SVG2에서 처리되는 예제이다. 매칭 타입의 경우 주의할 점은 유효한 데이터의 길이는 지정해 준 단어와 완전히 일치할 경우에만 해당 범위로 간주하게 된다는 것이다. SVG1의 지정된 문자열이 'aaa'라면 aaa 이외의 문자 즉 aaab, aaacc 등의 문자는 모두 SVG2에서 처리한다.

    ROUTE_1        FIELD = "STRING",
                   RANGES = "'aaa' : SVG1,  *: SVG2"
    ROUTE_2        FIELD = "CARRAY",
                   RANGES = "'aaa' : SVG1,  *: SVG2"
  • STRING, CARRAY 형 버퍼인 경우 (범위 타입)

    다음은 STRING 또는 CARRAY의 값이 'aaa'부터 'ccc'인 경우 서버 그룹 SVG1에서 처리되고 그 외의 경우에는 서버 그룹 SVG2에서 처리되는 예제이다. 범위 타입의 DDR은 매칭 타입과는 달리 지정된 범위의 길이로 한정되지 않고 문자열의 끝까지 검사한다. 따라서 지정해 준 데이터의 길이와는 관계없이 해당 문자열이 해당 범위 안에 속하는지를 검사한다.

    ROUTE_1        FIELD = "STRING",
                   RANGES = "'aaa'-'ccc' : SVG1, *: SVG2"
    ROUTE_2        FIELD = "CARRAY",
                   RANGES = "'aaa'-'ccc' : SVG1, *: SVG2"
  • STRING, CARRAY인 경우 (범위 타입, DDR 비교 길이 설정)

    다음은 입력 데이터 중 0 offset부터 4Byte인 "aaaa" 문자열만을 DDR될 때 비교 기준으로 사용하는 예제이다. 예를 들어 입력 데이터가 "aaaaaaa"라는 문자열일 경우, "aaaa"만이 비교 기준으로 사용된다. "aaaa"는 SVG1에서 지정한 범위보다 작으므로 SVG2에서 처리하게 된다. 입력 데이터가 "bbbbbbb"일 경우 "bbbb"라는 문자열은 SVG1에서 지정한 범위에 속하게 되므로 SVG1에서 처리한다.

    ROUTE_1        FIELD = "STRING/0/4",
                   RANGES = "'aaaaaaa'-'ccccccc':SVG1,*:SVG2",
  • 여러 데이터 타입을 동시에 사용할 경우

    다음은 STRING, CARRAY, FIELD를 동시에 DDR의 비교 기준으로 사용하는 예제이다. 입력 데이터가 1000 이하일 경우 svg1에서, 1001 이상 2000 이하일 경우 svg2에서, 그 외의 경우 svg3에서 처리한다.

    ROUTE_1        FIELD = "STRING/0/4, CARRAY, FIELD/INPUT",
                   RANGES = "min-'1000' : svg1, '1001'-'2000': 
                   svg2, *:svg3"

3.6. 신뢰성 큐 환경설정

클라이언트의 서비스 요구가 집중되어 요구된 서비스를 즉시 처리하지 못하고 내부 큐에 쌓인 상태에서 시스템 오류로 인하여 시스템이 비정상적으로 종료되는 경우, 모든 서비스 요청 데이터는 삭제된다. 이러한 문제점을 보완하기 위하여 서비스 데이터를 메모리가 아닌 디스크 파일에 쌓아 시스템이 정상적으로 시작된 후에 처리를 계속할 수 있도록 환경을 설정하는데 이 경우 사용하는 큐가 신뢰성 큐(RQ)이다.

RQ를 작동하기 위해 기본 환경설정(DOMAIN, NODE, SVRGROUP, SERVER, SERVICE 절) 외에 별도로 RQ 절을 설정해야 한다.

RQ를 사용할 경우 메모리가 아닌 디스크를 이용하기 때문에 서비스를 요구한 데이터는 안전하게 보관되나 RQ를 사용하지 않을 때보다 속도는 저하될 수 있다.

3.6.1. ROUTING Name 절

RQ 환경설정에 따른 SVRGROUP 절에 정의하는 항목은 다음과 같다. RQ는 COUSIN을 지원하지 않는다.

* SVRGROUP
RQ SVRGROUP Name    [NODENAME = node-name,]
                    [CPC = channel-number,]
                    [SVGTYPE = RQMGR]

필수 항목

  • NODENAME = string

    • 크기: 15자 이내

    • RQ 서버 그룹이 존재하는 노드를 정의한다. 사용되는 NODENAME은 NODE 절에서 정의한 노드명이어야 한다.

  • CPC = numeric

    • 범위 : 1 ~ 128

    • 기본값 : 4

    • RQS 프로세스와 CLH 프로세스 사이의 병렬 통신 채널 수를 지정하는 항목이다. 큐의 사용이 빈번할 경우에 다중의 채널을 유지하여 처리 속도를 향상시킬 수 있다.

  • SVGTYPE = string

    • RQ 서버 그룹의 타입을 정의하는 항목으로 RQMGR로 지정한다.

3.6.2. RQ 절

하나의 서버 그룹에 하나의 RQ를 정의하며 여러 개를 그룹으로 지정할 수도 있다.

RQ Name               SVGNAME = rq-svrgroup-name,
                      [QSIZE = size-number,]
                      [FILEPATH = file-path,]
                      [BOOT = WARM | (COLD),]
                      [FSYNC = (Y) | N,]
                      [BUFFERING = (Y) | N]

필수 항목

  • RQ Name = string

    • 크기 : 15자 이내

    • RQ 절의 논리적인 이름이다. RQ 절 내에서 여러 개의 RQ 정의가 가능하며, 각각의 RQ명은 유일한 값이어야 한다. 또한 한 노드에 2개 이상의 RQ를 정의할 수 있다.

  • SVGNAME = string

    • 크기 : 15자 이내

    • RQ를 사용하는 그룹을 지정한다. SVGNAME은 SVRGROUP 절에 등록된 RQ SVRGROUP Name이어야 한다.

선택 항목

  • QSIZE = numeric

    • 범위 : 1 ~ 2047

    • 기본값 : 16 (단위 : Mbyte)

    • Enqueue된 데이터를 저장하는 RQ의 크기를 지정하여 사용할 수 있다.

      RQ의 크기는 자동으로 증가하지 않으므로 RQ가 정의한 크기를 초과하여 에러가 발생하는 것을 막기 위해 적당한 크기로 설정할 것을 권한다. RQ 파일을 작성한 후에도 RQ에 데이터가 저장되지 않으면 Tmax가 종료될 때 파일이 자동으로 삭제된다.

  • FILEPATH = literal

    • 크기 : 255자 이내

    • 기본값 : $(TMAXDIR)/path/rq-name

    • RQ에서 사용되는 파일 위치를 지정한다. 이 필드는 RQ 데이터 파일을 생성하며 전체 파일명과 디렉터리명으로 정의되어야 한다.

  • BOOT = WARM | COLD

    • 기본값 : COLD

    • BOOT 필드는 Tmax 시스템을 재부팅할 때, RQ에 저장된 데이터를 조절한다.

    • 다음은 설정값에 대한 설명이다.

      설정값설명
      WARM시스템 장애복구 후에 큐에 쌓였던 서비스의 복구(정상적 처리)가 가능하다.
      COLDTmax 시스템이 다시 기동될 때 디스크에 저장된 서비스는 처리를 하지 않고 무시한다.
  • FSYNC = Y | N

    • 기본값 : Y

    • 각 디스크에 기록한 후에 fsync의 호출 여부를 지정한다.

    • 다음은 설정값에 대한 설명이다.

      설정값설명
      Y시스템 장애가 발생했을 때 데이터를 잃을 가능성이 있지만 RQ 처리 속도는 빨라진다.
      NRQ 데이터가 메모리를 사용하지 않고 항상 디스크에 안전하게 저장되지만 NO를 설정했을 때보다 처리 속도가 늦어진다.
  • BUFFERING = Y | N

    • 기본값 : Y

    • RQ 파일 내용을 메모리에 캐시(cache)할지 여부를 지정한다.

    • N으로 지정하면 RQ 처리가 상대적으로 느려지나 요구되는 메모리가 작아진다.

3.7. HMS 환경설정

메시징 시스템(Messaging System)이란 송신자(Sender)와 수신자(Receiver) 사이의 느슨한 결합(loosely coupled)을 가능케 하는 통신 매개체이다. 메시징 시스템을 사용하여 송신자와 수신자는 서로에 관한 정보를 알 필요없이 가상적 채널, 즉 Destination에 관한 정보만 가지고 서로 통신을 할 수 있다. 또한 송신하는 시점과 수신하는 시점을 분리할 수 있어 데이터에 대한 지연처리가 가능하며, 이를 위해 메시징 시스템은 메시지의 송,수신에 대한 신뢰성(Reliability)을 보장한다.

HMS(Hybrid Messaging System)를 사용하기 위해서는 DOMAIN, NODE, SVRGROUP, HMS 절에 대한 설정이 필요하다. HMS와 관련한 자세한 사항은 "Tmax HMS User Guide"를 참고한다.

3.7.1. DOMAIN 절

DOMAIN 절의 기본 환경설정 형식은 다음과 같이 정의한다.

*DOMAIN
Domain Name     [MAXSESSION = numeric]         
  • MAXSESSION = numeric

    • 범위 : 1 ~ 65535

    • 기본값 : 1024

    • 도메인 내의 HMS에서 생성할 수 있는 세션 수의 최댓값을 설정한다.

3.7.2. NODE 절

NODE 절의 기본 환경설정 형식은 다음과 같이 정의한다.

*NODE
Node Name      [MAXSESSION = numeric]           
  • MAXSESSION = numeric

    • 범위 : 1 ~ 65535

    • 기본값 : 1024

    • 노드 내의 HMS에서 생성할 수 있는 세션의 수의 최댓값을 설정한다.

3.7.3. SVRGROUP 절

SVRGROUP 절의 기본 환경설정 형식은 다음과 같이 정의한다.

*SVRGROUP
SVRGROUP Name    NODENAME = node-name,
                 SVGTYPE = HMS,
                 HMSNAME = string,
                 OPENINFO = literal,
                 HMSINDEX = numeric,
                 HMSMAXTHR = numeric,
                 HMSMAXDBTHR = numeric,
                 [HMSSUBSCFG = string,]
                 [HMSMSGLIVE = numeric,]
                 [HMSPORT = numeric,]
                 [HMSHEARTBEAT = numeric,]
                 [HMSGQINT = numeric] 

필수항목

  • SVRGROUP Name = string

    • 크기: 15자 이내

    • HMS 서버 그룹에 대한 논리적인 이름으로, SVRGROUP 절 내에서 유일한 이름이어야 한다.

  • NODENAME = string

    • 크기: 15자 이내

    • HMS 서버 그룹이 존재하는 노드를 정의한다. 사용되는 NODENAME은 NODE 절에서 정의한 노드명이어야 한다.

  • SVGTYPE = string

    • 해당 서버 그룹의 종류를 정의한다. HMS를 사용하기 위해서는 반드시 HMS로 설정해야 한다.

  • HMSNAME = string

    • 크기: 15자 이내

    • 사용자가 빌드한 HMS 프로세스명을 정의한다.

  • OPENINFO = literal

    • HMS는 기본적으로 데이터베이스를 스토리지로 사용한다. 따라서 HMS에서 연결을 할 DBMS의 OPENINFO를 설정해 주어야 한다.

    • 데이터베이스로 연결을 초기화하고 각 데이터베이스에서 제공되는 문법으로 정의한다.

  • HMSINDEX = numeric

    • 범위 : 0 ~ 65535

    • HMS의 메시지를 처리하는 데 필요한 설정값으로서 도메인 안에서 유일한 값으로 반드시 설정해야 한다.

  • HMSMAXTHR = numeric

    • 범위 : 0 ~ 65535

    • 스토리지 처리를 하지 않는 thread의 수를 설정한다.

    • 비영속성 메시지만 송,수신하는 경우 이 항목의 값을 크게 늘려주어야 한다. 비영속적 메시지 이외에도 HMS의 기본적 동작을 위해 일정 수 이상 설정해야 한다.

  • HMSMAXDBTHR = numeric

    • 범위 : 0 ~ 65535

    • 스토리지 처리를 하는 thread의 수를 설정한다.

    • 영속적 메시지가 많은 경우 이 값을 늘려줄 필요가 있다. 영속적 메시지 처리 외에도 HMS의 기본적 동작을 위해 일정 수 이상 설정해야 한다.

선택항목

  • HMSSUBSCFG = string

    • 크기 : 255자 이내

    • 영속적 구독자(Durable Subscriber)를 설정한 환경 파일의 경로와 이름을 설정한다.

    • 파일 안의 내용은 LABEL을 [TopicName]으로 설정한 후, 각 라인마다 ClientName:Listener:Selector의 순으로 콜론(:)을 구분자로 구분하여 넣어준다.

    • 환경 파일에 정의된 영속적 구독자는 HMS가 기동되면서 자동으로 등록된다.

  • HMSMSGLIVE = numeric

    • 범위 : 0 ~ 65535 (단위: 시간)

    • HMS는 영속적 메시지를 스토리지에 저장한다. 스토리지에 쌓인 메시지들을 주기적으로 삭제할 시간을 설정한다.

    • 모든 구독자가 수신한 Topic 메시지, 소비가 완료된 큐 메시지는 설정된 시간이 경과되면 스토리지에서 삭제된다. 아직 받지 않은 영속적 수신자가 존재하는 메시지는 설정된 시간이 경과되어도 스토리지에서 삭제되지 않는다.

  • HMSPORT = numeric

    • 다수의 HMS를 클러스터링하는 경우 각 HMS는 서로 통신하기 위해 직접 채널을 생성한다. 이때 사용하는 포트 번호를 설정한다.

    • GLOBAL 속성을 설정한 Destination이 존재하는 경우 HMS는 설정된 포트 번호로 Listen한다. 따라서 이미 사용하고 있는 포트를 설정하지 않도록 주의해야 한다.

  • HMSHEARTBEAT = numeric

    • 범위 : 0 ~ 65535 (단위: 초)

    • 다수의 HMS를 클러스터링하는 경우 HMS 간의 네트워크 장애 감지를 위해 주기적으로 Heartbeat 메시지를 주고받는다. 이 메시지를 전송하는 주기를 설정한다. 이 주기 안에 Hearbeat 메시지가 다른 HMS에서 오지 않은 경우 장애로 감지해 해당 HMS와의 연결을 끊는다.

  • HMSGQINT = numeric

    • 범위 : 0 ~ 65535 (단위: 밀리 초)

    • GLOBAL 속성을 설정한 큐 간의 메시지를 주고받기 위해서는 각 큐의 상태 정보를 주고받아야 하는데, 이 정보를 주고받는 주기를 설정한다.

    • 클러스터링된 큐를 사용하기위해서는 반드시 설정해야 한다. 주기가 짧을수록 정확한 분배가 가능하지만 그만큼 네트워크의 부하는 크므로 적당한 크기의 값을 설정할 필요가 있다.

3.7.4. HMS 절

HMS 절에서 HMS의 Destination에 대한 설정을 한다. 다음은 HMS 절의 기본 환경설정 형식이다.

*HMS
Destination name     SVGNAME = string,
                     TYPE = TOPIC | QUEUE,
                     [BOOT = WARM | (COLD),]
                     [GLOBAL = Y | (N),]
                     [GQTHR = numeric,]
                     [GQMAXREQ = numeric,]
                     [GQFULL = numeric]       

필수항목

  • Destination name = string

    • 크기 : 15자 이내

    • Destination의 이름을 설정한다. 생산자와 소비자는 이 이름을 사용하여 생성된다.

  • SVGNAME = string

    • 크기 : 15자 이내

    • Destination이 존재하게 될 HMS 서버 그룹명을 정의한다. 사용되는 SVGNAME은 SVRGROUP 절에서 정의한 HMS 서버 그룹명이어야 한다.

  • TYPE = TOPIC | QUEUE

    • Destination의 타입을 설정한다. 현재 TOPIC과 QUEUE만 지원한다.

선택항목

  • BOOT = WARM | COLD

    • 기본값 : COLD

    • 해당 Destination에 대해 기동할 때 복구할 메시지가 있을 경우 복구 여부를 설정한다.

    • RQ와 마찬가지로 WARM과 COLD만 설정할 수 있다.

    • 다음은 설정값에 대한 설명이다.

      설정값설명
      WARM스토리지에 있는 처리되지 않은 메시지가 복구된다.
      COLD기동할 때 해당 메시지를 모두 지우고 시작한다.
  • GLOBAL = Y | N

    • 기본값 : N

    • 클러스터링된 HMS의 같은 이름을 갖는 Destination들을 논리적으로 하나의 Destination으로 동작하도록 설정한다.

    • GLOBAL 설정을 하기 위해서는 SVRGROUP 절의 HMS 설정에 HMSPORT가 설정되어 있어야 한다.

    • 큐에 대한 GLOBAL 설정을 하기 위해서는 아래의 추가적인 설정이 필요하다.

  • GQTHR = numeric

    • 범위 : 0 ~ 65535

    • 클러스터링된 큐가 유지하고자 하는 버퍼 크기를 결정하는 계수값을 설정한다.

    • 버퍼의 크기는 소비자의 수 X GQTHR 값이다. 현재 큐의 길이가 버퍼 크기보다 작을 때 나눠줄 메시지가 있는 클러스터링된 다른 큐로부터 메시지를 가져온다. 버퍼의 크기보다 적은 메시지를 가지고 있을 때 메시지 분배 요청을 받으면 메시지를 나누어주지 않는다.

  • GQMAXREQ = numeric

    • 범위 : 1 ~ 65535

    • 클러스터링된 큐가 다른 큐에게 메시지를 요청할 경우 한 번에 요청할 수 있는 메시지의 수를 설정한다. 값이 클 경우 적은 횟수로 필요한 메시지를 채울 수 있지만 너무 클 경우 노드 사이에 불필요한 메시지의 이동이 발생할 수 있으므로 너무 크지 않도록 설정한다.

  • GQFULL = numeric

    • 범위 : 0 ~ 65535

    • 클러스터링된 큐의 메시지 소비가 이루어지지 않거나 메시지가 불균형적으로 너무 많이 쌓일 경우를 대비해 설정한 수 이상의 메시지가 쌓일 경우 그 초과분에 한해 다른 노드의 클러스터링 큐에게 메시지를 균등하게 나누어 준다.

3.8. 장애 대책 환경설정

Tmax에서는 다음과 같은 장애 대책 방법을 제공한다.

  • 하드웨어적 장애 (노드나 네트워크 장애) : 서비스 백업에 의한 장애 대책

  • 소프트웨어적 장애 (프로세스의 다운) : 프로세스의 재기동에 의한 장애 대책

3.8.1. 하드웨어적 장애

장애로 인해 서비스가 불가능할 때 백업 서비스를 통해 계속적인 서비스를 제공할 수 있다. 서비스 백업은 SVRGROUP 절의 BACKUP 항목에 설정한다.

SVRGROUP 절

* SVRGROUP
SVRGROUP Name        [BACKUP = group-name]
  • BACKUP = literal

    • 크기 : 255자 이내

    • 백업 서버 그룹을 지정한다.

    • 하나 이상의 백업 서버 그룹을 지정할 수 있으며, 2개 이상의 백업 서버 그룹을 지정할 때는 콤마(,)로 분리하여 나열한다. 여러 개의 백업 서버를 지정한 경우, 원본 서버 노드에 장애가 발생하는 경우 첫 번째로 지정된 백업 노드가 동작하고, 그 백업 노드도 이상이 생기면 두 번째로 지정된 백업 노드가 동작하는 다중 장애 대책을 지원한다.

    • 백업 노드의 서버 그룹명은 반드시 SVGROUP 절에 등록해야 한다. 또한 서버 그룹과 서버의 환경 옵션은 기본적으로 원본 서버 그룹의 환경을 그대로 따르며, 환경 옵션을 변경하고자 하는 경우 서버 그룹이나 서버별로 관련 항목들을 재정의할 수 있다. 다만, 서비스에 대한 환경 옵션은 이중 복사된 그룹별로 재정의할 수 없으며, 반드시 원본 서버 그룹과 동일한 환경을 갖는다.

      이에 대한 규칙들은 부하 조절을 위해 이중 복사된 서버 그룹과 동일하다. 백업 노드는 부하 조절을 위해 복사된 서버 그룹과 달리, 원본 서버 그룹처럼 Tmax가 기동할 때 동작하는 것이 아니라, 장애가 발생했을 경우에만 원본 서버 그룹의 역할을 대신하여 동작한다.

3.8.2. 소프트웨어적 장애

CLH, CAS 등의 Tmax 내부 프로세스가 비정상 종료되었을 경우, 프로세스가 자동적으로 재기동되어 계속 서비스를 제공하게 된다.

NODE 절

* NODE
NODE Name           [RESTART = (Y) | N,]
                    [MAXRSTART = numeric,]
                    [GPERIOD = time-value]

  • RESTART = Y | N

    • 기본값 : Y

    • Tmax 엔진 프로세스 중 CLH, CAS, CLL, TLM의 재시작 가능 여부를 결정한다.

    • CLH와 CAS, CLL, TLM에 문제가 발생하여 비정상적으로 종료되었을 경우, 재기동하려면 RESTART를 'Y'로 설정한다.

  • MAXRSTART = numeric

    • 범위 : -1 ~ MAX_INT

    • 기본값 : -1

    • Tmax 엔진 프로세스 중 CLH와 CAS 프로세스의 최대 재기동 가능 횟수를 결정한다.

    • GPERIOD 항목과 함께 사용된다.

      RESTART가 'Y'라면 프로세스는 GPERIOD 시간 내에 최대 MAXRSTART 횟수까지 재기동되며 'N'으로 설정되면 시스템은 이 값을 무시한다. MAXRSTART가 –1일 경우 프로세스의 최대 재기동 가능 횟수는 무한이 된다.

  • GPERIOD = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 86400 (24시간) (단위 : 초)

    • MAXRSTART 횟수가 유효한 시간 주기이다.

      GPERIOD 시간 동안 MAXRSTART 횟수까지 프로세스가 재기동된다. 그 시간이 경과하면 GPERIOD 시간 동안 다시 MAXRSTART 횟수만큼 재기동된다.

SVRGROUP 절

* SVRGROUP
SVRGROUP Name      [RESTART = (Y) | N,]
                   [MAXRSTART = numeric,]
                   [GPERIOD = time-value]

  • RESTART, MAXRSTART, GPERIOD

    • SVGTYPE이 RQMGR의 경우에는 해당 RQ의 재기동을, XA svg의 경우에는 해당 TMS의 재기동을 조절한다.

    • RQ와 TMS 프로세스가 비정상적으로 종료되었을 경우, 프로세스가 자동적으로 재기동되어 계속 서비스를 제공하게 된다.

SERVER 절

* SERVER
SERVER Name        [RESTART = (Y) | N,]
                   [MAXRSTART = numeric,]
                   [GPERIOD = time-value]
  • RESTART, MAXRSTART, GPERIOD

    • 서버 프로세스의 재기동 가능 여부를 결정한다.

    • 서버 프로세스가 비정상 종료되었을 경우 프로세스가 자동적으로 재기동되어 계속 서비스를 제공하게 된다.

    • MAXRSTART의 기본값은 5이다.

GATEWAY 절

* GATEWAY
GATEWAY Name       [RESTART = (Y) | N,]
                   [MAXRSTART = numeric,]
                   [GPERIOD = time-value]
  • RESTART, MAXRSTART, GPERIOD

    • 게이트웨이의 재기동 가능 여부를 결정한다.

    • 게이트웨이 프로세스가 비정상 종료되었을 경우, 프로세스가 자동적으로 재기동되어 계속 서비스를 제공하게 된다.

3.9. 보안 환경설정

3.9.1. 단계별 보안설정

Tmax 시스템은 자체적으로 다음과 같은 3단계 보안을 지원한다.

  • 1단계 : 시스템 접속 제어

    Tmax 시스템에 접속하는 것을 제한한다.

  • 2단계 : 사용자 인증

    인증된 사용자만이 서비스를 요청할 수 있다.

  • 3단계 : 서비스 접근 제어

    서비스별 사용자의 접근을 제어할 수 있다.

보안의 각 단계는 이전 단계를 포함한다. 2단계 사용자 인증보안이 설정된 경우에, 1단계 시스템 접속제어 보안도 적용된다.어느 단계의 보안을 설정할 것인지는 DOMAIN 절의 SECURITY 항목에서 결정한다. SECURITY 항목에 정의 가능한 값은 다음과 같다.

DOMAIN 절

* DOMAIN
DOMAIN Name     [SECURITY = ("NO_SECURITY")| "DOMAIN_SEC"|"USER_AUTH",]
                [OWNER = user-name]

  • SECURITY = "NO_SECURITY" | "DOMAIN_SEC" | "USER_AUTH" | "ACL" | "MANDATORY"

    • 기본값 : "NO_SECURITY"

    • 다음은 설정값에 대한 설명이다.

      설정값내용
      NO_SECURITY어떠한 보안 설정도 하지 않겠다는 의미이다.
      DOMAIN_SEC

      단계 보안인 시스템 접속 제어에 대한 보안을 정의한다. 시스템 접속 제어(1단계 보안)로 DOMAIN의 SECURITY 항목에 "DOMAIN_SEC"를 정의한다.

      mkpw를 이용해 Tmax 시스템에 대한 단일 패스워드를 설정하고 패스워드를 알고 있는 사용자에 한해서만 접속을 허락한다. 이 보안을 설정하고자 한다면 DOMAIN 절에 OWNER 항목을 정의해야 한다.

      USER_AUTH2단계 보안인 사용자 인증을 정의한다. 사용자 인증(2단계 보안)으로 DOMAIN의 SECURITY 항목에 "USER_AUTH"를 정의하는 경우에 해당한다. 사용자 계정과 패스워드를 관리하여 인증된 사용자에 한해서만 Tmax 서비스를 제공한다. 사용자와 패스워드는 mkpw로 작성되어야 한다. 사용자는 Tmax 시스템에 접속할 때 TPSTART_T 구조체의 usrname과 usrpwd 항목에 인증 가능한 사용자 계정과 패스워드를 등록하여 접속 신청을 해야 한다. 인증되지 않은 사용자는 Tmax 시스템에 접속할 수 없다.
      ACL, MANDATORY

      3단계 보안인 서비스 접근 제어를 정의한다.

      서비스 접근 제어(3단계 보안)으로 Tmax 시스템에 접속한 사용자들 중에서 서비스별로 사용자 접근을 제한할 수 있는 기능이다. 서비스 접근 권한 제어는 사용자 그룹별로 이루어진다. 하나의 서비스는 그 서비스에 대해 접근 권한이 허용된 그룹에 해당되는 사용자만이 접근이 가능하다. 따라서 이 기능을 사용하기 위해서는 그룹 파일을 만들어 주어야 하며, 해당 그룹에 속하는 사용자 파일이 있어야 한다. 그리고 서비스별 접근 가능한 사용자 그룹을 지정해 주는 acl이라고 불리는 파일도 있어야 한다.

      각 파일을 생성하기 위해서는 각각 mkgrp, mkpw, mkacl를 사용하여야 한다. ACL과 MANDATORY는 동일한 3단계 보안 설정에 해당하지만 아래와 같은 차이점을 가지고 있다.

      설정값내용
      ACLacl 파일에 지정된 서비스는 지정된 하나의 그룹에 속하는 사용자만 접근할 수 있으며, acl에 지정되지 않은 서비스는 Tmax 시스템에 접속되어 있는 모든 사용자가 접근할 수 있다.
      MANDATORYacl 파일에 지정된 서비스는 지정된 하나의 그룹에 속하는 사용자만 접근할 수 있다는 점은 ACL과 동일하나, acl 파일에 지정되지 않은 서비스는 Tmax 시스템에 접속되어 있는 모든 사용자에게 접근이 허용되지 않는다.
  • OWNER = string

    • 크기 : 15자 이내

    • 사용자는 Tmax 시스템에 접속할 때 TPSTART_T 구조체의 dompwd 항목에 이 계정의 패스워드를 입력하여 접속을 신청해야 한다. 패스워드가 등록되지 않았거나 틀린 경우에는 Tmax 시스템 접속에 실패하게 된다. 이 필드에서 정의된 사용자와 패스워드는 mkpw 유틸리티로 작성할 수 있다.

      보안 환경설정을 한 뒤에 패스워드 파일은 mkpw로 작성되어야 한다. 이 파일은 각각의 사용자의 패스워드를 포함한다. 이 파일은 암호화되어 있어 패스워드의 노출이 방지된다. Tmax 보안 시스템을 정상적으로 작동하기 위해서는 Tmax 시스템이 설정되기 전에 패스워드 파일이 작성되어 있어야 한다.

    • DOMAIN_SEC의 경우, 패스워드가 tpstart() 안에 있는 TPSTART_T 구조체의 dompwd 필드의 값과 다르다면 그 클라이언트 프로그램은 서비스를 요청할 수 없다. tperrno는 TPESECURITY(25)로 설정된다. USER_AUTH의 경우, TPSTART_T 구조체의 usrpwd 필드와 usrname 필드는 mkpw로 작성한 패스워드 파일에 등록된 계정과 패스워드가 같아야 한다.

    • 2단계(사용자 인증)는 1단계(시스템 접속 제어)를 포함하므로 dompwd도 설정되어 있어 도메인 패스워드와 일치해야 한다.

      주의

      Tmax 시스템이 기동되기 전에 패스워드 파일이 작성되거나 갱신되어 있어야 한다.

3.9.2. 기타 보안 설정

Tmax에서는 IP를 기준으로 하여 접속을 허용할 클라이언트와 허용하지 않을 클라이언트를 설정할 수 있다. 접속을 허용/거부할 클라이언트의 설정 파일을 각각 tmax.allow, tmax.deny로 작성한다. 해당 파일들을 통하여 CLL에서 TCP/IP 클라이어트의 접근 허용/거부 여부를 선택한다.

IP 기반의 접근 제한 기능

  • 접속 허용 클라이언트 설정

    "$TMAXDIR/path" 디렉터리에 접근 허용 파일(tmax.allow)을 작성하여 접근을 허용할 클라이언트의 IP를 설정한다.

    • IPv4

      192.168.1.43
      192.168.1.48
    • IPv6

      fe80::213:77ff:fe4d:c57d
      fe80::213:77ff:fe4d:c570
  • 접속 거부 클라이언트 설정

    "$TMAXDIR/path" 디렉터리에 접근 거부 파일(tmax.deny)을 작성하여 접근을 거부할 클라이언트의 IP를 설정한다.

    • IPv4

      192.168.1.35
      192.168.1.45
    • IPv6

      fe80::213:77ff:fe4d:c50d
      fe80::213:77ff:fe4d:c500

  • ACL(Access Control List)의 적용 규칙

    • tmax.allow를 먼저 검색한 후 일치하는 ACL이 존재하면 접속을 허용한다.

    • tmax.deny를 검색한 후 일치하는 ACL이 존재하면 접속을 거부한다. 해당 ACL에 속하는 클라이언트 접속을 시도(TPSTART)할 때 TPECLOSE 에러가 발생한다.

    • tmax.allow, tmax.deny 파일에 모두 없으면 접속을 허용한다.

  • 사용 문법

    • 첫 번째 문자가 '#'일 경우 주석으로 처리한다.

    • IP 또는 NETWORK/NETMASK 방식만 허용한다.

      예)

      (IPv4)192.168.1.1 또는 192.168.1.0/24, 
      (IPv6)fe80::213:77ff:fe4d:c57d 또는 fe80::213:77ff:fe4d:c57d/64

    • 한 라인당 하나의 ACCESS CONTROL LIST만 허용하며 공백이나 탭이 허용되지 않는다.

    • ALL은 모든 IP를 의미하는 예약어이다.

    주의

    tmax.allow, tmax.deny 파일은 CLL을 기동할 때 반영된다. 따라서 운영 도중 변경된 파일은 적용되지 않는다.

3.10. 멀티 도메인 환경설정

Tmax에서는 멀티 도메인 환경에서 도메인 사이의 트랜잭션 처리 기능을 제공한다. 사용자에게 글로벌 트랜잭션 처리가 더욱 확장된 형태로 제공되고, 도메인 사이에 같은 애플리케이션으로 데이터값에 따른 라우팅을 지원해서 개발에 대한 부담을 줄여준다.

멀티 도메인 환경을 위해서는 도메인 GATEWAY 절에 게이트웨이 정보를 등록하고, ROUTING 절과 SERVICE 절에는 라우팅 정보를 등록해야 한다. 각 절의 항목에 대한 자세한 설명은 “3.2. 기본 환경설정”을 참고한다.

3.10.1. DOMAIN 절

DOMAIN 절에는 기본적인 내용(Shared Memory Key, Port number, MINCLH, MAXUSER 등)이 등록된다. 분산 트랜잭션과 관련하여 2PC(Two Phase Commit) 가능 여부와 트랜잭션 타임아웃 시간을 설정할 수 있다.

다음은 멀티 도메인 환경설정을 위한 DOMAIN 절의 예이다.

*DOMAIN
site1          SHMKEY = 79990, MAXUSER = 100, MINCLH = 1,
               MAXCLH = 3, TPORTNO = 8888,
               CMTRET = Y, BLOCKTIME = 60,
               DOMAINID = 1

3.10.2. NODE 절

NODE 절에는 각각의 도메인에 속해 있는 같은 노드에 대한 정보를 모두 등록한다.

다음은 멀티 도메인 환경설정을 위한 NODE 절의 예이다.

*NODE
tmax1          TMAXDIR = "/user3/tmax",
               APPDIR = "/user3/tmax/appbin",
               PATHDIR = "/user3/tmax/path",
               TLOGDIR = "/user3/tmax/log/tlog",
               ULOGDIR = "/user3/tmax/log/ulog",
               SLOGDIR = "/user3/tmax/log/slog"

3.10.3. SVRGROUP 절

멀티 도메인 환경에서 각각의 SVRGROUP 절에서는 데이터베이스의 이용 여부에 따라 그룹을 구분하여 등록한다. 도메인 사이의 글로벌 트랜잭션 처리를 위해서는 반드시 XA 그룹으로 서버와 서비스가 묶여 있어야 한다.

다음은 멀티 도메인 환경설정을 위한 SVRGROUP 절의 예이다.

*SVRGROUP
NXAGRP    NODENAME = tmax1
XAGRP     NODENAME = tmax1, DBNAME = ORACLE,
          OPENINFO = "Oracle_XA+Acc=P/scott/tiger+SesTm=80+logdir=.",
          TMSNAME = XAGRP_tms, MINTMS = 2, MAXTMS = 5

3.10.4. SERVER 절

멀티 도메인 환경에서 각각의 SERVER 절에서는 기본적인 내용을 등록한다.

다음은 멀티 도메인 환경설정을 위한 SERVER 절의 예이다.

*SERVER
SVG_X     SVGNAME = XAGRP, MIN = 1, MAX = 2,
          CLOPT = "-o $(SVR).$(DATE).log -- -u scott -p tiger"
          SVG_NX     SVGNAME = NXAGRP, MIN = 1, MAX = 2,
          CLOPT = "-o $(SVR).$(DATE).log"

3.10.5. SERVICE 절

멀티 도메인 환경에서 각각의 SERVICE 절에는 기본적인 내용과 라우팅이 필요한 경우 ROUTING 절의 라우팅명을 지정해야 한다.

다음은 멀티 도메인 환경설정을 위한 SERVICE 절의 예이다.

*SERVICE
SVC_X           SVRNAME = SVG_X, ROUTING = XRID
SVC_NX          SVRNAME = SVG_NX, ROUTING = NXRID

3.10.6. GATEWAY 절

멀티 도메인 환경에서 라우팅이 필요한 경우, 각각의 GATEWAY 절을 반드시 등록하고 필요한 정보들을 기록하여야 한다. RGWADDR와 RGWPORTNO는 반드시 상대편 도메인 서버의 IP 주소와 포트 번호가 되어야 하며 NODENAME은 게이트웨이 프로세스가 수행되어야 할 서버명이다.

다음은 멀티 도메인 환경설정을 위한 GATEWAY 절의 예이다.

*GATEWAY
DOMAIN_GW1     GWTYPE = TMAX, PORTNO = 5000,
               RGWADDR = "192.168.63.133",
               RGWPORTNO = 5000,
               NODENAME = tmax1

3.10.7. ROUTING 절

멀티 도메인 환경에서 라우팅이 필요한 경우 반드시 등록되어야 하며 여기에는 라우팅명, 필드명, SUBTYPE(버퍼 유형)과 라우팅 범위(RANGES)가 반드시 등록되어야 한다.

멀티 도메인 라우팅 환경 파일 예제

<도메인 Site의 환경 파일 예제>

*DOMAIN
site1          SHMKEY = 79990, MAXUSER = 100, MINCLH = 1, MAXCLH = 3,
               TPORTNO = 8888, CMTRET = Y, BLOCKTIME = 60,
               DOMAINID = 1

*NODE
tmax1          TMAXDIR = "/user3/tmax",
               APPDIR = "/user3/tmax/appbin",
               PATHDIR = "/user3/tmax/path",
               TLOGDIR = "/user3/tmax/log/tlog",
               ULOGDIR = "/user3/tmax/log/ulog",
               SLOGDIR = "/user3/tmax/log/slog"

*SVRGROUP
NXAGRP         NODENAME = tmax1
XAGRP          NODENAME = tmax1, DBNAME = ORACLE,
               OPENINFO = "Oracle_XA+Acc=P/scott/tiger + SesTm = 80 + logdir = . " ,
               TMSNAME = XAGRP_tms, MINTMS = 2, MAXTMS = 5

*SERVER
SVG_X          SVGNAME = XAGRP, MIN = 1, MAX = 2,
               CLOPT = "-o $(SVR).$(DATE).log -- -u scott –p tiger"

SVG_NX         SVGNAME = NXAGRP, MIN = 1, MAX = 2,
               CLOPT = "-o $(SVR).$(DATE).log"

*SERVICE
SVC_X          SVRNAME = SVG_X, ROUTING = XRID
SVC_NX         SVRNAME = SVG_NX, ROUTING = NXRID

*GATEWAY
DOMAIN_GW1     GWTYPE = TMAX, PORTNO = 5000,RGWADDR ="192.168.63.133"
               RGWPORTNO = 5000,NODENAME = tmax1

*ROUTING
XRID          FIELD = FIELD/ROUTING_ID,
              RANGES = "'6400':XAGRP, '6471':DOMAIN_GW1"

NXRID         FIELD = FIELD/ROUTING_ID,
              RANGES = "'6400':NXAGRP, '6471':DOMAIN_GW1"
 
*DOMAIN
site2         SHMKEY = 79990, MAXUSER = 100, MINCLH = 1, MAXCLH = 3,
              TPORTNO = 8888, CMTRET = Y, BLOCKTIME = 60,
              DOMAINID = 2
*NODE
tmax2         TMAXDIR = "/user3/tmax",
              APPDIR = "/user3/tmax/appbin",
              PATHDIR = "/user3/tmax/path",
              TLOGDIR = "/user3/tmax/log/tlog",
              ULOGDIR = "/user3/tmax/log/ulog",
              SLOGDIR = "/user3/tmax/log/slog"
*SVRGROUP
NXAGRP        NODENAME = tmax2

XAGRP         NODENAME = tmax2, DBNAME = ORACLE,
              OPENINFO = "Oracle_XA+Acc=P/scott/tiger + SesTm = 80 + logdir = . " ,
              TMSNAME = XAGRP_tms, MINTMS = 2, MAXTMS = 5

*SERVER
SVG_X          SVGNAME = XAGRP, MIN = 1, MAX = 2,
               CLOPT = "-o $(SVR).$(DATE).log -- -u scott –p tiger"

SVG_NX         SVGNAME = NXAGRP, MIN = 1, MAX = 2,
               CLOPT = "-o $(SVR).$(DATE).log"

*SERVICE
SVC_X          SVRNAME = SVG_X, ROUTING = XRID
SVC_NX         SVRNAME = SVG_NX, ROUTING = NXRID

*GATEWAY
DOMAIN_GW2     GWTYPE = TMAX, PORTNO = 5000,RGWADDR = 192.168.63.132",
               RGWPORTNO = 5000,NODENAME = tmax2

*ROUTING
XRID           FIELD = FIELD/ROUTING_ID,
               RANGES = "'6471':XAGRP, '6400':DOMAIN_GW2"
NXRID          FIELD = FIELD/ROUTING_ID,
               RANGES = "'6471':NXAGRP, '6400':DOMAIN_GW2"

< Tmax의 복합적인 기능을 이용한 환경 파일 예제>

*DOMAIN
site1        SHMKEY = 79990, MAXUSER = 100, MINCLH = 1, MAXCLH = 5,
             TPORTNO = 8888, CMTRET = Y, BLOCKTIME = 30

*NODE
tmax1        TMAXDIR = "/tmax/tmax",
             APPDIR = "/tmax/tmax/appbin",
             PATHDIR = "/tmax/tmax/path",
             TLOGDIR = "/tmax/tmax/log/tlog",
             ULOGDIR = "/tmax/tmax/log/ulog",
             SLOGDIR = "/tmax/tmax/log/slog"

tmax2        TMAXDIR = "/tmax/tmax",
             APPDIR = "/tmax/tmax/appbin",
             PATHDIR = "/tmax/tmax/path",
             TLOGDIR = "/tmax/tmax/log/tlog",
             ULOGDIR = "/tmax/tmax/log/ulog",
             SLOGDIR = "/tmax/tmax/log/slog"

*SVRGROUP
SVGtmax1     NODENAME = tmax2, DBNAME = ORACLE,
             COUSIN = "SVGtmax1",
             OPENINFO = "Oracle_XA+Acc=P/scott/tiger + SesTm = 60+DbgFl=0x01",
             TMSNAME = svg1_tms, MINTMS = 2, MAXTMS = 5

SVGtmax2     NODENAME = tmax1, DBNAME = ORACLE,
             OPENINFO = "Oracle_XA+Acc=P/scott/tiger + SesTm = 60+DbgFl=0x01",
            TMSNAME = svg1_tms, MINTMS = 2, MAXTMS = 5

SVGtmax2NX  NODENAME = tmax1
            SVGRQ1     NODENAME = tmax1,
            SVGTYPE = RQMGR, CPC = 8,
            COUSIN = "SVGRQ1", LOAD = -1

*RQ
rq1         SVGNAME = SVGRQ, BOOT = COLD, FILEPATH = "/tmp/rq1"
            QSIZE = 24, FSYNC = Y, BUFFERING = N

*SERVER
svr1        SVGNAME = SVGtmax1, MIN = 1, MAX = 5

svr2        SVGNAME = SVGtmax2, MIN = 1, MAX = 5
svr3        SVGNAME = SVGtmax2NX, MIN = 1, MAX = 5

*SERVICE
svc1        SVRNAME = svr1, ROUTING = rout1
svc2        SVRNAME = svr2
svc3        SVRNAME = svr3
svc4        SVRNAME = GW2    
            #Gateway is directly defined on the server name.

*GATEWAY
GW1         GWTYPE = TMAX, PORTNO = 5001,NODENAME = "tmax1",
            RGWADDR = "GW1_MAIN", RGWPORTNO = 5001
GW2         GWTYPE = TMAX, PORTNO = 5002,NODENAME = "tmax2",
            RGWADDR = "GW2_MAIN", RGWPORTNO = 5001
GW3         GWTYPE = TMAX, PORTNO = 5003,NODENAME = "tmax2",
            RGWADDR = "GW3_MAIN", RGWPORTNO = 5001

*ROUTING
rout        FIELD = FIELD/PLACE_CD, 
            RANGES = "'00000':SVGtmax1, 'A0001'-'A0006':GW2,
           'A0007'-'A4000':GW3"

3.11. Tmax 환경 파일 컴파일

일반적으로 하나의 프로그램을 생성하는 과정은 여러 단계를 거친다. 먼저 소스 프로그램을 작성하고 컴파일하여 에러를 수정한 후에 올바른 실행 파일을 만든다. Tmax 환경 파일도 실제 프로그램 작성 방법과 동일하다. Tmax 환경 파일을 컴파일하여 에러 없는 올바른 Tmax 환경 파일을 만들 수 있게 된다.

Tmax 시스템은 기동될 때, Tmax 환경 파일을 토대로 환경을 설정하기 때문에, 에러가 존재하는 환경 파일이라면 Tmax 시스템이 동작될 때 예상치 못한 오류가 생길 수 있다. Tmax 시스템은 올바른 환경 파일 없이는 기동될 수 없다. 따라서 Tmax 환경 파일의 컴파일 작업을 통해 Tmax가 정상적으로 동작할 수 있도록 올바른 Tmax 환경 파일을 생성해야 한다.

컴파일 작업은 cfl 명령에 의해 이루어진다.

$ cfl [-i 텍스트 Tmax 환경 파일명] 
      [-o 이진 Tmax 환경 파일명]
      [-h] 
      [-V] 
      [-n node_name] 
      [-A] 
      [-v num] 
      [-I] 
      [-r] 
      [-a Tmax 환경 파일명]
      [-Z]
항목설명
[ -i 텍스트 Tmax 환경 파일명 ]컴파일 대상이 되는 원본 설정 파일인 텍스트 형태의 Tmax 환경 파일명을 설정한다. 디렉터리는 사용자가 지정할 수 있으며 지정하지 않았을 경우에 기본적으로 환경설정 디렉터리는 $TMAXDIR/config이다. 원본 설정 파일을 찾지 못한 경우에는 경고 메시지를 출력한다.
[ -o 이진 Tmax 환경 파일명 ]컴파일 결과물인 이진 Tmax 환경 파일명을 설정한다. 경로와 함께 지정할 수 있으며, 경로가 지정되지 않은 경우 $TMAXDIR/config에 이진 Tmax 환경 파일이 생성된다. 옵션이 생략되면 파일명은 tmconfig로 생성된다.
[ -h ]명령어 도움말 옵션이다.
[ -V ]실행 파일의 버전을 확인할 수 있다.
[ -n node_name ]멀티 노드 환경에서 특정 노드의 환경 파일을 컴파일하고 싶은 경우에 사용하는 옵션이다. 멀티 노드 환경에서 다른 노드를 관리하기 위해서는 racd를 설정해야 한다.
[ -A ]

서비스 접근 제어(제3단계 보안)를 사용할 때만 유효한 옵션이다.

하나의 도메인 내에 있는 ACL 서비스에 대한 접근 권한은 모든 노드에서 동일하게 적용되어야 하므로 현재 노드의 $TMAXDIR/config/group, acl, user 파일을 같은 도메인에 속해 있는 다른 노드들의 $TMAXDIR/config에 배포하기 위한 옵션이다.

옵션을 사용하여 환경 파일을 컴파일할 경우에는 미리 mkgrp, mkpw, mkacl을 이용하여 group, acl, user 파일이 생성되어 있어야 한다. 생성된 파일은 하나의 도메인 내에 있는 모든 노드들이 공용으로 사용하기 때문에 파일을 생성할 때 도메인에 속하는 노드의 모든 사용자를 고려해야 한다. group_name, group_id, user_name, user_id는 한 도메인을 통틀어서 unique하게 생성해야 한다. passwd 파일은 복사되지 않으므로 노드별로 생성하거나, 별도로 복사해야 한다.

[ -v num ]

버전 정보를 조회한다. num에는 0과 1을 지정할 수 있다. (기본값: 1)

  • 0: 멀티 노드를 구성하고 있는 노드가 모두 같은 타입의 머신이며 관리자가 노드별로 환경 파일을 관리하는 경우에 0으로 설정한다. 컴파일된 이진 파일은 각각의 머신으로 복사해서 관리한다.

  • 1: racd를 통해서 환경 파일이 자동적으로 머신에서 컴파일된다.

[ -I ]기본적으로 cfl을 수행할 때 환경 파일 DOMAIN 절의 SHMKEY 항목에 설정한 값이 현재 사용 중이라면 해당 값의 UID를 비교하며, 다를 경우 에러 메시지가 발생한다. 해당 옵션은 shared memory 값의 현재 사용 여부 및 UID 동일 여부를 체크하지 않을 때 사용한다.
[ -r ]

cfl 수행 단계에서 ulimit –n으로 조회할 때 출력되는 현재 시스템의 사용 가능한 FD 최대 수를 미리 체크하여 사용자에게 알려준다. CLH 1개당 열 수 있는 최대 FD 개수를 미리 계산하여 체크한다.

Tmax 시스템에서 사용하는 FD 값이 시스템에서 사용 가능한 FD보다 더 크게 설정되어 있다면 다음과 같은 에러가 발생한다.

(E) CFL9990 Current Tmax configuration contains more servers or nodes than current system can support[CFL5056]

[-a Tmax 환경 파일명]동적 추가할 Tmax 환경 파일명을 지정한다. 서버 동적 추가의 경우 cfl을 이용하여 이진(binary) 환경 파일을 만들 때에는 [-a] 옵션을 반드시 사용하여야 한다. 만약 이 옵션을 사용하지 않고 동적 추가를 하였을 경우에는 (E) ADM2048 에러가 발생한다.
[-Z]

현재 cfl에서 MAXSACALL/MAXCACALL 1024이하 제한되어 있으나, 이 제한을 해제하는 옵션이다.

(예: - cfl -Z -i sample.m)

3.12. 서비스 테이블 생성

Tmax 시스템에서는 환경 파일의 SERVICE 절에 등록된 서비스만 처리가 가능하다. 그러나 하나의 서버 프로세스가 여러 개의 서비스를 제공하는 것이 가능하므로 사용자는 서버 프로세스에서 제공하는 서비스의 종류를 Tmax 시스템에 제공해야 한다. 이를 위해 환경 파일로부터 서비스 테이블을 생성하는 과정이 필요하며 이는 서버 프로그램의 컴파일 과정에서 반드시 함께 컴파일되어야 한다.

서비스 테이블이란, 서버마다 제공되는 서비스명이 나열되어 있는 파일로 Tmax 환경 파일에 등록된 서버와 서비스를 참조하여 생성된다. 서버 프로그램을 만들 때, 서비스 테이블을 함께 컴파일하지 않으면 서비스 요청이 서버에 넘겨지더라도, 서버 내에서 서비스 루틴의 위치를 알 수 없다.

서비스 테이블은 이진 환경설정 파일을 참조하여 gst 명령어를 이용해 작성된다.

gst   [ -f 이진 Tmax 환경 파일명 ] {-n node name} [-h] {-V}
옵션설명
[ -f 이진 Tmax 환경 파일명 ]

컴파일된 이진 환경 파일명을 지정한다. 지정되지 않으면 기본 파일명은 <tmconfig>이다.

gst 명령은 컴파일된 이진 환경 파일을 참조하여 Tmax 디렉터리 하위에 svct 디렉터리에 각 서버 프로그램의 서비스 테이블을 생성한다. 따라서 gst 명령을 실행하기에 앞서 먼저 svct 디렉터리 존재 여부를 확인해야 한다. 다른 파일명을 정의하지 않으면 tmconfig 파일을 참조한다. 명령 실행 후, svct 디렉터리에 서버별로 "서버명_svctab.c"의 서비스 테이블이 생성되었는지 확인해 본다.

{-n node name}노드명으로 타 노드 서버 프로세스의 서비스 테이블을 현재 노드의 "$TMAXDIR/svct" 디렉터리에 생성되도록 한다.
[-h]도움말을 조회한다.
{-V}실행 파일의 버전을 확인할 수 있다.

3.13. tmapm

Tmax 시스템에서는 시그알람을 사용한 서비스 타임아웃 설정을 기본으로 한다. tmapm은 시그알람이 사용 가능하지 않거나, 용이 하지 않은 경우 서비스 타임아웃을 설정 및 사용할 수 있는 별도의 서버이다.

tmapm은 USC서버로 환경설정 SERVER 절에 다음과 같이 설정한다.

*SERVER
tmapm    CLOPT = [ -i sec ]
                 [-r sec ]
                 [-c command ]
                 [-l [ 0 | 1 | 2 ]]
옵션설명
[ -i sec ]서비스 타임을 체크하는 주기(초)이다. 짧을 수록 시스템 부하가 증가한다. 소수점도 설정 가능하다.
[-r sec]서비스 타임 이후 커맨드를 실행하기까지의 제한 시간(초)이다. 정수형으로 설정해야 한다.
[-c command]해당 서비스가 수행시간(SCVTIME + 커맨드 실행 제한시간)까지 RUNNING 상태일 경우 실행할 커맨드이다. 셸 명령어나 스크립트가 될 수 있다.
[-l [ 0 | 1 | 2 ]]사용자 로그 레벨이다. 기본값은 0이며, 높을 수록 좀 더 자세한 정보 출력한다.

-c 옵션으로 설정한 커맨드를 실행할 경우 다음과 같이 파라미터를 전달한다.

User CommandPIDSVRNAMESVCNAME[Elapse Time]
kill.sh9659svr2TOUPPER[5]

다음은 tmapm 설정의 예이다.

*SERVER
tmapm    SVGNAME = svg, 
         SVRTYPE = UCS, 
         CLOPT = "-o ulog  --  -i 5 -r 1 -c kill.sh -l 1"