개인 프로젝트를 위해서 만들고 있다.
MGM node (2개)
Data node (2개)
데이터베이스의 가용성 향상
레포지터리 추가
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
클러스터 레포지터리 허용
vi /etc/yum.repos.d/mysql-community.repo
yum list | grep -i mysql-cluster
manager, sql 설치
yum -y install mysql-cluster-community-management-server mysql-cluster-community-server
디렉토리 생성
mkdir /var/lib/mysql-cluster
클러스터 파일 생성
vi /var/lib/mysql-cluster/config.ini
[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
[ndb_mgmd]
NodeId=1
HostName=192.168.0.100
[ndb_mgmd]
NodeId=2
HostName=192.168.0.101
[ndbd]
NodeId=3
HostName=192.168.0.200
[ndbd]
NodeId=4
HostName=192.168.0.201
[mysqld]
NodeId=50
HostName=192.168.0.100
[mysqld]
NodeId=51
HostName=192.168.0.101
공홈에서 가장 기본적인 설정 파일을 가져왔다.
기본적으로 mysql에서 사용하는 포트는 다음과 같다.
하지만 내용을 찾아보니 cluster 통신 포트를 제외한 모든 포트는 랜덤 포트로 통신하게 된다.
방화벽을 끄고 허용 ip로 접근 제어를 해야거나 혹은 다음과 같이 특정 port를 지정해주면 된다.
[ndbd default]
NoOfReplicas=2
DataMemory=80M
IndexMemory=18M
ServerPort = 2202
Portnumber=2200
[ndb_mgmd default]
PortNumber=1186
[ndb_mgmd]
NodeId=1
HostName=192.168.0.100
[ndb_mgmd]
NodeId=2
HostName=192.168.0.101
[ndbd]
NodeId=3
HostName=192.168.0.200
[ndbd]
NodeId=4
HostName=192.168.0.201
[mysqld]
NodeId=50
HostName=192.168.0.100
[mysqld]
NodeId=51
HostName=192.168.0.101
mgmd 시작
ndb_mgmd -f /var/lib/mysql-cluster/config.ini --initial
NDB cluster 확인
ndb_mgm -e show
sql 설정
vi /etc/my.cnf
[mysqld]
ndbcluster
ndb-connectstring=192.168.0.100,192.168.0.101
[mysql_cluster]
ndb-connectstring=192.168.0.100,192.168.0.101
Sql 시작
systemctl start mysqld
yum -y install mysql-cluster-community-data-node
ndbd 실행하기
ndbd --connect-string="nodeid=[해당 data-node id];host=[data-node ip]:[mgm port]"
예시
ndbd --connect-string="nodeid=3;host=192.168.0.100:1186"
정상적으로 클러스터가 구성되는것을 볼수가 있다.
우선 사전에 이야기 할것이 있는데 root@localhost의 경우 패스워드가 공유되지 않는다.
cat /var/log/mysqld.log | grep 'temporary password'
mysql -u root -p
alter user 'root'@'localhost' identified by '변경할 비밀번호';
테이블 생성
CREATE DATABASE mydb;
use mydb
CREATE TABLE mytable ENGINE=NDB;
정상적으로 두개의 sql에서 자동으로 데이터베이스가 만들어지는것이 공유되는것이 보인다.
여기서 ENGINE=NDB을 사용하지않으면 데이터가 공유되지 않지만 현재 mgm에서 레플리카 2로 설정했기 때문에 현재 데이터가 미러링 상태가 되어 ENGINE=NDB을 사용하지않고 기본 InnoDB로 사용하여도 똑같이 공유되는것처럼 보인다.
my.cnf 파일의 [myslqd]란에 해당 내용을 추가한다.
default_storage_engine=NDB
확인
SHOW VARIABLES LIKE 'default_storage_engine';