레이블이 sql node인 게시물을 표시합니다. 모든 게시물 표시
레이블이 sql node인 게시물을 표시합니다. 모든 게시물 표시

2009년 6월 15일 월요일

MySQL Cluster - SQL문의 실행

db1이라는 데이터베이스를 준비해서 그곳에 테이블을 작성하는 조작을 해보자.

우선 SQL Node의 어딘가에서 데이터베이스 작성을 수행한다.

5.0까지는 작성한 데이터베이스 정보가 다른 SQL Node에 전달되지 않기 때문에 모든 SQL Node에서 각각 CREATE DATABASE명령어를 실행할 필요가 있었다.

5.1부터는 다른 SQL Node가 기동되어 있으면 그 SQL Node에서 데이터베이스가 자동적으로 작성되기 때문에 수고를 덜 수 있게 되었다.

데이터베이스 db1의 작성
mysql>CREATE DATABAE db1;
mysql>USE db1;

다음으로 어딘가 한 군데의 SQL Node에서 테이블을 작성한다. 다른 SQL Node에는 자동적으로 그 메세지가 전달되어 테이블이 만들어진다. 이것은 5.1이후 버전만이 아니라 5.0이전에서도 같다.

테이블의 작성
mysql> CREATE TABLE tbl1(col1 INT PRIMARY KEY, col2 VARCHAR(10)) ENGINE=NDBCLUSTER;

테이블을 작성했으면 그 다음은 보통 SELECT/INSERT/UPDATE/DELETE문등을 실행한다.
실행결과는 다른 SQL Node에서도 곧바로 볼 수 있다.

이것은 어느 SQL Node도 Data Node에 접근함으로 레코드를 조작/취득하고 있고 Data Node는 동기 replication에 의해서 언제나 일관된 값을 되돌려주는 것이 보증되어있기 때문이다.

예를 들어 , Node id=4의 SQL Node에서 다음과 같이 INSERT문을 실행한다.

레코드의 삽입
mysql> INSERT INTO tbl1 values(100, 'abc');

tbl1의 내용을 Node id=5의 SQL Node에서 보면 커밋후의 값이 보인다.

tbl1 내용을 확인
mysql> SELECT * FROM tbl1;
+---------+----------+
| col1 | col2 |
+---------+----------+
|100 | abc |
+---------+----------+

일부 클러스터형 RDBMS에서는 어느 노드에서의 커밋 결과가 다른 노드에는 곧바로 반영되지 않는 문제가 있지만 MySQL Cluster에서는 이런 문제는 발생하지 않는다.




2009년 5월 30일 토요일

MySQL 개요2

◆Data Node(ndbd)

Data Node는 MySQL Cluster의 중핵에 해당되는 것으로 테이블 데이터의 분산관리, 동기 replication, 분산 트랜잭션 제어, failover/recovery등을 담당한다. 

실제로는 ndbd라는 프로세스가 처리를 수행한다. 

다른 말로 말하면 Data Node를 기동하기(MySQL Cluster를 이용하기)위해서는 ndbd프로세스를 
새롭게 기동할 필요가 있다는 말이다. 

◆SQL Node(mysqld) 
SQL Node는 Data Node에 대해서 테이블 데이터의 취득, 트랜잭션제어등을 지시하기 위한 노드이다. 
MySQL Cluster에서는 NDB API 라는 인터페이스가 있어서 SQL Node에서 NDB API를 이용해서

Data Node에 접근함으로써 테이블데이터 취득, 트랜잭션 제어등을 수행할 수 있다. 

mysqld는 이 NDB API를 호출하는 코드를 가지고 있어 (sql/ha_ndbcluster.cc), mysqld에서부터 이용자가 NDB스토리지엔진에 접근했을 경우에는 
mysqld가 내부적으로 NDB API경유로 Data Node에 접근하고 결과를 되돌리는 처리를 수행하고 있다. 

이때문에  기본적으로 NDB API를 이용자가 의식할 필요는 없다. 

NDB API를  이용한 프로그램을 스스로가 작성해서 직접 Data Node에 접근하는 것도 가능하다.

이 경우에는 mysqld를 필요로 하지 않는다. 

NDB API는 C++로 만들어져 있기 때문에 C++의 지식이 있으면 그다지 곤란없이 프로그램을 작성할 수 있다. 


◆Management Node(ndb_mgmd)

Management Node는 Data Node와 SQL Node관리를 수행하기 위한 노드이다. 

MySQL Cluster에서는 각 노드에  특별한 노드 번호를 할당해서 식별하고 있다. 

또 Data Node에는 특유의 설정파라미터가 다수 있다.  이것의 정보는 Management Node가 일괄 관리한다. 

Data Node와 SQL Node는 기동시에 우선 Management Node에 접속해서 자기 자신의 설정정보를 얻거나  노드 번호에 
관한 정보(예를 들면 노드 번호3은 SQL Node인가 Data Node인가 Management Node인가하는 정보)를 취득하거나 한다. 

MySQL Cluster가 기동한 뒤에는 큰 부하가 되는 처리는 Management Server에 할당되지 않기때문에  장비의 스펙으로서  고성능의 것이 요구되어지지 않는다.