본문 바로가기
서버/리눅스

MySQL Cluster 7.1 설치기 - CentOS 5.x

by 사악신 2013. 5. 28.


총 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 을 통하여 연결을 확인한다.



반응형

댓글