총 3대의 서버를 두고 여건상 아래와 같이 세팅해보았다.
서버#1 |
서버#2 |
서버#3 |
MySQL Data Node MySQL Server Node |
MySQL Data Node MySQL Server Node |
MySQL Management HAProxy |
그리고 MySQL 5.1.x 버전을 사용하여야하기에 현재 버전보다 조금 낮은 버전을 설치하였다. 설치를 위하여 mysql 계정을 추가하고 /home/mysql 디렉토리에 바이너리를 다운로드 받아 설치하였다.(설치 문서에는 /usr/local/mysql 을 사용할 것을 권하고 있다.)
#wget http://mirror.cogentco.com/pub/mysql/MySQL-Cluster-7.1/mysql-cluster-gpl-7.1.26-linux-x86_64-glibc23.tar.gz
해당 파일을 풀면 아래처럼 디렉토리 및 파일들이 생성된다.(그전에 chown -R mysql.mysql * 하여 소유권한을 변경해주어야한다.)
각 서버에 아래의 디렉토리를 생성하고 소유 권한을 mysql 로 변경한다.
#mkdir /var/mysql
#mkdir /var/mysql/data
#mkdir /var/mysql/filesystem
#cd /var
#chown -R mysql.mysql mysql
서버#3에서 /home/mysql/support-files/config.ini 파일을 생성한다.
[NDBD DEFAULT]
NoOfReplicas: 2
DataDir: /var/mysql/data
FileSystemPath: /var/mysql/filesystem
MaxNoOfExecutionThreads: 8 <- CPU 코어 개수만큼...
# Data Memory, Index Memory, and String Memory
DataMemory: 600M
IndexMemory: 100M
BackupMemory: 64M
[MGM DEFAULT]
PortNumber: 1186
DataDir: /var/mysql/data
[NDB_MGMD]
NodeId: 1 <- ID 는 관리하기 편한 값으로 정해서 사용
HostName: 서버#3의 IP
ArbitrationRank: 1
[NDBD]
NodeId: 11
HostName: 서버#1의 IP
[NDBD]
NodeId: 12
HostName: 서버#2의 IP
#
# Note: The following can be MySQLD connections or
# NDB API application connecting to the cluster
#
[API]
NodeId: 51
HostName: 서버#1의 IP
[API]
NodeId: 52
HostName: 서버#2의 IP
서버#1, 서버#2에서 아래의 설치 스크립트를 실행한다.
#./scripts/mysql_install_db --user=mysql
서버#1, 서버#2에서 /etc/my.cnf 파일을 생성한다. 이때 socket 경로 및 파일명을 /var/lib/mysql/mysql.sock 로 한 것은 패키지로 설치되어 mysql 과 연동되는 다른 프로그램들을 위해서다.
#vi /etc/my.cnf
[mysqld]
ndbcluster
ndb-connectstring=서버#3의 IP
datadir=/var/mysql/data
basedir=/home/mysql
port=5000
socket=/var/lib/mysql/mysql.sock
[mysql_cluster]
ndb-connectstring=서버#3의 IP
[mysql]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock
상기 작업들이 모두 끝났으면 서버#3 으로 가서 management 를 실행한다.
#/home/mysql/bin/ndb_mgmd -f /home/mysql/support-files/config.ini --configdir=/home/mysql/data --initial
참고로 종료 방법은 다음과 같다.
#/homde/mysql/bin/ndb_mgm -e shutdown
서버#1, 서버#, 로 가서 mysql 을 실행한다.
#/home/mysql/bin/mysqld_safe &
서버#3에서 ndb_mgm 을 실행하여 정상적으로 동작하는지 확인한다.
#/home/mysql/bin/ndb_mgm
ndb_mgm>show
클러스터링 동작 여부를 확인하기 위하여, 서버#1 또는 서버#2 의 mysql 에 접속하여 test 데이터베이스에 아래와 같이 테이블을 생성해본다.
mysq>create table example (id int) engine=ndb;
이 때 주의할 점은 반드시 데이터베이스 엔진을 ndb 를 사용하여야한다는 점이다. isam 이나 innoDB 의 경우 클러스터링이 되지 않는다.
서버#1, 서버#2 의 MySQL을 서비스에 등록하여 사용하기 위해서는, 우선, support-files 디렉토리 아래 mysql.server 파일을 아래와 같이 수정한다.
#vi mysql.server
basedir=/home/mysql
datadir=/var/mysql/data
해당 파일을 /etc/init.d 디렉토리 아래 mysqld 라는 이름으로 복사한다. 이후, ntsysv 에서 사용할 수 있도록 등록한다.
# chkconfig --add mysqld
# chkconfig --level 2345 mysqld on
서버#3 에서 ndb_mgmd 를 서비스에 등록하여 사용하기 위해서 아래의 파일을 생성한다.
#vi /etc/init.d/ndbd
#!/bin/bash
# chkconfig: 235 82 20
# description: MySQL Cluster management server start/stop script
configini=/home/mysql/support-files/config.ini
configdir=/home/mysql/data
bindir=/home/mysql/bin
STARTMGM="$bindir/ndb_mgmd -f $configini --configdir=$configdir --initial"
start() {
$STARTMGM
}
stop() {
killall -15 ndb_mgmd
sleep 1
killall -9 ndb_mgmd
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
start
RETVAL=$?
;;
*)
echo $"Usage: $0 {start|stop|restart}"
exit 1
esac
ntsysv 에서 사용할 수 있도록 등록한다.
#chkconfig --add ndbd
#chkconfig --level 2345 ndbd on
최초 설치 후, 각 노드들의 연결이 되지 않을 경우 아래와 같이 수동으로 시도해본다.
데이터 혹은 API 노드에서 /home/mysql/bin/ndbd 를 직접 실행한다.
API 노드에서 mysql 을 실행한 다음, ndb 엔진을 사용한 테이블을 생성해본다.
이후 ndb_mgm 을 통하여 연결을 확인한다.
'서버 > 리눅스' 카테고리의 다른 글
MySQL Cluster 7.1 Disk Data Storage 사용하기 (0) | 2013.06.05 |
---|---|
nginx load balancer 구축기 - Cent OS (0) | 2013.05.28 |
collectd Exec 플러그인을 사용하여 HAproxy 모니터링하기 - CentOS (0) | 2013.05.25 |
HAProxy 로 MySQL 로드밸런싱 구축하기 - CentOS 5.x (0) | 2013.05.24 |
phpMyAdmin 설치 및 복수 MySQL 서버 연동 - CentOS 5.x (0) | 2013.05.24 |
댓글