2013년 4월 10일 수요일

MySQL cluster 7.2 인스톨과 설정

MySQL Cluster 7.2 인스톨 설정

클러스터 구성으로 안정적인 가동을 원한다면、적어도6대이상의 머신이 필요하지만、이번은 테스트 구성이므로 MGM과 SQL서버를 같은OS에 인스톨、datanode×2를 각각의 가상 환경에 구성 한다.
구성 호스트명:역할
mgm(1CPU 512M 10G)・・・MGM(메니지먼트)+API노드(구SQL노드)
datanode1(1CPU 512M 10G)・・・데이터노드1
datenode2(1CPU 512M 10G)・・・데이터노드2

인스톨은 소스인스톨.
먼저 사이트에서 소스를 받아온다.


wget http://dev.mysql.com/get/Downloads/MySQL-Cluster-7.2/mysql-cluster-gpl-7.2.1.tar.gz/from/http://mysql.mirrors.pair.com/
인스톨은 cmake
cmake . -DCMAKE_INSTALL_PREFIX=/var/lib/mysql
make
make install
인스톨은 여기를 참[사이트]를 참고해 、전 노드를 인스톨 한다.

완료되면 먼저mgm노드에서 설정을 한다.
MySQL Cluster의 설정은 my.cnf가 아니라、config.ini를 사용한다.(my.cnf는API노드에서 사용한다).
config.ini의 읽어들이는 순서는 my.cnf와 같으므로 、이하 어딘가의 패스에 작성한다.
/etc/my.cnf
/etc/mysql/my.cnf
$MYSQL_HOME
-DCMAKE_INSTALL_PREFIX에서 설정된 path
$HOME/.my.cnf
소스를 이용한 컴파일을 한경우、my.cnf와 같이 전개한 디렉토리안에config.ini의 샘플이 있으므로 、일단 이것을 카피
$ cd /path/to/mysql-cluster-gpl-7.2.1/support-files
$ cp config.small.ini /etc/config.ini
파일을 열어 자기 환경에 맞추어 변경
$ vi /etc/config.ini

[NDBD DEFAULT]
NoOfReplicas: 2
DataDir: /usr/lib/mysql
FileSystemPath: /usr/lib/mysql
TransactionDeadlockDetectionTimeout: 51200
TimeBetweenEpochsTimeout: 51200
MaxNoOfOrderedIndexes: 5120

DataMemory: 600M
IndexMemory: 100M
BackupMemory: 64M

[MGM DEFAULT]
PortNumber: 1186
DataDir: /usr/lib/mysql

[NDB_MGMD]
NodeId: 1
HostName: 192.168.122.1
ArbitrationRank: 1

[NDBD]
NodeId: 2
HostName: 192.168.122.2

[NDBD]
NodeId: 3
HostName: 192.168.122.3

[API]
NodeId: 4
HostName: 192.168.122.1
ArbitrationRank: 2
[NDBD DEFAULT]에는 글로벌 설정을 한다.
NoOfReplicas・・・복제세트의 수. 2로 설정하면 2x2 의 클러스터 설정이 되지만、이번에는 노드x2 이므로 관계없어보임
DataDir・・pid,에러파일、추적파일 저장패스
FileSystemPath・・・로그、데이터 패스
TransactionDeadlockDetectionTimeout・・・쿼리실행시、다른 노드가 대기하는 시간
MaxNoOfOrderedIndexes・・・순서화된 인덱스의 최대크기

[MGM DEFAULT]はMGM노드의 설정을 적고、[NDB_MGMD]는 데이터노드의공통설정을 기재한다。NodeId는유니크한 번호를설정.
[NDBD]는데이터노드 고유의 설정을 노드수 만큼 기재한다。NodeId는 유니크 하게.
[API]는SQL노드고유의 설정. 등록할 노드수 만큼 기재(이번에는 1개)


카피한 config.ini에는 
TransactionDeadlockDetectionTimeout、 MaxNoOfOrderedIndexes 는 기재되어있지않다、TransactionDeadlockDetectionTimeout 이 디폴트(120밀리초) 면초기 데이터 insert시 lock wait timeout이 발생、
MaxNoOfOrderedIndexes 값을 크게 하지 않으면 테이블 작성시아래 에러가 발생 SQL 실행되지 않음. 
ERROR 1005 (HY000) at line 651: Can't create table 'test_db.test_table' (errno: 136)
하지만값을 너무 크게하면 데이터 노드 부하가 올라간다고 함.
이외、설정가능한 값은 [여기] 를 참조

전체적으로 설정완료되면、MGM노드로부터 관리 프로그램을 기동.

# /var/lib/mysql/bin/ndb_mgmd -f /usr/local/mysql/config.ini --ndb-nodeid=1 --initial
초기기동시나 config.ini을 변경했을시는 --initial옵션을 추가해준다.
정상적으로 기동하면 콘솔 cui에 들어가
# /var/lib/mysql/bin/ndb_mgm
show로 상태확인

ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 192.168.122.2)
id=3 (not connected, accepting connect from 192.168.122.3)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.122.1 (mysql-5.5.15 ndb-7.2.1)

[mysqld(API)] 1 node(s)
id=4 (not connected, accepting connect from 192.168.122.1)

데이터노드、SQL노드가 기동되 있지 않기 때문에  접속되어있는 노드는 mgm노드 뿐

데이터노드 를 기동한다.
mgm노드의 config.ini 정상적으로 기입되어 있다면 기동은 아래 한줄로 OK
# /usr/local/mysql/bin/ndbd --ndb-connectstring="192.168.122.1" --initial
아래 메시지가 표시되면 성공
2011-11-05 02:59:13 [ndbd] INFO -- Angel connected to '192.168.122.1:1186'
2011-11-05 02:59:13 [ndbd] INFO -- Angel allocated nodeid: 3
MGM노드 로 돌아가 상태를 확인

ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.122.2 (mysql-5.5.15 ndb-7.2.1, starting, Nodegroup: 0)
id=3 @192.168.122.3 (mysql-5.5.15 ndb-7.2.1, starting, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.122.1 (mysql-5.5.15 ndb-7.2.1)

[mysqld(API)] 1 node(s)
id=4 (not connected, accepting connect from 192.168.122.1)
데이터 노드가 접속 됨
mysql유저를 작성、data디렉토리에권한을 부여、mysql_install_db실행등 통상적
mysqld와 똑같은 작업을 실시 mysqld를 기동한다

# /var/lib/mysql/support-files/mysql.server start
기동하면 mgm에서 확인

ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.122.2 (mysql-5.5.15 ndb-7.2.1, starting, Nodegroup: 0)
id=3 @192.168.122.3 (mysql-5.5.15 ndb-7.2.1, starting, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.122.1 (mysql-5.5.15 ndb-7.2.1)

[mysqld(API)] 1 node(s)
id=4 @192.168.122.1 (mysql-5.5.15 ndb-7.2.1)
전 노드가 작성되어있는것을 확인
mysql에접속해、데이터베이스、테이블을 작성
mysql> create database ndb_test; Query OK, 1 row affected (0.32 sec)
mysql> use ndb_test;
mysql> create table ndb_test_table (id int(11) auto_increment,data varchar(64), primary key(id)) engine=ndbcluster; Query OK, 0 rows affected (1.79 sec)
ndbcluster가 인식됨。

ここまでできたので、試しに本稼動しているサービスのデータ(約1.9G)を流し込みを行い、通常使ってるSQLを実行することに。
選んだのは会員検索系のSQLで4つのテーブルをinner joinし、さらに15のテーブルをleft joinするという大物!
ちなみにこのクエリをMySQL5.5で実行すると
+--------+
| count |
+--------+
| 252690 |
+--------+
1 row in set (48.38 sec)
約50秒かかった。
クラスタ環境では?

+--------+
| count |
+--------+
| 252690 |
+--------+
1 row in set (6 min 16.19 sec)
・・・

댓글 없음:

댓글 쓰기