기본적으로 MySQL Cluster 의 NDB 는 인덱스와 레코드 모두를 메모리에 상주시킨다. 만약, 대용량의 데이터를 취급하여야하는 경우라면 필시 메모리 부족 현상으로 인한 중단 현상(table is full)이 발생할 것이다. 따라서 데이터를 메모리 뿐만 아니라 디스크에 저장할 수 있는 기능이 필요하다. 물론, 이 외에도 노드 복구, 시스템 재시작시 다량 - 가령, 테라 바이트 - 의 데이터 처리 호율을 높이는 효과도 얻을 수 있다.(참고로 MySQL Cluster 데이터 노드의 권장 물리 메모리 용량은 16G 임, 아울러 데이터 노드간 1Gbit 랜 권장)
디스크 데이터를 사용하기 위하여 3가지 단계를 거친다.
1. Undo Log Gorup 생성
logfile group 을 만들고 하나 이상의 Undo 로그 파일을 해당 그룹에 추가한다.
CREATE LOGFILE GROUP lg_1
ADD UNDOFILE 'undo_1.log'
INITIAL_SIZE 16M
UNDO_BUFFER_SIZE 2M
ENGINE NDBCLUSTER;
ALTER LOGFILE GROUP lg_1
ADD UNDOFILE 'undo_2.log'
INITIAL_SIZE 12M
ENGINE NDBCLUSTER;
기본 INITIAL_SIZE 는 128MB 이고, UNDO_BUFFER_SIZE 는 8MB이다. alter 를 실행할 때마다 log 파일들이 각 데이터 노드에 생성된다. 그냥 디플트 값으로 logfile group 과 Undo 로그 파일을 하나씩 만들어 본다.
CREATE LOGFILE GROUP lg_1 ADD UNDOFILE 'undo_1.log' ENGINE NDBCLUSTER;
생성된 결과 확인 방법은, config.ini 의 FileSystemPath 로 지정한 디렉토리 아래 ndb_노드ID_fs 디렉토리로 이동한 후 undo_1.log 파일이 존재하는지 확인한다. 모든 데이터 노드에 해당 파일이 생성되었으면 성공이다.
2. 테이블 스페이스 생성
tablespace 를 만들때 log file group 을 할당하고 하나 이상의 데이터 파일을 추가한다.
CREATE TABLESPACE ts_1
ADD DATAFILE 'data_1.dat'
USE LOGFILE GROUP lg_1
INITIAL_SIZE 32M
ENGINE NDBCLUSTER;
ALTER TABLESPACE ts_1
ADD DATAFILE 'data_2.dat'
INITIAL_SIZE 48M
ENGINE NDBCLUSTER;
테이블 스페이스를 생성하고 1G 크기의 데이터 파일을 총 4개를 생성(그냥 1G 로 지정하면 에러가 발생한다. byte 단위로 계산하여 지정)한다. 운영중인 데이터베이스의 총 예상량을 고려하여 적당한 크기를 지정하면 된다.(기본 INITIAL_SIZE 는 128M 임)
CREATE TABLESPACE ts_1
ADD DATAFILE 'data_1.dat'
USE LOGFILE GROUP lg_1
INITIAL_SIZE 1073741824
ENGINE NDBCLUSTER;
ALTER TABLESPACE ts_1
ADD DATAFILE 'data_2.dat'
INITIAL_SIZE 1073741824
ENGINE NDBCLUSTER;
ALTER TABLESPACE ts_1
ADD DATAFILE 'data_3.dat'
INITIAL_SIZE 1073741824
ENGINE NDBCLUSTER;
ALTER TABLESPACE ts_1
ADD DATAFILE 'data_4.dat'
INITIAL_SIZE 1073741824
ENGINE NDBCLUSTER;
생성된 결과는, 상기와 동일한 경로에 dat 파일들이 존재하는지 확인하면 된다.
3. 테이블에 테이블 스페이스 지정
데이터 저장소로 상기 tablespace 를 사용하는 Disk Data table 을 만든다.
CREATE TABLE AAA (
어쩌구 저쩌구
)
TABLESPACE ts_1 STORAGE DISK
ENGINE NDBCLUSTER;
이를 이미 운영 중인 테이블에 적용해 보았다.(master data node 에서 실행, 가급적이면 처음 데이터베이스 구축시~ 디스크 사용을 할 것)
ALTER TABLE 테이블명 TABLESPACE ts_1 STORAGE DISK ENGINE NDBCLUSTER;
이 경우 인덱스가 걸려있는 칼럼은 모두 메모리에 올라가고 그 외는 디스크에 저장된다..(수정하는 경우라면, 마스터를 제외한 데이터 노드들을 종료하고 --initial 로 다시 실행하여야 함. 잘 안된다면 파일들까지 삭제...) 만약, 특정 칼럼을 메모리에 올리고 싶다면 다음과 같이 변경한다
ALTER TABLE 테이블명 MODIFY 칼럼명 칼럼타입 STORAGE MEMORY ENGINE NDBCLUSTER;
작업이 완료되었으면 제대로 반영이 되었는지 테이블을 확인한다.(각 데이터 노드에서...)
SHOW CREATE TABLE 테이블명;
작업 전과 후 데이터 노드의 메모리 사용량에 변화가 있는지도 확인해본다.
'서버 > 리눅스' 카테고리의 다른 글
root 계정에서 크롬 실행하기, CentOS (0) | 2013.12.31 |
---|---|
HAProxy 로그 출력 - CentOS 5.x (0) | 2013.06.27 |
nginx load balancer 구축기 - Cent OS (0) | 2013.05.28 |
MySQL Cluster 7.1 설치기 - CentOS 5.x (0) | 2013.05.28 |
collectd Exec 플러그인을 사용하여 HAproxy 모니터링하기 - CentOS (0) | 2013.05.25 |
댓글