기본구성
mgm node : ndb_mgmd
sql node : mysqld
data node : ndbd
red hat 과 SUSE 등은 ndb와 mgm 데몬 바이너리가 나뉘어져 있는데, 다른 플랫폼은 그냥 하나로 구성됨.
SQL node : Sql 데몬인데 NDB엔진을 사용하는경우 NDB클라이언트로 동작한다.
Data node : NDB. 데몬이 있는 경우 해당 데몬을 설치 할 수 있으며, 설정 등은 sql노드와 동일하다.
SQL 서버 바이너리를 각 노드에 설치하는 경우 데이터노드, 관리노드는 mysql_install_db 스크립트를 실행하지 않는다.
설치
설치 참조 : https://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-install-linux-rpm.html
현재 아래 버전이 제공된다.
맥osx : mysql-cluster-gpl-7.5.5-macos10.12-x86_64.tar.gz
red hat : mysql-cluster-gpl-community-server-7.5.5-1.el7.x86_64.rpm
리눅스 : mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz
- 설치 및 심볼릭링크 : 루트권한 필요, 기본 디렉토리는 /mysql/ 사용
- 레퍼런스상에는 /usr/local/mysql/ 을 심볼릭 링크로 사용
다운로드 받은 파일 압축을 풀고 심볼릭링크를 생성
$ tar -C /usr/local -xzvf mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz
$ ln -s /usr/local/mysql-cluster-gpl-7.5.5-linux-glibc2.5-x86_64.tar.gz mysql
스크립트 실행
$ cd /usr/local/mysql
$ scripts/mysql_install_db --user==mysql
퍼미션 설정
$ chown -R root .
$ chown -R mysql data
$ chgrp -R mysql .
설정파일
SQL노드는 sql서버의 기본 설정파일인 my.cnf , 관리 노드는 config.ini 를 사용한다.
SQL 노드 설정 위치 : 기본 설정파일은 아래의 순서대로 검색한다. 별도 폴더의 설정파일을 사용하는
경우(여러 데몬을 돌리는 경우등) sql노드 실행시 해당 설정을 지정할 수 있다.
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
~/.my.cnf
$ vi /etc/my.cnf
노드별로 큰 차이는 없는데, 일단 공통적으로 ndb-connectstring 값이 관리 서버 위치를 나타낸다.
SQL노드의 경우 ndb 엔진을 사용한다고 알려줘야 한다.
파라미터 정보: https://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-params-api.html
SQL노드 설정 : my.cnf
[mysqld]
user=mysql
port=3306
.
.
# 기타 mysql 설정들
basedir=mysql기본 디렉토리 위치
datadir=데이터위치
tmpdir=tmp위치
.
.
slow_query_log=on
long_query_time=2
# 클러스터 관련 설정
[mysql_cluster]
ndb-nodeid=51 # mysqld 노드 지정
ndb-connectstring=192.168.0.10:1234 # 관리서버IP:포트
ndbcluster=on
default-storage-engine=NDBCLUSTER
ndb-cluster-connection-pool=8 # 커넥션 풀. 관리노드 설정시 api 노드 구성과 관련있다.
관리노드 설정 : config.ini
파라미터 : https://dev.mysql.com/doc/refman/5.6/en/mysql-cluster-params-mgmd.html
임의의 위치에 config.ini를 만든다.
/usr/local/myslq/cluster-data/1/config.ini
# 관리노드 기본포트는 1186
[ndb_mgmd default]
Portnumber=1234
[ndb_mgmd]
NodeId: 1
HostName: 관리노드 아이피
DataDir=/usr/local/mysql/cluster-data/1/
Portnumber=1234
[tcp default]
SendBufferMemory=8M
ReceiveBufferMemory=8M
# 데이터 노드
[ndbd default]
# ndb 쓰레드 수: ndbmtd 에서만 사용하며, 이 값에 의해 LDM 쓰레드 개수가 결정된다.
# LDM 수에 맞게 NoOfFragmentLogParts도 설정되어야 한다.
MaxNoOfExecutionThreads=32
NoOfFragmentLogParts=16
# 기타설정
NoOfReplicas=2
DataMemory=50G
IndexMemory=10G
[ndbd]
NodeId: 11
HostName: 데이터노드 아이피
DataDir=/usr/local/mysql/cluster-data/11/
[ndbd]
NodeId: 12
HostName: 데이터노드 아이피
DataDir=/usr/local/mysql/cluster-data/12/
# NDB 간 별도 ip 구성 시 NDB별 HostName을 지정한다.
[TCP]
NodeId1 = 11
NodeId2 = 12
HostName1=10.0.1.1
HostName2=10.0.1.2
# sql 노드
[mysqld default]
# mysql 데몬의 정보 : 각 시스템에서 실행한 mysqld 의 정보. 각 시스템의 my.cnf 정의 확인해서 맞춰준다.
[mysqld]
NodeId=51
HostName=sql노드 IP
[mysqld]
NodeId=52
HostName=sql노드 IP
# api 노드 정의
# ndb-cluster-connection-pool 설정한 경우 해당 갯수에 맞게 api 노드 설정.
# 풀 갯수를 8로 설정했다면 mysqld 노드가 2개이므로, 16개의 api 노드를 추가해 준다.
[api]
NodeId=53
HostName=sql노드 IP
.
.
.
[api]
NodeId=66
HostName=sql노드 IP
관리노드 실행 : 데몬을 실행하면서 config.ini 위치를 알려줘야 한다.
# cd /usr/local/mysql/bin
# ./ndb_mgmd
--initial
--ndb-nodeid=1
--config-dir=/usr/local/mysql/cluster-data/data/
--config-file=/usr/local/mysql/cluster-data/data/config.ini &
혹은 -f 옵션을 사용해 config.ini 를 지정한다.
# ./ndb_mgmd
-f /usr/local/mysql/cluster-data/data/config.ini
--configdir=/usr/local/mysql/cluster-data/data/ &
관리노드 정보
# ./ndb_mgm -e "Show"
관리노드 중지 : ndb 노드들까지 모두 중지됨.
# ./ndb_mgm -e shutdown
데이터 노드 중지
# ./ndb_mgm -e 11 stop
데이터 노드 실행
# cd /usr/local/mysql/bin
# ./ndbmtd --ndb-nodeid=11 --ndb-connectstring=관리노드ip
멀티쓰레드가 아닌 일반 데이터노드의 경우 # ./ndbd 사용
--connect-string 은 관리노드 호스트명
--initial 옵션은 데이터 영역을 초기화 하므로, 클러스터를 처음 시작하거나 설정이 변경된 경우에만 사용
2개의 데이터 노드가 있으므로 시스템별로 실행한다.
SQL 서버실행
# ./bin/mysqld_safe --user=mysql &
별도 설정(my.cnf) 위치 지정은 --defaults-file 옵션 사용
# ./bin/mysqld_safe --defaults-file=/etc/local/mysql/data/my.cnf --user=mysql &
mgm 클라이언트로 접속
# /mysql/bin/ndb_mgm
ndb_mgm>show
테이블생성 시 스토리지 engine type을 NDB나 NDBCLUSTER로 지정해야 한다.
mysql>create table test (id int) engine=ndb;
NDB 내부 ip 구성
ndb는 파일을 색인하고, 서로 동기화를 하게 되는데, 이는 대역폭이 높은 별도의 네트워크로 묶어주는게 좋다.
보통 서버들은 여러 네트워크 카드를 지원하므로, 2개는 mgmd, sqld 와 연결된 l2 환경으로 묶고, 2개는 ndb 끼리 묶는다.
'시스템 > DB' 카테고리의 다른 글
mysql 테이블 복사(dump), 복원 (0) | 2017.04.20 |
---|---|
H2 DB 기본 설정 (0) | 2017.02.28 |
mysql 접근 ip 추가 (0) | 2017.02.20 |
MySQL Slow Log (0) | 2017.02.13 |