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/mysqlmakemake 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: 2DataDir: /usr/lib/mysqlFileSystemPath: /usr/lib/mysqlTransactionDeadlockDetectionTimeout: 51200TimeBetweenEpochsTimeout: 51200MaxNoOfOrderedIndexes: 5120DataMemory: 600MIndexMemory: 100MBackupMemory: 64M[MGM DEFAULT]PortNumber: 1186DataDir: /usr/lib/mysql[NDB_MGMD]NodeId: 1HostName: 192.168.122.1ArbitrationRank: 1[NDBD]NodeId: 2HostName: 192.168.122.2[NDBD]NodeId: 3HostName: 192.168.122.3[API]NodeId: 4HostName: 192.168.122.1ArbitrationRank: 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)
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에 들어가
정상적으로 기동하면 콘솔 cui에 들어가
# /var/lib/mysql/bin/ndb_mgm
show로 상태확인
ndb_mgm> showConnected to Management Server at: localhost:1186Cluster 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> showConnected to Management Server at: localhost:1186Cluster 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를 기동한다
mysqld와 똑같은 작업을 실시 mysqld를 기동한다
# /var/lib/mysql/support-files/mysql.server start
기동하면 mgm에서 확인
ndb_mgm> showConnected to Management Server at: localhost:1186Cluster 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)
・・・