내용 목차
본 장에서는 HMS를 사용하기 위해서 빌드하는 과정, 기동과 종료 및 상태조회에 대해 설명한다.
HMS는 신뢰성을 제공하기 위한 목적으로 일부 중요한 정보들을 storage를 이용하여 관리한다. 이러한 기능을 지원하기 위해서 HMS는 storage 기능이 구현된 라이브러리를 사용한다.
기본적으로 지원되는 storage 이외에 사용자의 운영 환경에 설치된 외부 storage도 확장하여 사용할 수 있도록 지원되며, 이러한 경우에는 사용할 storage의 종류에 따라 지원되는 라이브러리가 달라지기 때문에 해당 storage의 라이브러리를 이용하여 HMS를 다시 빌드해야 한다.
기본 storage가 아닌 외부 storage를 사용하는 경우 HMS를 해당 storage 라이브러리에 맞추어 새롭게 빌드해야 한다. HMS를 빌드하기 위해서는 운영 시스템에 storage가 설치되어 있고 해당 storage를 지원하는 라이브러리가 있어야 한다. 또한 운영 시스템에 설치된 storage를 올바르게 사용하기 위한 환경변수 설정을 확인해야 한다.
예를 들어 UNIX 시스템에서 외부 storage를 Oracle로 사용할 경우 다음 환경변수 값들을 설정하거나 올바르게 설정되었는지 확인한다.
ORACLE_HOME=/data/home/oracle
PATH=$PATH:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
HMS가 사용하게 될 storage의 라이브러리 이외에 Tmax에서 각 storage 종류에 맞추어 제공하는 HMS 라이브러리도 준비되어 있어야 한다. HMS 라이브러리는 기본 storage를 사용할 경우에는 libhms.a 이름으로 제공되고, 외부 storage를 사용할 경우에는 libhms_<STORAGE>.a 형태의 이름으로 제공된다.
예를 들어 외부 storage로 Oracle을 사용할 경우 HMS 라이브러리는 libhms_ora.a의 이름으로 제공된다.
사용할 외부 storage에 대한 HMS 라이브러리가 존재하지 않는다면 Tmax 제품 담당자에게 문의하기 바란다.
외부 storage를 사용하여 HMS를 새로 빌드하는 경우 Makefile을 이용한다. Makefile은 사용자의 플랫폼 및 개발 환경에 맞게 수정해서 사용한다.
다음은 Linux 환경에서 외부 storage로 Oracle을 사용하기 위한 HMS Makefile의 예제이다.
# HMS Makefile for Oracle # Linux TARGET = hms_ora APOBJ = dumy.o APPDIR = $(TMAXDIR)/appbin TMAXLIBD= $(TMAXDIR)/lib TMAXLIBS= -lhms_ora -lpthread CFLAGS = all: $(TARGET) include $(ORACLE_HOME)/precomp/lib/env_precomp.mk ORALIBDIR = $(LIBHOME) ORALIB = $(PROLDLIBS) $(TARGET): $(APOBJ) $(CC) $(CFLAGS) -o $(TARGET) -L$(TMAXLIBD) -L$(ORALIBDIR) $(ORALIB) $(APOBJ) $(TMAXLIBS) mv $(TARGET) $(APPDIR)/. $(APOBJ): $(CC) $(CFLAGS) -c dumy.c clean: -rm -f core $(TARGET) $(APPDIR)/$(TARGET) ~ ~
HMS는 Tmax가 운영 중인 상황에서 동작한다. 만약 Tmax가 종료되어 있다면 Tmax를 먼저 기동시켜야한다. 옵션 없이 tmboot 명령을 통해 기동시키면 HMS도 함께 기동되지만, Tmax 시스템 프로세스만 기동되어 있다면 HMS는 별도로 기동시켜야 한다.
지정한 HMS를 기동 및 종료하는 명령은 다음과 같다.
기동
tmboot -q <SVGNAME>
종료
tmdown -q <SVGNAME>
기동과 종료 명령어에 사용되는 <SVGNAME>은 Tmax 환경설정 파일에 정의한 SVRGROUP 절의 이름이다. 자세한 내용은 “2.1.3. SVRGROUP 절”을 참고한다.
HMS가 운영 중인 상황에서 현재 환경설정에 대한 정보를 확인하고 시스템에 대한 상태, HMS 시스템에 접속되어 있는 클라이언트의 정보, 전송된 메시지 또는 처리된 메시지, 실패한 메시지 등의 현황 정보를 관리할 필요가 있다.
로컬 및 글로벌 HMS의 정보를 관리하기 위해서 Tmax에서 제공하는 tmadmin 프로그램을 이용한다.
tmadmin에 대한 자세한 정보는 "Tmax Administration Guide"를 참고한다.
tmadmin의 st 명령을 사용해서 환경설정 파일에서 설정한 Destination의 목록, 각 Destination에서 처리 중인 메시지와 클라이언트의 정보를 확인할 수 있다.
tmadmin st -q
다음은 명령을 수행했을 때 조회되는 로컬 HMS 환경에 대한 정보이다.
$$2 Locke2 (tmadm): st -q ---------------------------------------------------------------------------------- G dest cqcount type apqcnt acqcnt f_dscrd t_dscrd cons_cnt prod_cnt ---------------------------------------------------------------------------------- - queue01 58 QUEUE 169 111 0 0 30 5 - topic01 32 TOPIC 42 283 0 0 28 3
다음은 조회되는 정보의 각 필드에 대한 설명이다.
필드 | 설명 |
---|---|
G | 해당 Destination이 GLOBAL로 설정된 경우 'O'로 표시되고, GLOBAL이 아닌 경우 하이픈(-)으로 표시된다. |
dest | Destination의 이름으로, 환경설정 파일의 HMS 절에 설정된 이름이 표시된다. |
cqcount | 해당 Destination에서 아직 처리되지 않은 메시지 건수이다. |
type | 해당 Destination의 타입을 표시한다. 'QUEUE'와 'TOPIC'으로 표시된다. |
apqcnt | 현재까지 전송되어 누적된 총 메시지 건수이다. |
acqcnt | 소비자에 의해 처리된 메시지의 총 건수로 Topic 타입은 하나의 메시지에 대해서 모든 소비자가 수신받아야 처리완료가 되므로 'apqcnt' 값보다 'acqcnt' 값이 커질 수 있다. |
f_dscrd | 수신받은 메시지에 대해서 failed 처리를 함으로써 수신이 실패된 메시지 건수이다. |
t_dscrd | 메시지 전송에 TTL이 설정된 경우, 유효시간이 지남으로 실패된 메시지 건수이다. |
cons_cnt | 해당 Destination에 접속한 소비자(consumer)의 수이다. |
prod_cnt | 해당 Destination에 접속한 생산자(producer)의 수이다. |
tmadmin의 st 명령어를 사용해서 특정 Destination에 대한 각 클라이언트의 상세한 정보를 조회할 수 있다.
tmadmin st -q <DestinationName> -c
다음은 명령을 수행했을 때 조회되는 클라이언트 정보이다.
$$3 Locke2 (tmadm): st -q queue01 -c ------------------------------------------------------------------------------ sesi clid cname clitype qcnt cnt f_dscrd t_dscrd listener ------------------------------------------------------------------------------ 0 0x39d prodasync ARCV 49 0 0 0 ASYNCSVC 0x1 0 prod41 SND 0 32 0 0 0x1 0 prod42 SND 0 11 0 0 0x1 0 cons51 RCV 3 0 0 0 0x1 0 cons52 RCV 9 0 0 0 $$4 Locke2 (tmadm): st -q topic01 -c ------------------------------------------------------------------------------ sesi clid cname clitype qcnt cnt f_dscrd t_dscrd listener ------------------------------------------------------------------------------ 0x1 0 prod11 PUB 0 2 0 0 0x1 0 prod12 PUB 0 1 0 0 0x1 0 cons11 SUB 30 0 0 0 0x2 0x2 prod21 PUB 0 16 0 0 0x2 0x2 prod22 PUB 0 8 0 0 0x2 0x2 cons21 SUB 23 0 0 0 0x3 0 prod31 PUB 0 3 0 0 0x4 0x4 cons41 ADSUB 32 0 0 0 ASYNCSVC2
다음은 조회되는 정보의 각 필드에 대한 설명이다.
필드 | 설명 |
---|---|
sesi | 해당 클라이언트를 생성한 세션의 번호이다. |
clid | 클라이언트 ID이다. |
cname | 클라이언트를 생성할 때 지정한 클라이언트명으로 다음 함수의 파라미터로 사용된다.
|
clitype | 해당 Destination에 연결된 클라이언트의 종류이다. |
qcnt | 각 구독자들이 실제로 가지고 있는 메시지 건수이다. |
cnt | 각 클라이언트가 전송하거나 수신한 메시지 건수이다. |
f_dscrd | 수신 후 메시지를 failed로 처리함으로써 실패된 메시지 건수이다. |
t_dscrd | 전송할 때 설정한 TTL (유효시간)이 지나서 실패 처리된 메시지 건수이다. |
listener | 비동기 세션으로 생성한 소비자(consumer)의 경우 메시지를 수신할 서비스명이다. |