강좌

HOME > 강좌 >
강좌| 리눅스 및 오픈소스에 관련된 강좌를 보실 수 있습니다.
 
MySQL을 이용한 클러스터링 관한연구
조회 : 9,207  


 

 

MySQL을 이용한 클러스터링 관한연구

 

 

 

 

 

본 연구과제는 공개SW Mysql  Database서버를 클러스터링을 하기위해 필요한 여러 가지 기술적인 운영관리기법들에 관한 실무기술에 관한 과제이다.

본 연구보고서의 결과물은 실제 MySQL를 대용량 대이터베이스서버로 활용하고 있는 여러 기업, 기관, 학교등에서 유용하게 활용될 수 있으리라 기대한다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

작성자 : 리눅스포털(www.superuser.co.kr) 수퍼유저코리아 이재석               


 

--------          -------

 

1. MySQL 클러스터의 기본 개념

2. 클러스터링을 위한 MySQL 스토리지 엔진

3. MySQL 크러스터의 한계

4. 클러스터링을 위한 MySQL 설치

           rpm을 이용할 경우

           미리 컴파일된 바이너리를 이용할 경우

           소스 컴파일시 설치방법

5. 클러스터링을 위한 MySQL 설정

           MGM node 설정

           DATA node SQL node 설정

6. MySQL 클러스터의 프로세서 관리

           각 프로세서의 시작

           각 노드 현황 보기

7 .On-line backup

           MySQL 클러스터의 backup

           MySQL 클러스터의 restore


1. MySQL 클러스터의 기본 개념

 

MySQL 클러스터는 share-nothing 시스템에서 in-memory 데이터 베이스의 클러스터링을 구현하게 되며 특정한 하드웨어 및 소프트웨어를 요구하지 않고 병렬 서버구조로 확장이 가능합니다.

 

 

위의 그림에서 보는 바와 같이 크게 3가지 프로세서로 나뉜게 됩니다.

 

MGM node : 다른 노드를 관리하는 매니저 노드이며 다른 노드보다

먼저 실행되며 ndb_mgmd 명령으로 실행됩니다.

NDB node : 클러스터의 데이터를 저장하는 노드이며 ndbd 명령으로

실행됩니다.

SQL node : 클러스터 데이터에 접근하는 노드이며 MySQL 클러스터에서는

NDB 클러스터 스토리지 엔진을 사용하는 MySQL 서버가

SQL 노드입니다.

 

 

여기서 자주 사용되는 용어들에 대해 간략하게 설명 하겠습니다.

Cluster : 일반적으로 Cluster는 하나의 업무를 수행하기 위해 함께 동작하는 컴퓨터 세트.

Configuration Files : 클러스터, 호스트, 노드에 관계된 직접적인 정보를 포함하는 파일

Backup :디스크나 다른 Long-term Storage에 저장되는 모든 클러스터 데이타, 트랜젝션, 로그의 완전한 카피

Restore : 백업에 저장되는 것과 같이 클러스터에 그 전 상태로 되돌리는 것.

CheckPoint : 클러스터에서는 Committed된 트랜잭션을 디스크에 저장하는 시간

Cluster Host : MySQL Cluster의 구성 컴퓨터

Node  : MySQL Cluster의 논리적, 기능적 요소

MGM node : MySQL Cluster에서 다른 노드들의 설정 정보, 노드의 시작과 정지,

네트워크 파티셔닝, 백업과 저장 등을 포함하여 다른 노드들을 관리

SQL node : 데이터 노드안에 저장된 데이터를 Serve 하는 MySQL Server 인스턴스

Data node : 실제 데이터가 저장되는 노드

Node group : 데이터 노드의 집합


2. 클러스터링을 위한 MySQL 스토리지 엔진

 

NDB in-memory storage engine으로 고가용성과 데이터영구성이 특징이며 여러 개의 컴퓨터에 걸쳐서 파티션이 되어 있는 테이블을 구현하기 위해 MySQL Cluster가 사용하는 스토리지 엔진입니다.

The NDB storage engine range of failover load-balancing 옵션으로 구성할 수 있습니다.

그러나, cluster level storage engine으로 start하는게 가장 쉬운 방법입니다.

 MySQL Cluster's NDB storage engine 은 완전한 data set으로 구성됐으며, data cluster내 다른 data에만 의존성이 있다.

이것은 MySQL-Max 5.0 바이너리 배포판에서 찾을 수 있습니다. 이 스토리지 엔진은 현재까지는 여러 형태의 유닉스 버전에서만 지원되고 있습니다


3. MySQL 크러스터의 한계

-        트랙잭션 수행 중의 롤백을 지원하지 않으므로,

 작업 수행 중에 문제가 발생하였다면, 전체 트랙잭션 이전으로

롤백하여야 합니다.

 

-        실제 논리적인 메모리의 한계는 없으므로 물리적으로 허용하는 만큼

 메모리를 설정하는 것이 가능합니다.

 

-        컬럼 명의 길이는 31, 데이터베이스와 테이블 명은 122자까지

길이가 제한된다. 데이터베이스 테이블, 시스템 테이블,

BLOB인덱스를 포함한 메타 데이터(속성정보) 1600개까지만

가능합니다.

 

- 클러스터에서 생성할 수 있는 테이블 수는 최대 128개이다.

하나의 로우 전체 크기가 8KB가 최대입니다.

(BLOB를 포함하지 않은 경우).

테이블의 Key 32개가 최대입니다.

-        모든 클러스터의 기종은 동일해야 합니다.

 기종에 따른 비트저장방식이 다른 경우에 문제가 발생할수 있습니다.

- 운영 중 스키마 변경이 불가능합니다.

- 운영 중 노드를 추가하거나 삭제할 수 없습니다.

- 최대 데이터 노드의 수는 48개입니다..

- 모든노드는 63개가 최대입니다. (SQL node,Data node,매니저를 포함)


4. 클러스터링을 위한 MySQL 설치

rpm을 이용할 경우

mysql_server , mysql-max 둘다 rpm 으로 설치하여야 합니다.

 

미리 컴파일된 바이너리를 이용할 경우

아카이브 파일을 해체하고 바로 이용 할 수 있습니다.

 

소스 컴파일시 설치방법

configure 실행시 –-with-ndbcluster 옵션을 사용하거나 BUILD/complie-pentium-max 구성 스크립트를 사용 할 수 있습니다.

BUILD/complie-pentium-max 구성스크립트 사용시에는 OpenSSL

설치되어있어야 합니다.

 

Ex> 컴파일된 바이너리를 이용할 경우 설치 방법

1. mysql user 추가

# cd /usr/local

# groupadd mysql

# useradd -g mysql mysql

 

2. 압축해제

# tar -xzvf mysql-max-4.1.13-pc-linux-gnu-i686.tar.gz

# ln s /usr/local/mysql-max-4.1.13-pc-linux-gnu-i686 mysql

 

3. 초기 데이터베이스 생성

                      # cd mysql

                      # scripts/mysql_install_db --user=mysql

                      # chown -R  mysql:mysql  .

 

4. 초기 스크립트 생성

                        # cp support-files/mysql.server /etc/rc.d/init.d/
             
# chmod +x /etc/rc.d/init.d/mysql.server
             
# chkconfig --add mysql.server

 

5. MGM (management) 노드

                      # cd /usr/local/mysql/bin/

                      # cp ndb_mgm* /usr/local/bin/

                      # chmod +x ndb_mgm*

 

 

5. 클러스터링을 위한 MySQL 설정

         MGM node 설정

                               # mkdir /var/lib/mysql-cluster
                               # cd /var/lib/mysql-cluster
                               # vi config.ini

                              
[NDBD DEFAULT] 
                        NoOfReplicas=2                
                        DataMemory=80M 
                        IndexMemory=52M            

                        [TCP DEFAULT]               
                        portnumber=2202

                        [NDB_MGMD]      
                        id=1                   
                        hostname=192.168.100.2
                        datadir=/var/lib/mysql-cluster        
 
                        [NDBD]   
                        id=3                               
                        hostname=192.168.200.3              
                        datadir=/usr/local/mysql/data         

                        [NDBD]                                      
                        id=4
                        hostname=192.168.100.4  
                        datadir=/usr/local/mysql/data         

                        [MYSQLD]                                  
                        id=2
                        hostname=192.168.100.5
                        datadir=/usr/local/mysql/data         

 

 

         DATA node SQL node 설정

                               # vi /etc/my.cnf 
                 [MYSQLD]         
                 Ndbcluster                         
                 ndb-connectstring=192.168.100.2

                 [MYSQL_CLUSTER]          
                 ndb-connectstring=192.168.100.2

6. MySQL 클러스터의 프로세서 관리

         각 프로세서의 시작

           Mgm node :  –f  컨피그레이션 파일의 위치
                     # ndb_mgmd -f /var/lib/mysql-cluster/config.ini

                  MGM 노드를 다운시
                    
# ndb_mgm –e shutdown

          

       Data node : --initial  ndbd를 처음 실행할 때와 컨피그레이션이 바뀐 후

                   재시작시 사용
                     # ndbd –initial

        

         SQL node

                  # /etc/rc.d/init.d/mysql.server start

          

           각 노드 현황 보기

                 # ndb_mgm
                     -- NDB Cluster -- Management Client --
                     ndb_mgm> show

                     Connected to Management Server at: 192.168.0.10:1186
                     Cluster Configuration
                     ---------------------
                     [ndbd(NDB)]     2 node(s)
                     id=3   @192.168.100.3  (Version: 4.1.13, Nodegroup: 0, Master)
                     id=4   @192.168.100.4 (Version: 4.1.13, Nodegroup: 0)
                     [ndb_mgmd(MGM)] 1 node(s)
                     id=1    @192.168.100.2 (Version: 4.1.13)
                     [mysqld(API)]   1 node(s)
                     id=2   (Version: 4.1.13)

                     ndb_mgm>

 

7 .On-line backup

         MySQL 클러스터의 backup

                     ndb_mgm> Start [backup-id] backup

              데이터 저장소 아래에 BACKUP이란 디렉터리 이하에

                     BACKUP-[backup-id]디렉터리에 저장되며

                     BACKUP-1-0.3.Data, BACKUP-1.3.ctl, BACKUP-1.3.log

             3개의 파일로 저장됩니다.

 

                     ndb_mgm> Abort backup [backup-id]

                  현재 진행중인 [backup-id]의 백업을 중지할 수 있습니다.

 

         MySQL 클러스터의 restore

                  ndb_restore c [mgm_server_host] n [node_id]

                          b [backup-id] r [/path/to/backup-file]

 

                  -c  : ndb_mgm메니저 노드의 접속 정보

 

                  -n  : 사용할 노드 아이디

 

                  -b  : 사용할 백업 아이디

 

                  -r  : 백업 파일의 위치

        

                 


마지막으로 이러한 클러스터링을 구성하기 위해서는 리눅스가 설치된 인텔 기반 서버이며, 모두 동일한 이더넷 카드(100Mbps 1기가 비트)가 필요합니다.

 

설치 및 사용 시 주의할 점은 MySQL 클러스터는 클러스터 노드 간 커뮤니케이션에 암호화 및 보호 장치가 전혀 없으므로, 웹 상에서 사용하려면 방화벽을 사용하는 등의 보안상의 대책이 필요합니다.

 

위의 유의 사항을 잘 대처한다면 고가용성의 database 클러스터를 구현 가능하며 관리하기도 용이합니다. 필요한 성능만큼 확장이 가능하며 성능에

대한 예측이 가능하고 오픈 소스를 활용하는 것이므로 전체적인 비용 절감의 효과를 가져올 수 있습니다.

 


[원글링크] : https://www.linux.co.kr/home2/board/subbs/board.php?bo_table=lecture&wr_id=1323


이 글을 트위터로 보내기 이 글을 페이스북으로 보내기 이 글을 미투데이로 보내기

 
이재석
본명 : 이재석
e-mail : locli앳superuser.co.kr
소속 : (주)수퍼유저코리아