본문 바로가기

카테고리 없음

MariaDB 5.5 Collecting Stats for Galera Cluster v1.1

MariaDB 5.5 Collecting Stats for Galera Cluster v1.1

 

Date

Ver

Etc.

13.09.12

v1.1

Galera Cluster 추가

13.08.05

v1.0

 

 

 

 

 

 

1.    Collecting Stats

MariaDB Galera Cluster 에서 성능지표로 활용가능한 Table 은 다음과 같다.

 

다음의 모든 테이블은 information_schema Database 에 위치

l  GLOBAL_VARIABLES (wsrep_* 를 포함함)

l  GLOBAL_STATUS (wsrep_* 를 포함함)

l  PROCESSLIST

 

각각은 세션에서 다음과 같이 조회할 수 있다.

l  show variables like %키워드%

l  show status like %키워드%

l  show processlist

 

/하의 관계는 시스템 명령으로 조회하던 걸 쿼리를 통해 조회할 수 있는것에 불과하다.

 

각 테이블의 의미는 다음과 같다.

 

GLOBAL_VARIABLES

ð  말 그대로 GLOBAL VARIABLES 정보를 가지고 있다. GLOBAL VARIABLES 는 자주 변하는 값이 아니기에 자주 수집 할 필요는 없다.
다만 수집해 두면 특정 VARIABLES 이 언제 수정되었는지 조회가 가능하다는 점이 유용하다.

특히 메모리 VARIABLES 관련은 성능이나 시스템 안정성에 영향을 끼치는 부분으로 변경 추이를 추적할 필요가 있다.

 

wsrep_*  Galera Cluster 와 연관 된 Variables 이다.

 

GLOBAL_STATUS

GLOBAL (SYSTEM  LEVEL)  STATUS 정보를 가지고 있다. DB STARTUP 이래로 누적값을 가지고 있다.
의미있는 데이터를 뽑기 위해서는 시점과 시점의 비교변화추이가 필요하다.

wsrep_* 
 Galera Cluster 와 연관 된 status 이다.

PROCESSLIST

ð  PROCESS (THREAD) 정보를 가지고 있다. USER-LEVEL 의 작업 내용을 추적하기 위해서는 이 테이블의 데이터 저장이 필요하다.
INTERVAL 
도 짧게 가져갈수록 더 많은 유용한 정보를 수집할 수 있다.
다만 connection 이 많을수록 DB 저장공간 소모가 커지므로 적절한 타협점을 찾아야 한다.

 

앞서 언급한 3개의 테이블에 대해 각 노드가 각기 다른 값을 가진다는게 주요 포인트이다. (구성에따라 같을수도 있다.)

때문에 위 정보들을 캡쳐할 때 어느 위치에서 캡쳐했는지 추가적인 정보가 반드시 필요하다.

 

2.    Collecting method

크게 두 가지 수집 방법이 있다.

 

l  crontab

l  event

 

둘다 job 스케쥴링을 지원한다.

다만 event 의 경우는 event 를 컨트롤하는 요소가 시스템 변수 밖에 없다.

때문에 실행을 컨트롤하기 위해서는 위 변수를 변경하거나 해당 event 를 삭제해야 한다.

 

위와 같은 이유 때문에 crontab 에 등록해 수집하는게 편하다.

 

데이터를 저장할 테이블에 대해서는 어떤 노드에서 들어온 데이터인지 구분자가 필요하다.

 

3.    Practice

<DB, TABLE>

 

create database dbstat collate = euckr_bin;

 

create table dbstat.global_variables (

ctime datetime,

inst_id int(1),

v_name varchar(64),

v_value varchar(2048),

key (ctime));

 

create table dbstat.global_status (

ctime datetime,

inst_id  int(1),

v_name varchar(64),

v_value varchar(1024),

key(ctime));

 

 

create table dbstat.processlist (

ctime      datetime      ,

inst_id    int(1),

id         bigint(4)     ,

user       varchar(16)   ,

host       varchar(64)   ,

db         varchar(64)   ,

command    varchar(16)   ,

time       int(7)        ,

state      varchar(64)   ,

info       longtext      ,

time_ms    decimal(22,3) ,

stage      tinyint(2)    ,

max_stage  tinyint(2)    ,

progress   decimal(7,3)  ,

key (ctime));

 

<SCRIPT>

 

# col_variables.sh

 

#!/bin/bash

 

/data/galera/bin/mysql -u'monitor' -p'mon$xde1' -h'172.18.174.161' -P3307 dbstat << EOF

insert into dbstat.global_variables

select date_format(now(),'%y%m%d%h%i%s'), 1, variable_name, variable_value from information_schema.GLOBAL_VARIABLES

where variable_name not like '%ARIA%'

and variable_name not like '%RELAY_LOG%'

and variable_name not like '%REPLICATE%'

and variable_name not like '%SSL%'

order by 1 ;

 

COMMIT;

exit

EOF

 

 

# GLOBAL STATUS 수집 : 5분 주기

# col_status.sh

 

#!/bin/bash

 

/data/galera/bin/mysql -u'monitor' -p'mon$xde1' -h'172.18.174.161' -P3307 dbstat << EOF

insert into dbstat.global_status

select date_format(now(),'%Y%m%d%H%i%s'), 1, VARIABLE_NAME,VARIABLE_VALUE

from information_schema.GLOBAL_STATUS

where VARIABLE_NAME not like 'SSL_%'

and VARIABLE_NAME not like '%ARIA%'

and VARIABLE_NAME not in ('COMPRESSION','RPL_STATUS','SLAVE_RUNNING');

 

COMMIT;

exit

EOF

 

 

# PROCESSLIST 수집 : 5분 주기

# col_processlist.sh

 

#!/bin/bash

 

/data/galera/bin/mysql -u'monitor' -p'mon$xde1' -h'172.18.174.161' -P3307 dbstat << EOF

insert into dbstat.processlist

select date_format(now(),'%Y%m%d%H%i%s'), 1, id, user, host, db, command, time, state, info, time_ms, stage, max_stage, progress

from information_schema.PROCESSLIST;

 

COMMIT;

 

exit

EOF

 

<CRONTAB>

 

0 */6 * * * /bin/bash /data/galera/scripts/col_variables.sh 1>/dev/null 2>/dev/null

0 * * * * /bin/bash /data/galera/scripts/col_status.sh 1>/dev/null 2>/dev/null

*/5 * * * * /bin/bash /data/galera/scripts/col_processlist.sh 1>/dev/null 2>/dev/null

 

4.    IMPROVEMENTS