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)
・・・

amazon cloud ec2 아마존 클라우드 환경 구축 002

아마존 클라우드 서비스에 연결하기.

1. 준비물
 ㅁ 먼저 인스턴스 생성시 저장해 두었던  공개암호 파일

2. 공개암호파일을 이용해 개인 암호파일 생성.
 ㅁ 아마존 클라우드에 접속하기 위해서는 암호파일이 필요하다. 이 암호 파일을 생성하는 모듈은 다음을 사용한다.
 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

자새한 내용은 아래 참조
http://enigma777.egloos.com/3279385

xxxx.ppk 파일을 생성.

2. Tera Term 설치
  서버에 연결하는 프로그램은 많이 있지만 개인적으로 teraterm이 젤 편한것 같다.
  다운로드는 아래에서..
 ㅁ http://ttssh2.sourceforge.jp/index.html.en

  Trea Term을 설치후 호스트에 글러벌 IP 를 기입후 SSH2 가 선택된것을 확인후 엔터



접속에 성공하면 암호를 묻는창이 나온다.

아이디는 ec2-user
페스워드는 공백

암호는 1에서 생성한 ppx키를 설정해 주면 된다.

접속 성공.



2013년 4월 7일 일요일

amazon cloud ec2 아마존 클라우드 환경 구축 001

아마존 클라우두 EC2 서버 무료 사용하기..
회사에서 현제 사용하고 있는 테스트 서버실을 패쇠 한다는 연락을 받았다.. 혼방 서버를 운용하고 있는 곳으로 옮기기에는 장소가 부족하다고 해서 테스트 서버구축을 아마존 클라우드로 실행하기로 결정한다.

1. 아마존 클라우드 서버 가입하기.
http://aws.amazon.com/
- 회원 가입하기
- 카드정보입력및, 전화로 인증 등을 해준다.

2. 아마존 클라우드 서버 관리 페이지
https://console.aws.amazon.com/console/home?region=ap-northeast-1

- 등록이 끝나면 위 링크에서 관리가 가능하다.
EC2를 선택, 오른쪽 위 지역 선택에서 클라우드 서버가 가까운곳으로 이동.
 1.Instances 에서 서버를 만들어준다.
 

2. NETWORK & SECURITY
 - security groups 로 이동해 아래와 같이 포트를 추가 해준다.
ping을 날려 보려면, ICMP를 설정. TCP 22 를 추가하면 생성된 클라우드 서버에 접속 가능.

3. 위와같이 하면 클라우드 서버를만들고, 포트를 열어주는것 까지 OK. 위에 접속하기 위해서 글로벌 IP를 취득 하기위해서
- Elastic IPs 텝에 이동 - Allocate New Address 해서 새로운 IP를 취득한다. - 취득시 Instance해둔 서버에 연결