본문 바로가기

시스템/DB

mysql 클러스터 구성

 

기본구성

 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