HMS 환경설정

HMS를 사용하기 위해서는 Tmax의 환경 파일에 HMS 관련 설정을 추가해야 한다.

본 장에서는 HMS 관련 설정에 대해서 설명한다.

1. Tmax 환경설정

HMS를 사용하기 위해서는 DOMAIN, NODE, SVRGROUP, HMS 절에 대한 설정이 필요하다.

1.1. DOMAIN 절

다음은 DOMAIN 절에서 HMS 사용을 위한 환경설정 형식과 항목에 대한 설명이다.

*DOMAIN
Domain1     [MAXSESSION = numeric]

선택항목

  • MAXSESSION = numeric

    • 크기 : 1 ~ 65535

    • 기본값 : 1024

    • 도메인 내의 HMS에서 생성할 수 있는 세션 수의 최댓값을 설정한다.

1.2. NODE 절

다음은 NODE 절의 환경설정 형식과 항목에 대한 설명이다.

*NODE
Node1       [MAXSESSION = numeric]

선택항목

  • MAXSESSION = numeric

    • 크기 : 1 ~ 65535

    • 기본값 : 1024

    • 노드 내의 HMS에서 생성할 수 있는 세션의 최댓값을 설정한다.

1.3. SVRGROUP 절

다음은 SVRGROUP 절의 환경설정 형식과 항목에 대한 설명이다.

*SVRGROUP
ServergroupName     NODENAME = node-name,
                    SVGTYPE = HMS,
                    HMSNAME = string,
                    OPENINFO = literal,
                    HMSINDEX = numeric,
                    HMSMAXTHR = numeric,
                    HMSMAXDBTHR = numeric,
                    [HMSMAXBULKTHR = numeric,]
                    [HMSMAXBULKSIZE = numeric,]
                    [HMSOPT = literal,]
                    [HMSSUBSCFG = string,]
                    [HMSMSGLIVE = numeric,]
                    [HMSPORT = numeric,]
                    [HMSHEARTBEAT = numeric,]
                    [HMSGQINT = numeric]

필수항목

  • ServergroupName = string

    • 크기: 63자 이내

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

  • NODENAME = string

    • 크기: 63자 이내

    • HMS 서버 그룹이 존재하는 노드를 정의한다. 사용되는 NODENAME은 NODE 절에서 정의한 노드 이름이어야 한다.

  • SVGTYPE = string

    • 해당 서버 그룹의 종류를 정의한다. HMS를 사용하기 위해서는 반드시 SVGTYPE=HMS로 설정해야만 한다.

  • HMSNAME = string

    • 크기: 63자 이내

    • 사용자가 빌드한 HMS 프로세스 이름을 정의한다.

  • OPENINFO = literal

    • HMS는 기본적으로 데이터베이스를 스토리지로 사용한다. 따라서 HMS에서 연결할 DBMS의 OPENINFO를 설정해야 한다.

    • 데이터베이스로 연결을 초기화하고 각 데이터베이스에서 제공되는 문법으로 정의한다.

  • HMSINDEX = numeric

    • 크기 : 0 ~ 65535

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

  • HMSMAXTHR = numeric

    • 크기 : 0 ~ 65535

    • 스토리지 처리를 하지 않는 스레드의 수를 설정한다.

    • 비영속성 메시지만 송수신하는 경우 이 항목의 값을 크게 늘려주어야 한다. 비영속적 메시지 이외에도 HMS의 기본적 동작을 위해 일정 수 이상 설정해야 한다.

  • HMSMAXDBTHR = numeric

    • 크기 : 0 ~ 65535

    • 스토리지 처리를 하는 스레드의 수를 설정한다.

    • 영속적 메시지가 많은 경우 이 값을 늘려줄 필요가 있다. 영속적 메시지 처리 외에도 HMS의 기본적 동작을 위해 일정 수 이상 설정해야 한다.

선택항목

  • HMSMAXBULKTHR = numeric

    • 범위 : 1 ~ 65535

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

  • HMSMAXBULKSIZE = numeric

    • 범위 : 2 ~ 65535

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

  • HMSOPT = literal

    • 크기 : 255자 이내

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

      옵션 설명

      -e 파일명

      HMS 동작 중에 발생하는 표준 에러(standard error)를 파일에 기록한다.

      -o 파일명

      HMS 동작 중에 발생하는 표준 출력(standard output)을 파일에 기록한다.

  • 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 속성을 설정한 Queue 간의 메시지를 주고받기 위해서는 각 Queue의 상태 정보를 주고받아야 하는데, 이 정보를 주고받는 주기를 설정한다.

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

1.4. HMS 절

다음은 HMS 절의 환경설정 형식과 항목에 대한 설명이다.

*HMS
DestinationName      SVGNAME = string,
                     TYPE = TOPIC | QUEUE,
                     [BOOT = WARM | (COLD),]
                     [GLOBAL = Y | (N),]
                     [GQTHR = numeric,]
                     [GQMAXREQ = numeric,]
                     [GQFULL = numeric]

필수항목

  • DestinationName = string

    • 크기 : 63자 이내

    • Destination의 이름을 설정한다. 생산자와 소비자는 이 이름을 사용하여 생성된다.

  • SVGNAME = string

    • 크기 : 63자 이내

    • Destination이 존재하게 될 HMS 서버 그룹명을 정의한다.

    • SVGNAME은 SVRGROUP 절에서 정의한 HMS 서버 그룹명(SVRGROP 이름)이어야 한다.

  • TYPE = TOPIC | QUEUE

    • Destination의 타입을 설정한다. 현재 TOPIC과 QUEUE만 지원한다.

선택항목

  • BOOT = WARM | COLD

    • 기본값 : COLD

    • 해당 Destination에 대해 기동할 때 복구할 메시지가 있을 경우 복구 여부를 설정한다.

    • RQ와 마찬가지로 WARM과 COLD만 설정할 수 있으며 기본값은 COLD이다.

      구분 설명

      WARM

      스토리지에 있는 처리되지 않은 메시지가 복구된다.

      COLD

      기동할 때 해당 메시지를 모두 삭제하고 시작한다.

  • GLOBAL = Y | N

    • 기본값 : N

    • 클러스터링된 HMS의 같은 이름을 갖는 Destination들을 논리적으로 하나의 Destination으로 동작하도록 설정한다.

    • GLOBAL 설정을 하기 위해서는 SVRGROUP 절의 HMS 설정에 HMSPORT가 설정되어 있어야 한다.

    • Queue에 대한 GLOBAL 설정을 하기 위해서는 GQTHR, GQMAXREQ, GQFULL의 추가적인 설정이 필요하다.

  • GQTHR = numeric

    • 크기 : 0 ~ 65535

    • 클러스터링된 Queue가 유지할 버퍼 크기를 결정하는 계수값을 설정한다.

      버퍼의 크기 = (소비자의 수) X (GQTHR 값)
    • 현재 Queue의 길이가 버퍼 크기보다 작을 때 나눠줄 메시지가 있는 클러스터링된 다른 Queue로부터 메시지를 가져온다. 버퍼의 크기보다 적은 메시지를 가지고 있을 때 메시지 분배 요청을 받으면 메시지를 나눠주지 않는다.

  • GQMAXREQ = numeric

    • 크기 : 1 ~ 65535

    • 클러스터링된 Queue가 다른 Queue에게 메시지를 요청할 경우 한 번에 요청할 수 있는 메시지의 수를 설정한다. 설정된 값이 클 경우 적은 횟수로 필요한 메시지를 채울 수 있지만, 너무 클 경우 노드 사이에 불필요한 메시지의 이동이 발생할 수 있으므로 너무 크지 않도록 설정하는 것을 권장한다.

  • GQFULL = numeric

    • 크기 : 0 ~ 65535

    • 클러스터링된 Queue의 메시지 소비가 이루어지지 않거나 메시지가 불균형적으로 너무 많이 쌓일 경우를 대비해 설정한 수 이상의 메시지가 쌓일 경우 그 초과분에 한해 다른 노드의 클러스터링 Queue에게 메시지를 균등하게 나눠 준다.

2. 예제

다음은 HMS를 사용하는 환경 파일의 예제이다.

*DOMAIN
Domain1     SHMKEY = 0x11936,
            TMMLOGLVL = "DEBUG1",
            CLHLOGLVL = "DEBUG1",
            MINCLH = 1,
            MAXCLH = 1,
            TPORTNO = 7783,
            MAXSESSION = 1024

*NODE
Node1       TMAXDIR = "/data/tmax",
            APPDIR  = "/data/tmax/appbin/",
            MAXSESSION = 1024

*SVRGROUP
svghms      NODENAME = "node1", CPC=1, SVGTYPE="HMS", RESTART=N,
            OPENINFO = "ORACLE_XA+Acc=P/scott/tiger+SesTm=60+Threads=true",
            HMSSUBSCFG = "/data/tmax/config/hmssubsconfig",
            HMSNAME = "hms_ora", HMSSINDEX = 1,
            HMSMSGLIVE = 1, HMSMAXTHR = 4, HMSMAXDBTHR = 10

*SERVER
…
*SERVICE
…

*HMS
queue1      SVGNAME = svghms,
            TYPE = "QUEUE",
            BOOT = "WARM",
            GLOBAL = N
topic1      SVGNAME = svghms,
            TYPE = "TOPIC",
            BOOT = "WARM",
            GLOBAL = N

다음은 HMSSUBSCFG에 설정한 환경설정 예제이다.

[TOPIC1]
Durable0:listener:
Durable1:listener:
Durable2:listener: