MySQL을 이용한 클러스터링 관한연구
작성자 정보
- 웹관리자 작성
- 작성일
컨텐츠 정보
- 13,111 조회
- 0 추천
- 목록
본문
MySQL을 이용한 클러스터링 관한연구
본 연구과제는 공개SW인 Mysql Database서버를 클러스터링을 하기위해 필요한 여러 가지 기술적인 운영관리기법들에 관한 실무기술에 관한 과제이다.
본 연구보고서의 결과물은 실제 MySQL를 대용량 대이터베이스서버로 활용하고 있는 여러 기업, 기관, 학교등에서 유용하게 활용될 수 있으리라 기대한다.
작성자 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 이재석
-------- 목 차 -------
1. MySQL 클러스터의 기본 개념
2. 클러스터링을 위한 MySQL 스토리지 엔진
3. MySQL 크러스터의 한계
4. 클러스터링을 위한 MySQL 설치
rpm을 이용할 경우
미리 컴파일된 바이너리를 이용할 경우
소스 컴파일시 설치방법
5. 클러스터링을 위한 MySQL 설정
MGM node 설정
DATA node 및 SQL node 설정
6. MySQL 클러스터의 프로세서 관리
각 프로세서의 시작
각 노드 현황 보기
7 .On-line backup
MySQL 클러스터의 backup
MySQL 클러스터의 restore
1. MySQL 클러스터의 기본 개념
MySQL 클러스터는 share-nothing 시스템에서 in-memory 데이터 베이스의 클러스터링을 구현하게 되며 특정한 하드웨어 및 소프트웨어를 요구하지 않고 병렬 서버구조로 확장이 가능합니다.
위의 그림에서 보는 바와 같이 크게 3가지 프로세서로 나뉜게 됩니다.
MGM node : 다른 노드를 관리하는 매니저 노드이며 다른 노드보다
먼저 실행되며 ndb_mgmd 명령으로 실행됩니다.
NDB node : 클러스터의 데이터를 저장하는 노드이며 ndbd 명령으로
실행됩니다.
SQL node : 클러스터 데이터에 접근하는 노드이며 MySQL 클러스터에서는
NDB 클러스터 스토리지 엔진을 사용하는 MySQL 서버가
SQL 노드입니다.
여기서 자주 사용되는 용어들에 대해 간략하게 설명 하겠습니다.
Cluster : 일반적으로 Cluster는 하나의 업무를 수행하기 위해 함께 동작하는 컴퓨터 세트.
Configuration Files : 클러스터, 호스트, 노드에 관계된 직접적인 정보를 포함하는 파일
Backup :디스크나 다른 Long-term Storage에 저장되는 모든 클러스터 데이타, 트랜젝션, 로그의 완전한 카피
Restore : 백업에 저장되는 것과 같이 클러스터에 그 전 상태로 되돌리는 것.
CheckPoint : 클러스터에서는 Committed된 트랜잭션을 디스크에 저장하는 시간
Cluster Host : MySQL Cluster의 구성 컴퓨터
Node : MySQL Cluster의 논리적, 기능적 요소
MGM node : MySQL Cluster에서 다른 노드들의 설정 정보, 노드의 시작과 정지,
네트워크 파티셔닝, 백업과 저장 등을 포함하여 다른 노드들을 관리
SQL node : 데이터 노드안에 저장된 데이터를 Serve 하는 MySQL Server 인스턴스
Data node : 실제 데이터가 저장되는 노드
Node group : 데이터 노드의 집합
2. 클러스터링을 위한 MySQL 스토리지 엔진
NDB 은 in-memory storage engine으로 고가용성과 데이터영구성이 특징이며 여러 개의 컴퓨터에 걸쳐서 파티션이 되어 있는 테이블을 구현하기 위해 MySQL Cluster가 사용하는 스토리지 엔진입니다.
The NDB storage engine 은 range of failover 와 load-balancing 옵션으로 구성할 수 있습니다.
그러나, cluster level의 storage engine으로 start하는게 가장 쉬운 방법입니다.
MySQL Cluster's NDB storage engine 은 완전한 data set으로 구성됐으며, data는 cluster내 다른 data에만 의존성이 있다.
이것은 MySQL-Max 5.0 바이너리 배포판에서 찾을 수 있습니다. 이 스토리지 엔진은 현재까지는 여러 형태의 유닉스 버전에서만 지원되고 있습니다
3. MySQL 크러스터의 한계
- 트랙잭션 수행 중의 롤백을 지원하지 않으므로,
작업 수행 중에 문제가 발생하였다면, 전체 트랙잭션 이전으로
롤백하여야 합니다.
- 실제 논리적인 메모리의 한계는 없으므로 물리적으로 허용하는 만큼
메모리를 설정하는 것이 가능합니다.
- 컬럼 명의 길이는 31자, 데이터베이스와 테이블 명은 122자까지
길이가 제한된다. 데이터베이스 테이블, 시스템 테이블,
BLOB인덱스를 포함한 메타 데이터(속성정보)는 1600개까지만
가능합니다.
- 클러스터에서 생성할 수 있는 테이블 수는 최대 128개이다.
하나의 로우 전체 크기가 8KB가 최대입니다.
(BLOB를 포함하지 않은 경우).
테이블의 Key는 32개가 최대입니다.
- 모든 클러스터의 기종은 동일해야 합니다.
기종에 따른 비트저장방식이 다른 경우에 문제가 발생할수 있습니다.
- 운영 중 스키마 변경이 불가능합니다.
- 운영 중 노드를 추가하거나 삭제할 수 없습니다.
- 최대 데이터 노드의 수는 48개입니다..
- 모든노드는 63개가 최대입니다. (SQL node,Data node,매니저를 포함)
4. 클러스터링을 위한 MySQL 설치
rpm을 이용할 경우
mysql_server , mysql-max 둘다 rpm 으로 설치하여야 합니다.
미리 컴파일된 바이너리를 이용할 경우
아카이브 파일을 해체하고 바로 이용 할 수 있습니다.
소스 컴파일시 설치방법
configure 실행시 –-with-ndbcluster 옵션을 사용하거나 BUILD/complie-pentium-max 구성 스크립트를 사용 할 수 있습니다.
단 BUILD/complie-pentium-max 구성스크립트 사용시에는 OpenSSL이
설치되어있어야 합니다.
Ex> 컴파일된 바이너리를 이용할 경우 설치 방법
1. mysql user 추가
# cd /usr/local
# groupadd mysql
# useradd -g mysql mysql
2. 압축해제
# tar -xzvf mysql-max-4.1.13-pc-linux-gnu-i686.tar.gz
# ln –s /usr/local/mysql-max-4.1.13-pc-linux-gnu-i686 mysql
3. 초기 데이터베이스 생성
# cd mysql
# scripts/mysql_install_db --user=mysql
# chown -R mysql:mysql .
4. 초기 스크립트 생성
# cp support-files/mysql.server /etc/rc.d/init.d/
# chmod +x /etc/rc.d/init.d/mysql.server
# chkconfig --add mysql.server
5. MGM (management) 노드
# cd /usr/local/mysql/bin/
# cp ndb_mgm* /usr/local/bin/
# chmod +x ndb_mgm*
5. 클러스터링을 위한 MySQL 설정
MGM node 설정
# mkdir /var/lib/mysql-cluster
# cd /var/lib/mysql-cluster
# vi config.ini
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=80M
IndexMemory=52M
[TCP DEFAULT]
portnumber=2202
[NDB_MGMD]
id=1
hostname=192.168.100.2
datadir=/var/lib/mysql-cluster
[NDBD]
id=3
hostname=192.168.200.3
datadir=/usr/local/mysql/data
[NDBD]
id=4
hostname=192.168.100.4
datadir=/usr/local/mysql/data
[MYSQLD]
id=2
hostname=192.168.100.5
datadir=/usr/local/mysql/data
DATA node 및 SQL node 설정
# vi /etc/my.cnf
[MYSQLD]
Ndbcluster
ndb-connectstring=192.168.100.2
[MYSQL_CLUSTER]
ndb-connectstring=192.168.100.2
6. MySQL 클러스터의 프로세서 관리
각 프로세서의 시작
Mgm node : –f 컨피그레이션 파일의 위치
# ndb_mgmd -f /var/lib/mysql-cluster/config.ini
MGM 노드를 다운시
# ndb_mgm –e shutdown
Data node : --initial ndbd
를 처음 실행할 때와 컨피그레이션이 바뀐 후
재시작시 사용
# ndbd –initial
SQL node
# /etc/rc.d/init.d/mysql.server start
각 노드 현황 보기
# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 192.168.0.10:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=3 @192.168.100.3 (Version: 4.1.13, Nodegroup: 0, Master)
id=4 @192.168.100.4 (Version: 4.1.13, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.100.2 (Version: 4.1.13)
[mysqld(API)] 1 node(s)
id=2 (Version: 4.1.13)
ndb_mgm>
7 .On-line backup
MySQL 클러스터의 backup
ndb_mgm> Start [backup-id] backup
데이터 저장소 아래에 BACKUP이란 디렉터리 이하에
BACKUP-[backup-id]디렉터리에 저장되며
BACKUP-1-0.3.Data, BACKUP-1.3.ctl, BACKUP-1.3.log
3개의 파일로 저장됩니다.
ndb_mgm> Abort backup [backup-id]
현재 진행중인 [backup-id]의 백업을 중지할 수 있습니다.
MySQL 클러스터의 restore
ndb_restore
관련자료
-
이전
-
다음