제2장 사용 및 관리

본 장에서는 GQ2를 운영하기 위한 설정 항목과 상태 모니터링 방법에 대해서 설명한다.

2.1. 환경 설정

TmaxGrid 기능을 활성화시키기 위해서는 Tmax 환경 설정의 DOMAIN 절과 NODE 절을 구성해야 한다.

2.1.1. DOMAIN 절

다음은 DOMAIN 절의 설정 항목에 대한 설명이다.

*DOMAIN
domain       
  :
 TGSHMSIZE  = numeric, 
 TGMAX      = numeric, 
 TGMAX_CHILD   = numeric , 
 TGMAX_WATCHER = numeric, 
 TGHEARTBEAT = numeric, 
 TGTIMEOUT   = numeric, 
 TGLOGLVL   = string,
 TGSHMKEY = numeric,
 TGPORTNO    = numeric, 
 TGMCAST_IP  = literal, 
 TGHISTORY   = numeric, 
 TGSTANDBY   = numeric, 
 TGMAXBUFFERSIZE = numeric, 
 TGDOWNWAITTIME = numeric

필수항목

  • TGSHMSIZE = numeric

    • 범위 : 32768 ~ 262143

    • Key 정보, Value, 관리 정보를 저장할 공유 메모리 최대 크기이다.

  • TGMAX = numeric

    • 범위 : 1 ~ MAX_INT

    • 최대 생성 가능한 Key의 수이다.

  • TGMAX_CHILD = numeric

    • 범위 : 1 ~ MAX_INT

    • 한 Key가 생성 가능한 최대 Child Key 수(직계 child만)로 아무리 크게 잡아도 총저장 가능한 Key 수는 TGMAX 수 미만으로만 가능하다.

  • TGMAX_WATCHER = numeric

    • 범위 : 1 ~ MAX_INT

    • cluster 상에서 한 TmaxGrid 서버의 최대 생성 가능한 watcher 수이다.

  • TGHEARTBEAT = numeric

    • 범위 : 1 ~ MAX_INT

    • cluster 상에서의 heartbeach 체크 주기이다. (단위: ms)

  • TGTIMEOUT = numeric

    • 범위 : 1 ~ MAX_INT

    • cluster 상에서의 다른 GQS로부터 요청이 없을 경우에 장애가 발생했다고 판단하는 시간(장애 감지 인지 시간)이다. (단위: ms)

  • TGLOGLVL = string

    • 범위 : TMMLOGLVL과 동일

    • GQS가 디버깅 실행 파일로 동작할 경우 gqs.log에 남는 로그의 레벨을 지정한다.

  • TGSHMKEY = numeric

    • 범위 : 32768 ~ 262143

    • Key 정보, Value, 관리 정보를 저장할 공유 메모리 키이다.

  • TGPORTNO = numeric

    • cluster 상에서 GQS가 다른 GQS로 전송되는 데이터를 수신할 포트 번호, GQS에서는 udp multicast와 udp unicast를 사용하기 때문에 포트도 두 가지를 사용한다.

    • GQPORTNO는 udp multicast를 위한 포트 번호이며, GQPORTNO+1은 unicast를 위해서 사용한다.

  • TGMCAST_IP = literal

    • cluster 상에서 GQS가 다른 GQS를 전송하기 위한 Multicast IP이다.

    • udp Multicast를 사용하기 때문에 IP는 표준에 따라서 224.0.1.0~239.255.255.255에서 선택해야 한다.

선택항목

  • TGHISTORY = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 50

    • cluster 상에서 빠른 복구를 위해서 GQS가 메모리에 저장하고 있는 동기화 요청 개수이다.

  • TGSTANDBY = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 50

    • cluster 상에서 마스터가 아닌 GQS에서 마스터인 GQS로 동시에 요청시 최대 가능한 요청 수이다.

  • TGMAXBUFFERSIZE = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 65000 (단위: Byte)

    • GQS 간의 복구를 위한 큰 크기의 데이터를 전송할 때 나누어서 보낼 수 있는 단위이다. 복구를 위한 데이터 크기가 이 값보다 크다면 이 크기 만큼씩 나누어서 정송을 한다.

  • TGDOWNWAITTIME = numeric

    • 범위 : 1 ~ MAX_INT

    • 기본값 : 30

    • 메모리 부족의 이유로 재부트를 시도할 때 메모리 부족 상태를 인지한 후 재부트 시도할 때까지의 대기 시간이다. (단위: 초)

사용 예제

다음은 DOMAIN 절에 설정 예이다. 예제에 이태릭체로 설정된 부분은 부분은 해당 머신 맞게 입력을 해야 한다.

*DOMAIN
domain        
 SHMKEY    = @@DOM1_NA.SHMKEY@@, 
 MAXUSER   = 10000,
 MINCLH    = 1, 
 MAXCLH = 1,
 CLHLOGLVL = DEBUG4,
 TMMLOGLVL=DEBUG4,
 TPORTNO   = @@DOM1_NA.PORTNO@@,  
 BLOCKTIME = 30, 
 MAXSACALL = 1024,    
 MAXCACALL = 1024,
 TGSHMSIZE   = 40960, 
 TGMAX = 10000, 
 TGMAX_CHILD = 100,   
 TGMAX_WATCHER = 10, 
 TGHEARTBEAT = 1000,  
 TGTIMEOUT = 5000, 
 TGLOGLVL = DEBUG3,
 TGPORTNO = @@DOM1_NA.GQPORTNO@@, 
 TGMCAST_IP="224.0.0.101", 
 TGHISTORY = 100, 
 TGSTANDBY = 10, 
 TGMAXBUFFERSIZE = 1000, 
 RACPORT=11111

2.1.2. NODE 절

다음은 NODE 절의 설정 항목에 대한 설명이다.

*NODE
  :
 TGSHMKEY = numeric,
 TGID     = numeric,
 TGMCAST_TTL = numeric, 
 TGMCAST_IF  = string, 
 TGLOGLVL   = string

필수항목

  • TGID = numeric

    • 범위 : 1 ~ MAX_INT

    • 마스터를 선정할 때 같은 시퀀스 번호를 가진 GQS들끼리의 가중치를 주기 위한 항목이다.

    • 높은 번호가 마스터가 될 수 있다. 모든 GQS들은 GQID가 달라야 한다.

  • TGMCAST_TTL = numeric

    • 범위 : 1 ~ MAX_INT

    • cluster 상에서 통신을 udp Multicast를 사용하기 때문에 Multicast Group에 가입을 해야 한다. 가입할 때 라우팅 범위를 지정해야 하는데 모든 머신사이에 통신이 가능한 값으로 설정을 한다.

      예를 들어 다음과 같이 설정한다.

      구분설명
      0호스트 내부
      1동일 서브넷
      <32동일 사이트(단체나 부서)
      <64동일 지역
      <128동일 대륙

선택항목

  • TGSHMKEY = numeric

    • 범위 : 32768 ~ 262143

    • Key 정보, Value, 관리 정보를 저장할 공유 메모리의 Key이다.

    • NODE 절에 설정하면 머신마다 다른 Key를 갖도록 설정할 수 있다.

  • TGMCAST_IF = string

    • GQS로 통신할 Interface를 지정한다. 지정하지 않는다면, OS의 라우팅 테이블에 의해서 동작을 수행한다.

  • TGLOGLVL = string

    • 범위 : TMMLOGLVL과 동일

    • GQS가 디버깅 실행 파일로 동작할 경우 gqs.log에 남는 로그의 레벨을 지정한다.

사용 예제

다음 예제는 3대의 Node에 GQS를 설정하는 예제이다. 예제에 이태릭체로 설정된 부분은 부분은 해당 머신 맞게 입력을 해야 한다.

*DOMAIN
domain        
 SHMKEY    = @@DOM1_NA.SHMKEY@@, 
 MAXUSER   = 10000,
 MINCLH    = 1, MAXCLH = 1,
 CLHLOGLVL = DEBUG4,TMMLOGLVL=DEBUG4,
 TPORTNO   = @@DOM1_NA.PORTNO@@,  
 BLOCKTIME = 30, 
 MAXSACALL = 1024,    MAXCACALL = 1024,
 TGSHMSIZE   = 40960, TGMAX = 10000, 
 TGMAX_CHILD = 100,   TGMAX_WATCHER = 10, 
 TGHEARTBEAT = 1000,  TGTIMEOUT = 5000, 
 TGLOGLVL = DEBUG3,
 TGPORTNO = @@DOM1_NA.GQPORTNO@@, TGMCAST_IP="224.0.0.101", 
 TGHISTORY = 100, TGSTANDBY = 10, 
 TGMAXBUFFERSIZE = 1000, RACPORT=11111

*NODE
DOM1_NA      
 TMAXDIR  = "@@DOM1_NA.TMAXDIR@@",
 APPDIR   = "@@DOM1_NA.TMAXDIR@@/appbin",
 PATHDIR  = "@@DOM1_NA.TMAXDIR@@/path",
 TLOGDIR  = "@@DOM1_NA.TMAXDIR@@/log/tlog",
 ULOGDIR  = "@@DOM1_NA.TMAXDIR@@/log/ulog",
 SLOGDIR  = "@@DOM1_NA.TMAXDIR@@/log/slog",
 CLHOPT = "-o @@DOM1_NA.TMAXDIR@@/log/slog/clh.log
 -e @@DOM1_NA.TMAXDIR@@/log/slog/clh.log ",
 TMMOPT = "-o @@DOM1_NA.TMAXDIR@@/log/slog/tmm.log
 -e @@DOM1_NA.TMAXDIR@@/log/slog/tmm.log ",
 HOSTNAME = @@DOM1_NA.TMAXDIR@@,
 TGSHMKEY = @@DOM1_NA.TMAXDIR@@,
 TGID = 1,  MAXRSTART = 1, 
 IP="@@DOM1_NA.V4_IP@@",
 TPORTNO = @@DOM1_NA.PORTNO@@
 

DOM1_NB      
 TMAXDIR  = "@@DOM1_NB.TMAXDIR@@",
 APPDIR   = "@@DOM1_NB.TMAXDIR@@/appbin",
 PATHDIR  = "@@DOM1_NB.TMAXDIR@@/path",
 TLOGDIR  = "@@DOM1_NB.TMAXDIR@@/log/tlog",
 ULOGDIR  = "@@DOM1_NB.TMAXDIR@@/log/ulog",
 SLOGDIR  = "@@DOM1_NB.TMAXDIR@@/log/slog",
 CLHOPT = "-o @@DOM1_NB.TMAXDIR@@/log/slog/clh.log
 -e @@DOM1_NB.TMAXDIR@@/log/slog/clh.log ",
 TMMOPT = "-o @@DOM1_NB.TMAXDIR@@/log/slog/tmm.log 
-e @@DOM1_NB.TMAXDIR@@/log/slog/tmm.log ",
 HOSTNAME = @@DOM1_NB.NODENAME@@,
 TGSHMKEY = @@DOM1_NB.GQSHMKEY@@,
 TGID = 2,
 MAXRSTART = 1,
 IP="@@DOM1_NB.V4_IP@@",
 TPORTNO=@@DOM1_NB.PORTNO@@
 
DOM1_NC      
 TMAXDIR  = "@@DOM1_NC.TMAXDIR@@",
 APPDIR   = "@@DOM1_NC.TMAXDIR@@/appbin",
 PATHDIR  = "@@DOM1_NC.TMAXDIR@@/path",
 TLOGDIR  = "@@DOM1_NC.TMAXDIR@@/log/tlog",
 ULOGDIR  = "@@DOM1_NC.TMAXDIR@@/log/ulog",
 SLOGDIR  = "@@DOM1_NC.TMAXDIR@@/log/slog",
 CLHOPT = "-o @@DOM1_NC.TMAXDIR@@/log/slog/clh.log 
-e @@DOM1_NC.TMAXDIR@@/log/slog/clh.log ",
 TMMOPT = "-o @@DOM1_NC.TMAXDIR@@/log/slog/tmm.log 
-e @@DOM1_NC.TMAXDIR@@/log/slog/tmm.log ",
 HOSTNAME = @@DOM1_NC.NODENAME@@,
 TGSHMKEY = @@DOM1_NC.GQSHMKEY@@,
 TGID = 3,
 MAXRSTART = 1,
 IP = "@@DOM1_NC.V4_IP@@", 
 TPORTNO = @@DOM1_NC.PORTNO@@
  

*SVRGROUP
svg1 NODENAME = DOM1_NA, COUSIN = "svg2,svg3"
svg2 NODENAME = DOM1_NB
svg3 NODENAME = DOM1_NC


*SERVER
svr1 SVGNAME = svg1, LOGLVL=DEBUG4, CLOPT="-o $(SVR).$(SPRI).out 
-e $(SVR).$(SPRI).out"

*SERVICE
ECHO SVRNAME = svr1
TEST_GQS_BASE SVRNAME = svr1

2.2. 상태 정보 관리

tmadmin의 다음의 명령을 통해서 설정과 상태를 함께 참조한다.

st -tg

2.3. 데이터 모니터링

본 절에서는 데이터 모니터링을 하는 명령어에 대해서 설명한다.

2.3.1. tginfo

tmadmin의 gqi 명령어를 통해서 TmaxGrid가 관리하고 있는 데이터를 확인할 수 있다.

  • 사용 방법

    $$1 tmax1 (tmadm): tginfo (tgi)
  • 출력 정보

    각 Key별로 다음과 같은 정보를 확인할 수 있다.

    항목설명
    nameKey 이름이다.
    stimeKey가 생성된 시간이다.
    node_type

    Key 타입이다.

    • Persistent : Key를 생성한 클라이언트가 종료되도 삭제하지 않는 Key

    • Temporary : 생성한 클라이언트가 종료하면 삭제되는 Key

    • Queue : enqueue API에 의해서 생성한 Key

    • Queue Child : enqueue 자동 생성되는 Key

    • Lock : Lock API에 의해서 생성한 Key

    • Lock Child : Lock API에 의해서 자동 생성되는 Key

    data_type저장하고 있는 Value의 타입(STRING, CARRAY, STRUCT, FIELD)이다.
    datalen저장하고 있는 Value의 길이이다.
    watcher해당 Key에 watcher를 등록한 클라이언트 개수이다.
    child해당 Key의 자식 Key 개수(바로 아래 레벨의 자식 Key 개수만 보여줌)이다.
    createKey를 생성한 클라이언트 ID이다.
    getKey의 데이터를 마지막으로 가져간 클라이언트 ID이다.
    last마지막으로 액션을 수행 한 클라이언트 ID이다.
    locklock 여부를 표시한다.

2.3.2. tglockinfo

tmadmin의 tglockinfo(tgli) 명령어를 통해서 TmaxGrid가 관리하고 있는 lock 정보를 확인할 수 있다.

  • 사용 방법

    $$1 tmax1 (tmadm): tglockinfo (tgli) [ -o [sort할 조건] ] [ -k [key_name] ]
                                         [ -c [자식키의 갯수] ] [ -d [대기 시간(초)] ]
    항목설명
    [ -o [sort할 조건] ]

    [–o] 옵션은 특정 조건을 기준으로 조회 결과를 sort하여 출력하기 위한 옵션이다. sort는 내림차순, 오름차순으로 설정이 가능하다.

    • [ -o st ] : 키가 생성된 시간 내림차순

    • [ -o st- ] :키가 생성된 시간 오름차순

    • [ -o ch ] : 자식키의 갯수 내림차순

    • [ -o ch- ] : 자식키의 갯수 오름차순

    • [ -o du ] : 대기 시간 내림차순

    • [ -o du- ] : 대기 시간 오름차순

    [ -k [key_name] ]해당 키에 대한 정보를 조회한다. 해당 키의 자식키까지 표시된다.
    [ -c [자식키의 갯수] ]자식키의 갯수 이상인 키와 그 자식키의 정보를 조회한다.
    [ -d [대기 시간 (초)] ]대기 시간이 입력한 값 이상인 키를 조회한다.
  • 출력 정보

    다음과 같은 정보를 확인할 수 있다.

    항목설명
    nameKey 이름이다.
    stimeKey가 생성된 시간이다.
    acquiredlock을 획득한 시간이다.
    durationlock을 잡고 있는 시간이다.
    node_type

    Key 타입이다.

    • Lock : Lock API에 의해서 생성한 Key

    • Lock Child : Lock API에 의해서 자동 생성되는 Key

    child해당 Key의 자식 Key 개수(바로 아래 레벨의 자식 Key 개수만 보여줌)이다.
    createKey를 생성한 클라이언트 ID이다.
    locklock 여부를 표시한다.

2.4. 제어

tmadmin의 tgsuspend, tgresume, tgpurge 명령어를 통해서 제어한다.