사용 및 관리

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

1. 환경 설정

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

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 상에서의 heartbeat 체크 주기이다. (단위: 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

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. 상태 정보 관리

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

st -tg
  • 설정정보

    명령을 실행하면 아래의 항목들을 확인할 수 있다.

    항목 설명

    shmkey

    환경설정 TGSHMKEY 항목이다.

    shmsize

    환경설정 TGSHMSIZE 항목이다.

    max data

    환경설정 TGMAX 항목이다.

    max watcher

    환경설정 TGMAX_WATCHER 항목이다.

    id

    환경설정 TGID 항목이다.

    portno

    환경설정 TGPORTNO 항목이다.

    heartbeat

    환경설정 TGHEARTBEAT 항목이다.

    timeout

    환경설정 TGTIMEOUT 항목이다.

    historycount

    환경설정 TGHISTORY 항목이다.

    standbycount

    환경설정 TGSTANDBY 항목이다.

    gqmaxbuffersize

    환경설정 TGMAXBUFFERSIZE 항목이다.

    gqdownwaittime

    환경설정 TGDOWNWAITTIME 항목이다.

  • 상태

    항목 설명

    status

    TmaxGrid 서버 의 현재 상태이다.

    • RUN : 정상 상태 (서비스 가능 상태)

    • NOT_READY : 기동이 되어 있지 않은 상태

    • READY : 기동은 하였으나 동기화 작업이나 마스터 선정 작업 진행 중

    suspend status

    gqsuspend 명령어에 의해 중지된 상태인지 확인할 수 있는 상태이다.

    • NOT SUSPENDED : gqsuspend를 실행하지 않은 상태

    • SUSPENDED : gqsuspend 명령어에 의해 중지된 상태

    created node count

    지금까지 생성된 노드의 개수이다.

    deleted ndoe count

    지금까지 삭제된 노드의 개수이다.

    set data count

    지금까지 set으로 데이터가 입력된 노드의 개수이다.

    get data count

    지금까지 get으로 데이터를 가져간 노드의 개수이다.

    current node count

    현재 생성되어 있는 노드의 개수이다.

    temporary node count

    현재 생성되어 있는 노드 중 Temporary 타입 노드의 개수이다.

    watcher count

    현재 생성되어 있는 watcher의 개수이다.

    current data count

    현재 입력되어 있는 데이터의 개수이다.

    total data size

    현재 입력되어 있는 모든 데이터의 크기의 합계이다.

3. 데이터 모니터링

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

3.1. tginfo

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

  • 사용 방법

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

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

    항목 설명

    name

    Key 이름이다.

    stime

    Key가 생성된 시간이다.

    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 개수만 보여줌)이다.

    create

    Key를 생성한 클라이언트 ID이다.

    get

    Key의 데이터를 마지막으로 가져간 클라이언트 ID이다.

    last

    마지막으로 액션을 수행 한 클라이언트 ID이다.

    lock

    lock 여부를 표시한다.

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 [대기 시간 (초)] ]

    대기 시간이 입력한 값 이상인 키를 조회한다.

  • 출력 정보

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

    항목 설명

    name

    Key 이름이다.

    stime

    Key가 생성된 시간이다.

    acquired

    lock을 획득한 시간이다.

    duration

    lock을 잡고 있는 시간이다.

    node_type

    Key 타입이다.

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

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

    child

    해당 Key의 자식 Key 개수(바로 아래 레벨의 자식 Key 개수만 보여줌)이다.

    create

    Key를 생성한 클라이언트 ID이다.

    lock

    lock 여부를 표시한다.

4. 제어

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

  • tgsuspend

    운영 중인 TmaxGrid 서버의 서비스를 중지한다. 클라이언트의 요청을 받아들이지는 않지만, 데이터는 동기화하고 있다.

    > tgsuspend
  • tgresume

    tgsuspend로 중지한 TmaxGrid 서버가 다시 클라이언트의 요청을 받도록 한다.

    > tgresume
  • tgpurge

    TmaxGrid의 모든 Key와 Value를 삭제하여 초기화한다.

    > tgpurge