2009년 6월 14일 일요일

MySQL Cluster 노드 기동/정지

Management Node, Data Node, SQL Node의 각 노드의 기동과 정지 방법에 대해서 알아보자.

Management Node의 기동
MySQL 인스톨디렉토리/bin의 아래 (mysqld, mysqld_safe등과 같은 디렉토리)에 ndb_mgmd라고 불리우는 프로그램이 있다.

이것이 Management Node 실체로 이것을 실행하면 Management Node를 기동할 수 있다.

인수 -f로 설정파일 config.ini를 지정할 수 있다.

Management Node의 기동
shell> ndb_mgmd -f /path/to/config.ini

Management Node로의 접속은 bin아래에 있는 ndb_mgm이라는 프로그램을 이용한다.

Management Node하고 같은 호스트에서 인수 없이 ndb_mgm명령어를 실행하면 Management Node에 접속가능하다.

여기에서 일련의 관리조작을 수행하는 것이 가능하다.

Management Node로의 접속
shell> ndb_mgm

SHOW 명령어를 실행하면 설정한 노드로의 접속 상황을 확인할 수 있다.

SHOW명령어에 의한 접속상황을 확인
ndb_mgm>SHOW
Connected to Management Server at: localhost:1186
Cluster Configuration
------------------------
[ndbd(NDB)] 2 node(s)
id=2 .....

id는 config.ini에서 설정한 Id의 값이 된다.

Data Node의 기동

Data Node의 기동의 흐름은 다음과 같다.

①Management Node에 접속해 자신의 Data Node의설정정보를 취득한다.
②읽어들인 설정정보를 기초로 Data Node를 기동한다.

따라서 Data Node기동시에는 Management Node를 특정할 수 있는 정보(호스트명, 포트번호)를 지정한다.

Data Node의 기동
shell>ndbd --ndb-connectstring="192.168.0.1" --initial <--처음 기동할 때
shell>ndbd --ndb-connectstring="192.168.0.1"

--ndb-connectstring에서는 Management Node의 호스트명, 포트 번호를 지정한다.

Management Node의 포트 번호의 디폴트값은 1186으로 config.ini에 명시적으로 설정하지 않은 경우에는 디폴트값이 쓰여지기 때문에 여기에서 지정할 필요는 없다.

또 처음 기동할 때에는 --initial을 지정한다. 그 다음의 기동시에는 --initial을 지정하지 않고 기동한다.
Data Node는 테이블 데이터라든지 REDO로그 등의 기동/복구에 필요한 데이터를 정기적으로 디스크에 써낸다.

--initial을 지정하면 이것들의 데이터 파일을 재 작성한 다음에 기동할 때 수정한다.

그렇기 때문에 어플리케이션 가동후에 정상운용으로 정지나 기동을 하는 경우에는 --initial을 지정해서는 안된다.

초기 상태에서는 기동후 조금 시간이 걸린다. 지금 어느 단계에 있는지에 대해서 알아보고 싶으면 ndb_mgm 콘솔에서 노드 ID STATUS라는 명령어를 사용하면 된다.

노드 ID STATUS명령어로 상태확인
ndb_mgm> 3 STATUS
Node 3: starting (Phase 4) (Version 5.1.14)

starting은 현재 기동중이라는 것을 나타낸다. 또 Management Node의 ndb_1_cluster.log라는 파일에는 기동상태의 변화가 상세하게 기술되어 있다.

마지막으로 기동이 완료된 시점에서 ndb_mgm콘솔에 Node 2: Started (version 5.1.14)등의 메세지가 자동적으로 출력된다.

또 SHOW명령어를 실행했을 때에 [ndbd(NDB)] 엔트리의 출력이 다음과 같이 되어있으면 기동이 완료되었다는 것을 의미한다.

SHOW명령어의 실행
ndb_mgm> SHOW
Connected to Mangement Server at: localhost:1186
Cluster Configuration
-------------------------------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.2 (Version: 5.1.14, Nodegroup: 0, Master)
id=3 @192.168.0.3 (Version: 5.1.14, Nodegroup: 0)


SQL Node의 기동
SQL Node는 mysqld에 해당하는 것으로 통상의 흐름처럼 my.cnf의 설정항목을 기술하고 mysqld_safe를 이용해서 mysqld프로세스를 기동한다.

다만 my.cnf에는 MySQL Cluster특유의 설정파라미터가 있어 다음과 같이 추가할 필요가 있다.

[mysqld]에 다음의 엔트리를 추가
ndbcluster
ndb-connectstring=

ndbcluster에 의해서 MySQL Cluster를 사용하는 것을 선언하고 ndb-connectstring에 의해서 Management Node에 접속하기 위한 정보를 지정한다.

config.ini에서 사전에 할당해놓은 SQL Node의 번호가 적당하게 할당된다.

ndb_mgm콘솔에서 [mysqld(API)] 엔트리 출력이 바뀐 것을 확인할 수 있다.

SHOW 명령어로 확인
ndb_mgm> SHOW
Connected to Mangement Server at: localhost:1186
Cluster Configuration
-------------------------------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.0.2 (Version: 5.1.14, Nodegroup: 0, Master)
id=3 @192.168.0.3 (Version: 5.1.14, Nodegroup: 0)

[ndb_mgmd(NDB)] 1 node(s)
id=1 @192.168.0.1 (Version: 5.1.14)

[mysqld(API)] 4 node(s)
id=4 @192.168.0.4 (Version: 5.1.14)
id=5 (not connected, accepting connect from any host)

남은 SQL Node를 기동하면 SHOW명령어 실행결과로 id=5부분이 id=4하고 같게 된다.

노드의 정지

노드 전체를 정지시킬려면 ndb_mgm콘솔에서 다음과 같이 SHUTDOWN명령을 실행한다.

Node의 정지
ndb_mgm> SHUTDOWN

이것에 의해서 Management Node하고 Data Node가 정지한다. SQL Node는 기동된 상태이지만 Data Node가 멈춰있기 때문에 NDB스토리지엔진을 작성하는지는 못한다.

Data Node를 개별로 정지하는 것은 ndb_mgm콘솔에서 다음처럼 실행한다.

Data Node의 정지
ndb_mgm> node_id STOP

node_id에는 Data Node 노드 번호를 지정한다. 이번 예의 경우에 nodeid=2로 기동했으므로 2 STOP이라고 실행하게 되면 Data Node를 정지시킬 수 있다.