More than Just Lines on a Map: Best Practices for U.S Bike Routes
5노드 MySQL Cluster 구성 및 테스트
1. 5노드 MySQL Cluster 구축하기
김영우 (warwithin@gmail.com)
MySQL Cluster
MySQL Cluster는 MySQL (Network Database) Cluster를 의미한다.
•
MYSQL Cluster의 구성 요소는 다음과 같다.
•
노드 및 네트워크 구성
클러스터의 노드는 Management 노드 1대, Data 노드 2대, SQL 노드 2대이다. 그래서,
•
총 5대의 노드로 구성된 클러스터로 구성하였다.
클러스터 구성에 사용할 실제 서버가 없는 관계로 VirtualBox? 라는 가상화 어플리케
•
이션으로 5개의 가상머신을 생성하여 클러스터의 성능보다는 기능 테스트에 중점을
두었다.
클러스터 노드 구성(노드명, 아이피)
•
linux-mgmt, 192.168.1.1
linux-ndbd1, 192.168.1.11
linux-ndbd2, 192.168.1.12
linux-sql1, 192.168.1.21
linux-sql2, 192.168.1.22
우선 하나의 노드에 CentOS 5를 설치하고, MySQL 5.1.17-beta버전을 설치하였
•
다. 그리고 다음과 같이 추가로 필요한 4개의 가상 머신을 생성한다.
vboxmanage clonevdi d:virtualhardlinux-mgmt.vdi
d:virtualhardlinux-ndbd1.vdi
vboxmanage clonevdi d:virtualhardlinux-mgmt.vdi
d:virtualhardlinux-ndbd2.vdi
2. vboxmanage clonevdi d:virtualhardlinux-mgmt.vdi
d:virtualhardlinux-sql1.vdi
vboxmanage clonevdi d:virtualhardlinux-mgmt.vdi
d:virtualhardlinux-sql2.vdi
각 노드간 통신을 위하여 Internal Network 구성
•
vboxmanage modifyvm Linux-ndbd1 -nic1 intnet
vboxmanage modifyvm Linux-ndbd1 -intnet1 testnet
vboxmanage modifyvm Linux-ndbd2 -nic1 intnet
vboxmanage modifyvm Linux-ndbd2 -intnet1 testnet
vboxmanage modifyvm Linux-sql1 -nic1 intnet
vboxmanage modifyvm Linux-sql1 -intnet1 testnet
vboxmanage modifyvm Linux-sql2 -nic1 intnet
vboxmanage modifyvm Linux-sql2 -intnet1 testnet
vboxmanage modifyvm Linux-mgmt -nic1 intnet
vboxmanage modifyvm Linux-mgmt -intnet1 testnet
각 노드의 네트워크 설정
•
- 각각의 노드에 내부 네트워크에서 사용될 고정 아이피를 할당한다.
- 사용하는 Linux배포판의 규칙에 따르고, CentOS의 경우
/etc/sysconfig/network-scripts/ifcfg-eth0 파일을 편집한다.
- 다음은 Management 노드의 설정예이다.
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
NETMASK=255.255.255.0
IPADDR=192.168.1.1
USERCTL=no
PEERDNS=yes
GATEWAY=192.168.40.42
TYPE=Ethernet
IPV6INIT=no
Data 노드(NDBD) 설치 & 설정
데이터 노드는 linux-ndbd1(192.168.1.11), linux-ndbd2(192.168.1.12) 이다.
•
데이터 노드에서는 NDBD 프로세스가 실행되어야 한다.
•
MySQL 바이너리의 압축을 풀어 /usr/local/mysql 에 복사한다.
•
설정파일 편집
•
shell> vi /etc/my.cnf
데이터 노드 /etc/my.cnf
•
[MYSQLD]
# NDB storage engine
ndbcluster
# IPADDR of management server
ndb-connectstring=192.168.1.1
3. SQL 노드(MYSQLD) 설치 & 설정
SQL 노드는 Data노드와 유사한 설치 과정을 거친다. 그러나 반드시 MySQL 데이터
•
베이스의 초기화 스크립트로 서버를 초기화하여 클라이언트로 연결이 가능한지 확
인한다.
SQL 노드도 /usr/local/mysql 에 설치한다.
•
설정파일 편집
•
shell> vi /etc/my.cnf
SQL 노드의 /etc/my.cnf
•
[MYSQL_CLUSTER]
# IPADDR of management server
ndb-connectstring=192.168.1.1
Management 노드 설치 & 설정
ROOT 사용자로,
•
설치
•
shell> mkdir /usr/local/mysql-cluster
shell> cp /usr/local/src/mysql-5.1.18-beta-pc-linux-gnu-i686/bin/ndb_mgm*
/usr/local/mysql-cluster/
설정
•
shell> vi /usr/local/mysql-cluster/config.ini
Management 노드의 /usr/local/mysql-cluster/config.ini
•
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=10M
IndexMemory=5M
# mgm node
[NDB_MGMD]
hostname=192.168.1.1
datadir=/var/lib/mysql-cluster
# data node1
[NDBD]
hostname=192.168.1.11
datadir=/usr/local/mysql/data
# data node2
[NDBD]
hostname=192.168.1.12
datadir=/usr/local/mysql/data
# SQL node1
[MYSQLD]
hostname=192.168.1.21
4. # SQL node2
[MYSQLD]
hostname=192.168.1.22
위 설정에서, MySQL Cluster는 기본적으로 데이터와 인덱스를 모두 메모리에 저장
•
하기 때문에 Data노드에서 사용할 데이터 영역과 인덱스 영역의 크기
(DataMemory?=10M, IndexMemory?=5M)를 지정하였다.
MySQL 클러스터 시작하기
클러스터를 처음 시작하기 위해서는 다음과 같은 과정을 거친다.
•
Management 노드 프로세스를 실행 (as root)
•
shell> ndb_mgmd -f /usr/local/mysql-cluster/config.ini
Data 노드의 NDBD 프로세스 시작 (as mysql)
•
shell> cd /usr/local/mysql/bin
shell> ndbd --initial
--initial 옵션에 주의한다. 클러스터를 처음 시작하거나 설정 파일이 변경된 경우만
•
이 옵션을 사용한다. 이 옵션은 데이터 영역을 초기화 한다.
SQL 노드 프로세스 시작 (as mysql)
•
shell> cd /usr/local/mysql
shell> ./bin/mysqld_safe --user=mysql &
5. MySQL Cluster 상태 확인
Management 노드의 ndb_mgm 유틸리티를 사용하여 클러스터의 상태를 확인할 수 있
•
다.
MySQL Cluster 사용하기
테스트용 테이블 생성
•
mysql> create table t
(id int not null auto_increment,
value varchar(300), primary key (id))
ENGINE NDB
DEFAULT CHARSET=UTF8;
MySQL Cluster 테이블 생성시 반드시 스토리지 ENGINE 타입을 'NDB' 또는
•
'NDBCLUSTER'로 지정한다.
7. Management 노드 정지
•
shell> ndb_mgm -e shutdown
- Data 노드와 Management 노드를 정지한 후, SQL 노드를 정지한다.
SQL 노드 정지
•
shell> mysqladmin -uroot shutdown
MySQL Cluster Disk Data Tables
기본적으로 MySQL Cluster는 데이터와 인덱스를 모두 메모리에 저장한다. 그러나,
•
MySQL 5.1.6이상부터 데이터를 디스크에 저장하는 기능을 제공한다. (* 주의할 사항
은, Disk data table도 인덱스는 메모리에 저장한다.)
Disk Data Table 만들기
•
로그그룹을 생성하고 undo로그 파일을 할당한다.
•
mysql>
CREATE LOGFILE GROUP lg_1
ADD UNDOFILE 'undo_1.dat'
ENGINE NDB;
테이블스페이스를 생성하고 로그파일 그룹과 데이터 파일을 할당한다.
•
mysql>
CREATE TABLESPACE ts_1
ADD DATAFILE 'data_1.dat'
USE LOGFILE GROUP lg_1
ENGINE NDB;
Disk Data table을 생성한다. 위에서 생성한 테이블스페이스를 데이터 영역으로 사용
•
한다.
mysql>
CREATE TABLE dt (
id int not null auto_increment,
value varchar(300),
primary key (id)
)
TABLESPACE ts_1 STORAGE DISK
ENGINE NDB
DEFAULT CHARSET=UTF8;