처음엔 MYSQL이 설치되어 있는 VM으로 셋팅을 시도 했지만 계속 되는 실패로 새로 VM을 만들어 세팅을 시작해 봤다.

MYSQL은 MYSQL Cluster와 충돌을 일으키는거 같진 않지만, 필히 삭제를 하거나 깨끗한 상태로 셋팅을 시작하길 바란다!

 1. 시작 전에!

일단 Mysql Cluster를 셋팅하기 전에 Cluster가 뭔지는 알아야하지 않을까? 

 
http://docs.sun.com/source/mysql-refman-5.1/mysql-cluster.html

Mysql Cluster는 총 3개의 요소로 구성이 되는데 SQL Nodes와 NDB군 NDB Management서버가 존재한다.
(한대에 모든 요소를 구성할 수 있고, 각각의 요소를 모두 다른 컴퓨터로 나눌 수도 있다.)

역활은 다음과 같다!
   SQL Nodes : 각종 어플리케이션에서 날라오는 쿼리를 받아드린다! 그리고 ndb군에게 쿼리를 실행시킨다.
   NDB군 : 데이터를 가지고 있는 DB들이 모여있군 군집. INSERT나 UPDATE는 모두 공유를 하여 모든 NDB들이 항상 똑같은 데이터를 가질 수 있게 동기화를 한다. 모든 노드는 거미줄 형태로 연결되어 있으므로 하나의 DB가 죽더라도 다른 DB가 그 역활을 대신 해준다.
  NDB Management : 
NDB를 관리하는 요소로써 어떤 NDB가 죽었고, 살아있고를 관리해주는 서버이다.


개념은 이렇다. 
즉, 한대의 Mysql만 서비스 한다면 한번에 많은 사람들이 접속하여 디비가 죽어버려 서비스를 못하는 것을 방지 하기 위한 시스템이다.


 2. 다운로드와 설치

이해를 했다면 이제 셋팅을 시도해야할 차례이다! Mysql Cluster 소스코드를 다운 받아보자!
아참, 글쓴이는 CentOS를 VM으로 설치하여 셋팅하였다.

wget http://www.mysql.com/get/Downloads/MySQL-Cluster-7.1/mysql-cluster-gpl-7.1.5.tar.gz/from/http://mirror.khlug.org/mysql/


위와 같은 명령어로 Mysql Cluster를 다운받을 수 있다.

groupadd mysql

useradd -g mysql mysql

tar xvfz mysql-cluster-gpl-7.1.5.tar.gz

cd mysql-cluster-gpl-7.1.5


위의 4개의 명령어를 쓰자. 무슨 말인지 알것이라 믿고 설명은 생략한다.

이제 받은 소스파일을 컨피규어를 하고 make를 이용하여 설치해야한다. 설정은 다음과 같다.

./configure --prefix=/usr/local/mysqlc --with-plugins=max --with-ssl=/usr/local/ssl --with-charset=utf8 --with-extra-charsets=ucs2


위와 같은 옵션으로 컨피규어를 한다.

make

make install

mkdir /usr/local/mysqlc/support-files

cp -R support-files/* /usr/local/mysqlc/support-files


다음과 같이 make install 후 support-files의 내용을 복사한다. 이유는 support-files내에 사용해야할 파일이 있기 때문이다. 저 폴더 안에 있는 대부분의 내용이 알차고 쓸만 하기 때문에 복사하는 것이다~

cd /usr/local/mysqlc

./bin/mysql_install_db --user=mysql

mkdir ndb_data

mkdir mysql-cluster

mkdir etc

cp support-files/my-medium.cnf etc/my.cnf


mysql db를 셋팅을 한 뒤 support-files에 있는 파일중 하나를 우리가 이용할 폴더로 옮긴다!

 3. 셋팅

vi etc/my.cnf


위와 같이 방금 옮긴 파일을 열어보자!

이미 수 많은 설정들이 기록되어 있는데, 여기에 2줄을 추가 할 것이다!

# The MySQL server

[mysqld]

ndbcluster <- 추가

port = 3306

socket = /tmp/mysql.sock

skip-external-locking <- 수정

key_buffer_size = 16M

max_allowed_packet = 1M

table_open_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M


파일 내에 위와 같은 부분을 찾아 수정해준다.

파일을 저장한 뒤,

vi etc/config.ini


vi로 파일을 하나 생성한 뒤 아래의 설정문들 저장한다.

 

[NDBD DEFAULT]

NoOfReplicas: 2

DataDir: /usr/local/mysqlc/ndb_data

 

[MGM DEFAULT]

PortNumber: 1186

DataDir: /usr/local/mysqlc/ndb_data

 

[NDB_MGMD]

Id: 1

HostName: localhost

 

[NDBD]

Id: 10

HostName: localhost

 

[NDBD]

Id: 11

HostName: localhost

 

[API]

Id: 20

HostName: localhost

이 예제에서는 1대의 컴퓨터에 3가지 요소를 모두 구성할 것이기 때문에 모두 localhost로 지정했다.

 4. 실행
모든 셋팅은 끝났다. 이제 클러스터를 실행시켜보면 된다. 실행시키는 명령어는 다음과 같다.

libexec/ndb_mgmd --initial -f etc/config.ini

libexec/ndbd -c localhost:1186

libexec/ndbd -c localhost:1186

share/mysql/mysql.server start

bin/ndb_mgm -e show


첫째 줄이 매니저를 구동시키는 명령어이고, 2,3번째줄이 NDB, 4번째 줄이 SQL을 구동시키는 명령어이다.

5번째줄은 모든 요소들이 제대로 연결 되었는지 확인 하는 명령어이다.

Connected to Management Server at: localhost:1186

Cluster Configuration---------------------

[ndbd(NDB)]

2 node(s)

id=10 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0, Master)

id=11 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4, Nodegroup: 0)

[ndb_mgmd(MGM)]

1 node(s)

id=1 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4)

[mysqld(API)]

1 node(s)

id=20 @127.0.0.1 (mysql-5.1.44 ndb-7.1.4)


모두 정상적으로 연결되어 있다면 위 내용이 출력될 것이다.

모든 설정이 되고 잘 구동이 된다. 이제 사용만 하면 되는데, 그냥 평소에 쓰던 Mysql처럼 사용하면 된다.

bin/mysql -u root -p 으로 접속하여 테이블을 추가하고 데이터를 넣고 기존의 Mysql이랑 바뀐 점은 없다!

 상세하게 본다면 있지만, 사용에 있어서 변한 점은 없으니 편하게 쓰면 된다. 모두 알아서 잘 저장될 거시다.

 5. 종료
종료는 SQL과 매니저만 종료시켜주면 된다.

share/mysql/mysql.server stop

bin/ndb_mgm -e shutdown


 6. 요소 별로 다른 머신에 설치하기

한 컴퓨터에 모든 요소를 설정시키고 구동 시키는 건 큰 무리가 없었다. 사실 이거 성공시키려고 3일동안 삽질만 했지만.......

3개의 요소를 모두 다른 컴퓨터에 분산시키는 방법도 또한 간단하다.

 1. "2. 다운로드와 설치"까지는 모든 컴퓨터에 똑같이 처리해준다.
 2. etc/config.ini파일은 매니저에서만 쓰이기 때문에 매니저서버가 될 컴퓨터만 셋팅해준다.
 3. etc/my.cnf는 SQL과 NDB에서 사용되니 이 2개 요소의 컴퓨터에 셋팅해준다.
 4. 다음과 같이 etc/config.ini를 수정해준다.
[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=80M
IndexMemory=52M

[NDB_MGMD]
id=1
hostname=IP1
datadir=/var/lib/mysql-cluster

[NDBD]
id=2
hostname=IP2
datadir=/usr/local/mysqlc/data

[NDBD]
id=3
hostname=IP3
datadir=/usr/local/mysqlc/data

[API]
id=4
hostname=IP4
 5.etc/my.cnf의 특정 부분을 다음과 같이 수정한다.

#추가

[mysql_cluster]

ndb-connectstring=IP1


server-id=4

 

# The MySQL server

[mysqld]

ndbcluster

ndb-connectstring = IP1 
port = 3306

socket = /tmp/mysql.sock

skip-external-locking

key_buffer_size = 16M

max_allowed_packet = 1M

table_open_cache = 64

sort_buffer_size = 512K

net_buffer_length = 8K

read_buffer_size = 256K

read_rnd_buffer_size = 512K

myisam_sort_buffer_size = 8M


 7. 각 서버마다 요소를 구동시켜 주면 작동이 될 것이다!


6. 끝
MySQL Cluster를 구성하려고 3일동안 밤낮 가리지 않고 셋팅을 하였고, 결국 성공을 했습니다다ㅜㅜ 
글쓴이처럼 뻘짓을 하는 사람이 다음부턴 없기를 바라면서 글을 썼는데, 부족한 부분이 많은 것 같네요..

문제가 발생하는 부분이나 글 내용 중 수정해야할 부분이 있다면 댓글을 달아주면 능력이 되는 대로 바로 답변 및 수정을 하겠습니다!

읽어주셔서 감사합니다.


출처 - http://reve.saro.me/10




'DB > MySQL' 카테고리의 다른 글

mysql - 권한 정보 테이블(user, db)  (0) 2013.11.01
mysql - 한글 정렬  (0) 2013.05.14
mysql root password 초기화  (0) 2013.01.03
linux 에서 mysql rpm version install  (0) 2013.01.03
mysql - join  (1) 2012.10.19
Posted by linuxism
,