shell> useradd -m chlee
0.설치 기준
- 기능 검증시 노드 장애 테스트 편의를 위해서 virtual box에 설치한다.
- linux OS는 centos(7로 한다.)
- HA 테스트를 위해서 data 노드 2개, sql 노드 2개, management 노드 1개를 설치한다.
- 가상머신간에 통신이 가능한 구성으로 설치한다.
- https://technote.kr/213
- NAT network 방식으로 먼저 해보고 가상머신에 IP 할당이 필요하다면 인프라팀에 요청한다
1.설치 준비
1.1 사용자 생성하기
mysql 데몬을 실행하는 unix 계정을 생성한다. 일반적으로 root 혹은 mysql 을 계정을 사용하지만 여기서는 chlee 계정을 사용하여 생성한다.
shell> useradd -m chlee
1.2 package 준비
MySQL package 를 얻기 위해서는아래와 같이 3가지 방법이 있다. 3가지 모두 mysql download ( community ) 에서 받을 수 있다.
- binary
- RPM
- source code compile
간편하고 설치 위치를 사용자 계정으로 하기 위해 binary 를 통해 설치를 진행 한다.
[chlee@base ~]$ cd package/
[chlee@base package]$ pwd
/home/chlee/package
[chlee@base package]$ tar xvfz mysql-cluster-gpl-7.6.9-linux-glibc2.12-x86_64.tar.gz
... ... (압축해제)
[chlee@base package]$ ls -al
합계 892816
drwxrwxr-x. 3 chlee chlee 121 3월 11 16:35 .
drwx------. 16 chlee chlee 4096 3월 11 18:20 ..
drwxrwxr-x. 13 chlee chlee 269 3월 11 17:58 mysql-cluster-gpl-7.6.9-linux-glibc2.12-x86_64
-rw-rw-r--. 1 chlee chlee 914236523 3월 11 16:35 mysql-cluster-gpl-7.6.9-linux-glibc2.12-x86_64.tar.gz
[chlee@base package]$ cd ..
[chlee@base ~]$ ln -s package/mysql-cluster-gpl-7.6.9-linux-glibc2.12-x86_64 mysqlc
위 package 준비 과정을 5개의 node 동일한 파일과 동일한 경로로 작업을 진행한다.
1.3 virtualbox
NDB 구성을 위해 virtualbox 를 사용하였으면 별도의 설치과정은 생략한다.
2. NDB 설치
2.1 NDB 설치 개요
NDB 를 설치하기 위해서는 최소 3개의 노드설치가 필요하다.
- Management Node
- SQL Node
- Data Node
구성된 node 정보는 다음과 같다.
node poshostnameip
Management | base | 192.168.56.2 |
---|---|---|
SQL | sql1 | 192.168.56.3 |
sql2 | 192.168.56.4 | |
DATA | data1 | 192.168.56.5 |
data2 | 192.168.56.6 |
2.2 Management node 설치하기
management node 는 기존의 mysql 바이너리가 필요없다. ndb_mgmd (server) 와 ndb_mgm(client) 만 필요하다. 상기 package 에 포함되어 있다.
바이너리 확인 이외에 별도의 설치과정이 필요하지 않으며 sql 및 data node 와는 다르게 NDB cluster 구성에 관련된 config.ini 파일이 필요하다.
아래는 config.ini 내용이다. node 에 대한 정보를 제외하고는 property 에 대한 조사가 필요하기에 manual 의 기본값으로 설정하였다.
[chlee@base ~]$ cd mysqlc
[chlee@base mysqlc]$ mkdir mysql-cluster
[chlee@base mysqlc]$ cd mysql-cluster/
[chlee@base mysql-cluster]$ cat config.ini
[ndbd default]
# Options affecting ndbd processed on all data nodes.
NoOfReplicas=2 # number of replicas
DataMemory=80M # How much memory to allocate for data storage
#IndexMemory=18M # How much memory to allocate for index storage
serverPort=2202 # This the default value
[ndb_mgmd]
# Management process options
HostName=192.168.56.2 # hostname or ip address of mgm node
DataDir=/home/chlee/mysqlc/mysql-cluster
[mysqld]
# Options for data node "sql1"
NodeId=3
HostName=192.168.56.3
[mysqld]
# Options for data node "sql1"
NodeId=4
HostName=192.168.56.4
[ndbd]
# Options for data node "data1"
Hostname=192.168.56.5
NodeId=5
DataDir=/home/chlee/mysqlc/data
[ndbd]
# Options for data node "data2"
Hostname=192.168.56.6
NodeId=6
DataDir=/home/chlee/mysqlc/data
2.3 DATA node 설치하기
data node 는 기존의 mysql 바이너리가 필요없다. ndbd (single-threaded) 와 ndbmtd(multi-threaded) 만 필요하다. 상기 package 에 포함되어 있다.
바이너리 확인 이외에 별도의 설치과정이 필요하지 않으며 my.cnf 설정이 필요하다. my.cnf 파일은 모든 data node 에 동일하게 설정한다.
[chlee@sql1 ~]$ cat /home/chlee/mysqlc/etc/my.cnf
[mysqld]
# options for mysqld process:
ndbcluster # run NDB storage engine
[mysql_cluster]
# options for Cluster processes:
ndb-connectstring=192.168.56.2 # location of management server
2.4 SQL node 설치하기
sql node 는 일반 mysql 설치와 매우 유사하다.(같은가?..)
아래명령을 통해 기본 데이터베이스를 생성한다.
[chlee@sql1 ~]$ cd mysqlc
[chlee@sql1 mysqlc]$
[chlee@sql1 mysqlc]$ bin/mysqld --initialize-insecure --user=chlee \
--datadir=/home/chlee/mysqlc/data \
--basedir=/home/chlee/mysqlc
2019-03-12T01:28:52.136169Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)
2019-03-12T01:28:52.136237Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000)
2019-03-12T01:28:52.136336Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-03-12T01:28:52.323617Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-03-12T01:28:52.358755Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-03-12T01:28:52.420879Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 31ca5a13-4466-11e9-bb05-080027e58ceb.
2019-03-12T01:28:52.422537Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-03-12T01:28:52.423344Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
[chlee@sql1 mysqlc]$
sql 및 data node 는 my.cnf 를 통해 NDB storage engine 사용한다는 것을 명시해야 하며 management node 정보를 입력 해야 한다.
my.cnf 는 sql node 모두 동일하게 적용한다.
chlee@sql1 ~]$ cat /home/chlee/mysqlc/etc/my.cnf
[mysqld]
# options for mysqld process:
ndbcluster # run NDB storage engine
datadir=/home/chlee/mysqlc/data
basedir=/home/chlee/mysqlc
[mysql_cluster]
# options for Cluster processes:
ndb-connectstring=192.168.56.2 # location of management server
my.cnf 참조 순서
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
/home/user/mysqlc/my.cnf
~/.my.cnf
3. NDB 시작하기
기동순서는 아래순서로 진행한다.
- Management Node
- 먼저실행하지 않을 경우 다른 node 에서 접속 시도시 timeout 이 발생할 수 있다.
- DATA Node
- SQL 이전에 기동되어 있지 않다면 SQL node 에서 정상기동을 해도 cluster 에 join 을 하지 못한다. ( ndb_mgm -e show )
- SQL Node
3.1 Management Node 시작하기
[chlee@base mysqlc]$ bin/ndb_mgmd -f /home/chlee/mysqlc/mysql-cluster/config.ini --configdir=/home/chlee/mysqlc/mysql-cluster
MySQL Cluster Management Server mysql-5.7.25 ndb-7.6.9
[chlee@base mysqlc]$ ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=5 (not connected, accepting connect from 192.168.56.5)
id=6 (not connected, accepting connect from 192.168.56.6)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.56.2 (mysql-5.7.25 ndb-7.6.9)
[mysqld(API)] 2 node(s)
id=3 (not connected, accepting connect from 192.168.56.3)
id=4 (not connected, accepting connect from 192.168.56.4)
ndb_mgmd 를 제외하고는 아직 기동상태가 아니다.
3.2 DATA Node 시작하기
[chlee@data1 mysqlc]$ ndbd --defaults-file=/home/chlee/mysqlc/etc/my.cnf
2019-03-12 13:46:12 [ndbd] INFO -- Angel connected to '192.168.56.2:1186'
2019-03-12 13:46:12 [ndbd] INFO -- Angel allocated nodeid: 5
[chlee@data1 mysqlc]$ ps -ef | grep ndbd
chlee 5987 1 0 13:46 ? 00:00:00 ndbd --defaults-file=/home/chlee/mysqlc/etc/my.cnf
chlee 5988 5987 0 13:46 ? 00:00:00 ndbd --defaults-file=/home/chlee/mysqlc/etc/my.cnf
3.3 SQL Node 시작하기
[chlee@sql1 mysqlc]$ bin/mysqld_safe --defaults-file=$MYSQL_HOME/etc/my.cnf --user=chlee &
[1] 7527
[chlee@sql1 mysqlc]$ 2019-03-12T04:50:38.833634Z mysqld_safe Logging to '/home/chlee/mysqlc/data/sql1.err'.
2019-03-12T04:50:38.851344Z mysqld_safe Starting mysqld daemon with databases from /home/chlee/mysqlc/data
기동 이후에 몇가지 설정을 추가 한다.
다음은 접속하여 root 패스워드를 변경하는 부분이다. 처음 데이터베이스 생성시 --initialize-insecure 로 설정하였을 경우에는 패스워드를 입력받지 않는다.
[chlee@sql1 mysqlc]$ mysql -uroot -p
Enter password: (그냥 엔터 입력 )
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.25-ndb-7.6.9-cluster-gpl MySQL Cluster Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
접속 이후 root@localhost 조건에 대한 패스워드를 설정한다.
mysql> alter user 'root'@'localhost' identified by 'root';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>
테스트용 데이터베이스 및 사용자 추가 하기
mysql> create database test;
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> create user 'test'@'localhost' identified by 'test';
Query OK, 0 rows affected (0.00 sec)
mysql> create user 'test'@'127.0.0.1' identified by 'test';
Query OK, 0 rows affected (0.00 sec)
mysql> create user 'test'@'%' identified by 'test';
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on *.* to test@localhost with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on *.* to test@127.0.0.1 with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> grant all privileges on *.* to test@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
[chlee@sql1 mysqlc]$ mysql -utest -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.25-ndb-7.6.9-cluster-gpl MySQL Cluster Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql 은 사용자를 추가할때 접속하는 환경을 pair 로 관리한다. 즉 id 가 같아도 접속하는 환경에 따라 별도의 아이디가 된다.
3.4 확인
모든 node 의 데몬을 기동한 이후 정상적으로 연결되었는지 확인한다.
[chlee@base mysqlc]$ ndb_mgm -e show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=5 @192.168.56.5 (mysql-5.7.25 ndb-7.6.9, Nodegroup: 0, *)
id=6 @192.168.56.6 (mysql-5.7.25 ndb-7.6.9, Nodegroup: 0)
[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.56.2 (mysql-5.7.25 ndb-7.6.9)
[mysqld(API)] 2 node(s)
id=3 @192.168.56.3 (mysql-5.7.25 ndb-7.6.9)
id=4 @192.168.56.4 (mysql-5.7.25 ndb-7.6.9)
[chlee@base mysqlc]$
3.5 종료 및 재시작
NDB Cluster 를 종료하는 경우에는 ndb_mgm 명령어로 모든 node 를 종료 시키다. 반대로 재시작으로 해야 하는 경우 모든 node 에서 각각 시작 명령을 실행해야 한다.
# shutdown cluster
[chlee@base mysqlc]$ ndb_mgm -e shutdown
Connected to Management Server at: localhost:1186
3 NDB Cluster node(s) have shutdown.
Disconnecting to allow management server to shutdown.
[chlee@base mysqlc]$
# start data node
[chlee@base mysqlc]$ bin/ndb_mgmd -f /home/chlee/mysqlc/mysql-cluster/config.ini --configdir=/home/chlee/mysqlc/mysql-cluster --reload
ndb_mgm -e shutdown 으로 종료되는 process 들
ndb_mgm ( ndb client )
ndb_mgmd ( server )
ndbd ( data node single-thread server )
ndbmtd ( data node multi-thread server )
sql node 는 mysqladmin 으로 종료해야 한다.
[chlee@sql1 data]$ mysqladmin -uroot shutdown -p
Enter password:
2019-03-12T05:07:12.710455Z mysqld_safe mysqld from pid file /home/chlee/mysqlc/data/sql1.pid ended
Reference
'Database > MySQL' 카테고리의 다른 글
SYSBENCH 를 이용하여 RDS MySQL, RDS Aurora, GCP Cloud SQL MySQL OLTP 테스트 2차 (0) | 2019.07.12 |
---|---|
SYSBENCH 를 이용하여 RDS MySQL, RDS Aurora, GCP Cloud SQL MySQL OLTP 테스트 (0) | 2019.07.12 |
keepalived를 이용한 mysql failover (0) | 2019.07.08 |
ProxySQL 을 이용한 read / write split 및 failover 구성 (0) | 2019.07.08 |
NDB DataNode Directory Files (0) | 2019.07.08 |