본 장에서는 GQ2를 운영하기 위한 설정 항목과 상태 모니터링 방법에 대해서 설명한다.
TmaxGrid 기능을 활성화시키기 위해서는 Tmax 환경 설정의 DOMAIN 절과 NODE 절을 구성해야 한다.
다음은 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
다음은 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
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 서버 의 현재 상태이다.
|
suspend status | 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 | 현재 입력되어 있는 모든 데이터의 크기의 합계이다. |
본 절에서는 데이터 모니터링을 하는 명령어에 대해서 설명한다.
tmadmin의 gqi 명령어를 통해서 TmaxGrid가 관리하고 있는 데이터를 확인할 수 있다.
사용 방법
$$1 tmax1 (tmadm): tginfo (tgi)
출력 정보
각 Key별로 다음과 같은 정보를 확인할 수 있다.
항목 | 설명 |
---|---|
name | Key 이름이다. |
stime | Key가 생성된 시간이다. |
node_type | 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 여부를 표시한다. |
tmadmin의 tglockinfo(tgli) 명령어를 통해서 TmaxGrid가 관리하고 있는 lock 정보를 확인할 수 있다.
사용 방법
$$1 tmax1 (tmadm): tglockinfo (tgli) [ -o [sort할 조건] ] [ -k [key_name] ] [ -c [자식키의 갯수] ] [ -d [대기 시간(초)] ]
항목 | 설명 |
---|---|
[ -o [sort할 조건] ] | [–o] 옵션은 특정 조건을 기준으로 조회 결과를 sort하여 출력하기 위한 옵션이다. sort는 내림차순, 오름차순으로 설정이 가능하다.
|
[ -k [key_name] ] | 해당 키에 대한 정보를 조회한다. 해당 키의 자식키까지 표시된다. |
[ -c [자식키의 갯수] ] | 자식키의 갯수 이상인 키와 그 자식키의 정보를 조회한다. |
[ -d [대기 시간 (초)] ] | 대기 시간이 입력한 값 이상인 키를 조회한다. |
출력 정보
다음과 같은 정보를 확인할 수 있다.
항목 | 설명 |
---|---|
name | Key 이름이다. |
stime | Key가 생성된 시간이다. |
acquired | lock을 획득한 시간이다. |
duration | lock을 잡고 있는 시간이다. |
node_type | Key 타입이다.
|
child | 해당 Key의 자식 Key 개수(바로 아래 레벨의 자식 Key 개수만 보여줌)이다. |
create | Key를 생성한 클라이언트 ID이다. |
lock | lock 여부를 표시한다. |