Skip to content

5 노드 MySQL Cluster 구축하기

5 노드 MySQL Cluster 구축하기

MySQL Cluster
MySQL Cluster는 MySQL (Network Database) Cluster를 의미한다.

노드 및 네트워크 구성

클러스터의 노드는 Management 노드 1대, Data 노드 2대, SQL 노드 2대이다. 그래서,

총 5대의 노드로 구성된 클러스터로 구성하였다.
클러스터 구성에 사용할 실제 서버가 없는 관계로 VirtualBox? 라는 가상화 어플리케

이션으로 5개의 가상머신을 생성하여 클러스터의 성능보다는 기능 테스트에 중점을
두었다.
클러스터 노드 구성(노드명, 아이피)

linux-mgmt, 192.168.1.1
linux-ndbd1, 192.168.1.11
linux-ndbd2, 192.168.1.12
linux-sql1, 192.168.1.21
linux-sql2, 192.168.1.22

우선 하나의 노드에 CentOS 5를 설치하고, MySQL 5.1.17-beta버전을 설치하였


다. 그리고 다음과 같이 추가로 필요한 4개의 가상 머신을 생성한다.
vboxmanage clonevdi d:virtualhardlinux-mgmt.vdi
d:virtualhardlinux-ndbd1.vdi
vboxmanage clonevdi d:virtualhardlinux-mgmt.vdi
d:virtualhardlinux-ndbd2.vdi
vboxmanage clonevdi d:virtualhardlinux-mgmt.vdi
d:virtualhardlinux-sql1.vdi
vboxmanage clonevdi d:virtualhardlinux-mgmt.vdi
d:virtualhardlinux-sql2.vdi
각 노드간 통신을 위하여 Internal Network 구성

vboxmanage modifyvm Linux-ndbd1 -nic1 intnet
vboxmanage modifyvm Linux-ndbd1 -intnet1 testnet
vboxmanage modifyvm Linux-ndbd2 -nic1 intnet
vboxmanage modifyvm Linux-ndbd2 -intnet1 testnet
vboxmanage modifyvm Linux-sql1 -nic1 intnet
vboxmanage modifyvm Linux-sql1 -intnet1 testnet
vboxmanage modifyvm Linux-sql2 -nic1 intnet
vboxmanage modifyvm Linux-sql2 -intnet1 testnet
vboxmanage modifyvm Linux-mgmt -nic1 intnet
vboxmanage modifyvm Linux-mgmt -intnet1 testnet
각 노드의 네트워크 설정

  • 각각의 노드에 내부 네트워크에서 사용될 고정 아이피를 할당한다.
  • 사용하는 Linux배포판의 규칙에 따르고, CentOS의 경우
    /etc/sysconfig/network-scripts/ifcfg-eth0 파일을 편집한다.
  • 다음은 Management 노드의 설정예이다.
    DEVICE=eth0
    ONBOOT=yes
    BOOTPROTO=none
    NETMASK=255.255.255.0
    IPADDR=192.168.1.1
    USERCTL=no
    PEERDNS=yes
    GATEWAY=192.168.40.42
    TYPE=Ethernet
    IPV6INIT=no

Data 노드(NDBD) 설치 & 설정

데이터 노드는 linux-ndbd1(192.168.1.11), linux-ndbd2(192.168.1.12) 이다.

데이터 노드에서는 NDBD 프로세스가 실행되어야 한다.

MySQL 바이너리의 압축을 풀어 /usr/local/mysql 에 복사한다.

설정파일 편집

shell> vi /etc/my.cnf
데이터 노드 /etc/my.cnf

MYSQLD

  1. NDB storage engine
    ndbcluster
  2. IPADDR of management server
    ndb-connectstring=192.168.1.1
    SQL 노드(MYSQLD) 설치 & 설정
    SQL 노드는 Data노드와 유사한 설치 과정을 거친다. 그러나 반드시 MySQL 데이터

    베이스의 초기화 스크립트로 서버를 초기화하여 클라이언트로 연결이 가능한지 확
    인한다.
    SQL 노드도 /usr/local/mysql 에 설치한다.

    설정파일 편집

    shell> vi /etc/my.cnf
    SQL 노드의 /etc/my.cnf

    MYSQL_CLUSTER
  3. IPADDR of management server
    ndb-connectstring=192.168.1.1
    Management 노드 설치 & 설정
    ROOT 사용자로,

    설치


    shell> mkdir /usr/local/mysql-cluster
    shell> cp /usr/local/src/mysql-5.1.18-beta-pc-linux-gnu-i686/bin/ndb_mgm*
    /usr/local/mysql-cluster/
    설정

    shell> vi /usr/local/mysql-cluster/config.ini
    Management 노드의 /usr/local/mysql-cluster/config.ini

    NDBD DEFAULT
    NoOfReplicas=2
    DataMemory=10M
    IndexMemory=5M

  4. mgm node
    NDB_MGMD
    hostname=192.168.1.1
    datadir=/var/lib/mysql-cluster
  5. data node1
    NDBD
    hostname=192.168.1.11
    datadir=/usr/local/mysql/data
  6. data node2
    NDBD
    hostname=192.168.1.12
    datadir=/usr/local/mysql/data
  7. SQL node1
    MYSQLD
    hostname=192.168.1.21
  8. SQL node2
    MYSQLD
    hostname=192.168.1.22
    위 설정에서, MySQL Cluster는 기본적으로 데이터와 인덱스를 모두 메모리에 저장

    하기 때문에 Data노드에서 사용할 데이터 영역과 인덱스 영역의 크기
    (DataMemory?=10M, IndexMemory?=5M)를 지정하였다.
    MySQL 클러스터 시작하기
    클러스터를 처음 시작하기 위해서는 다음과 같은 과정을 거친다.

    Management 노드 프로세스를 실행 (as root)

    shell> ndb_mgmd -f /usr/local/mysql-cluster/config.ini
    Data 노드의 NDBD 프로세스 시작 (as mysql)

    shell> cd /usr/local/mysql/bin
    shell> ndbd –initial
    –initial 옵션에 주의한다. 클러스터를 처음 시작하거나 설정 파일이 변경된 경우만

    이 옵션을 사용한다. 이 옵션은 데이터 영역을 초기화 한다.
    사용자 삽입 이미지

SQL 노드 프로세스 시작 (as mysql)


shell> cd /usr/local/mysql
shell> ./bin/mysqld_safe –user=mysql &

MySQL Cluster 상태 확인

Management 노드의 ndb_mgm 유틸리티를 사용하여 클러스터의 상태를 확인할 수 있다.
사용자 삽입 이미지

MySQL Cluster 사용하기

테스트용 테이블 생성

mysql> create table t
(id int not null auto_increment,
value varchar(300), primary key (id))
ENGINE NDB
DEFAULT CHARSET=UTF8;
MySQL Cluster 테이블 생성시 반드시 스토리지 ENGINE 타입을 ‘NDB’ 또는

‘NDBCLUSTER’로 지정한다.

사용자 삽입 이미지
사용자 삽입 이미지

MySQL Cluster 정지하기

MySQL 클러스터를 정지하고자 할 때는 다음과 같이한다.

Management 노드 정지

shell> ndb_mgm -e shutdown

  • Data 노드와 Management 노드를 정지한 후, SQL 노드를 정지한다.
    SQL 노드 정지

    shell> mysqladmin -uroot shutdown
    MySQL Cluster Disk Data Tables
    기본적으로 MySQL Cluster는 데이터와 인덱스를 모두 메모리에 저장한다. 그러나,

    MySQL 5.1.6이상부터 데이터를 디스크에 저장하는 기능을 제공한다. (* 주의할 사항
    은, Disk data table도 인덱스는 메모리에 저장한다.)
    Disk Data Table 만들기

    로그그룹을 생성하고 undo로그 파일을 할당한다.

    mysql>
    CREATE LOGFILE GROUP lg_1
    ADD UNDOFILE ‘undo_1.dat’
    ENGINE NDB;
    테이블스페이스를 생성하고 로그파일 그룹과 데이터 파일을 할당한다.

    mysql>
    CREATE TABLESPACE ts_1
    ADD DATAFILE ‘data_1.dat’
    USE LOGFILE GROUP lg_1
    ENGINE NDB;
    Disk Data table을 생성한다. 위에서 생성한 테이블스페이스를 데이터 영역으로 사용

    한다.
    mysql>
    CREATE TABLE dt (
    id int not null auto_increment,
    value varchar(300),
    primary key (id)
    )
    TABLESPACE ts_1 STORAGE DISK
    ENGINE NDB
    DEFAULT CHARSET=UTF8;

사용자 삽입 이미지

Published inLinux