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: