MySQL Cluster インストール

2017-01-04

概要

仕事の関係で、MySQLをさわる機会があったので、インストール時のメモ
MySQLでクラスタを構成するためには、マネジメントノード 、データノード、SQLノード3種類が必要との事です。

  • マネジメントノード ・・・ クラスタを管理するためのノード
  • データノード ・・・ データを管理するマシン
  • SQLノード ・・・ SQLを処理するノード

構成は以下となります。
構築作業は、KVM等の仮想環境で構築します。まずは一台をベースサーバとし、その内容を下記の3台にコピーします

+-----------------------------------------------------------------
| HOSTNAME | IP ADDRESS | 役割
+-----------------------------------------------------------------
| test_sql1-lab | 192.168.24.151 | データノード,SQLノード
| test_sql2-lab | 192.168.24.152 | データノード,SQLノード
| test_mgm-lab | 192.168.24.150 | マネジメントノード
+-----------------------------------------------------------------

mysqlのインストール (マネジメントノード,SQLノード,データノード共通)

マネジメントノード,SQLノード,データノード共通で設定します。

MySQL インストール作業

(1)インストールに必要な関連パッケージのインストール

# yum install ncurses-devel

※上記をインストールしないと、configure 時に下記のエラーが表示されます
checking for termcap functions library… configure: error: No curses/termcap library found

(2)作業用ディレクトリに移動

# cd /usr/local/src/

(3)mysqlユーザーの追加

# groupadd mysql
# useradd -g mysql mysql

(4)mysql ダウンロード

# wget http://download.softagency.net/MySQL/Downloads/MySQL-5.1/mysql-5.1.55.tar.gz
# tar xvzf mysql-5.1.55.tar.gz
# cd mysql-5.1.55
# ./configure --prefix=/usr/local/mysql --with-ndbcluster --with-partition
# make
# make install

※ configureオプション

    • prefix=/usr/local/mysql
      インストール場所に/usr/local/mysqlを指定
    • with-ndbcluster
      MySQL Clusterを有効
    • with-partition
      パーティショニングを有効

MySQL 設定

(1)設定ファイルをコピー

# cd /usr/local/src/mysql-5.1.55/support-files
# cp -p my-medium.cnf /etc/my.cnf
# diff my-medium.cnf /etc/my.cnf

(2)DBを初期化

# cd /usr/local/mysql
# bin/mysql_install_db --user=mysql

(3)ユーザー権限を変更

# chown -R root:mysql .
# chown -R mysql:mysql var

(4)SQLノードの起動(mysql)スクリプトを設定

# cd /usr/local/src/mysql-5.1.55/support-files/
# cp -p mysql.server /etc/init.d/mysqld
# chmod 755 /etc/init.d/mysqld
# diff mysql.server /etc/init.d/mysqld
# chmod 755 /etc/init.d/mysqld
# chkconfig --add mysqld
# chkconfig --list mysqld
mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off
# chkconfig mysqld off
※自動起動が設定しない、必要に応じであとで設定する

(5)rootユーザーのパスワード設定

# /etc/init.d/mysqld start
# /usr/local/mysql/bin/mysql
mysql> set password for root@localhost=password('root1234');
Query OK, 0 rows affected (0.00 sec)
# /etc/init.d/mysqld stop

/etc/my.cnfの設定 (マネジメントノード,SQLノード,データノード共通)

マネジメントノード,SQLノード,データノード共通で設定します。

/etc/my.cnfの設定

  • [mysqld]のndb-connectstringにマネジメントノードのIPアドレス指定する
  • [mysql_cluster]のndb-connectstringにマネジメントノードのIPアドレス指定する
  • [ndb_mgmd]のconfig-fileにマネジメントノードの設定ファイルを指定する

下記の設定ファイルは変更箇所のみ抜粋

# cp -p /etc/my.cnf /etc/my.cnf.org

# vi /etc/my.cnf
[mysqld]
ndbcluster
ndb-connectstring=192.168.24.150

[mysql_cluster]
ndb-connectstring=192.168.24.150

# diff /etc/my.cnf /etc/my.cnf.org
17c17
< HostName= 192.168.24.150
---
> HostName= localhost
21c21
< HostName= 192.168.24.151
---
> HostName= localhost
25c25
< HostName= 192.168.24.152
---
> HostName= localhost

管理ノード設定 (マネジメントノード)

この設定は、管理ノードのみ設定

(1)config.ini保存ディレクトリ作成

# mkdir /var/lib/ndb

(2)ndbのpid,ログファイルの保存ディレクトリ作成

# mkdir /var/lib/mysql-cluster

(3)サンプルの設定ファイルをコピー

# cd /usr/local/src/mysql-5.1.55/support-files
# cp -p ndb-config-2-node.ini /var/lib/ndb/config.ini
# cp -p /var/lib/ndb/config.ini /var/lib/ndb/config.ini.org

(4)config.iniを編集

※ 設定ファイルをそのまま出力しています

# vi /var/lib/ndb/config.ini
[ndbd default]
NoOfReplicas= 2
MaxNoOfConcurrentOperations= 10000
DataMemory= 80M
IndexMemory= 24M
TimeBetweenWatchDogCheck= 30000
DataDir= /var/lib/mysql-cluster
MaxNoOfOrderedIndexes= 512

[ndb_mgmd default]
DataDir= /var/lib/mysql-cluster

[ndb_mgmd]
Id=1
HostName= 192.168.24.150

[ndbd]
Id= 2
HostName= 192.168.24.151

[ndbd]
Id= 3
HostName= 192.168.24.152

[mysqld]
Id= 4
HostName= 192.168.24.151

[mysqld]
Id= 5
HostName= 192.168.24.152

[mysqld]
Id= 6

[mysqld]
Id= 7

# choose an unused port number
# in this configuration 63132, 63133, and 63134
# will be used
[tcp default]
PortNumber= 63132

管理コンソールの起動 (マネジメントノード)

この設定は、管理ノードのみ設定

(1)管理コンソール(ndb_mgmd)を起動

# /usr/local/mysql/libexec/ndb_mgmd -f /var/lib/ndb/config.ini

※ -f で設定ファイルを指定

(2)起動しているかプロセス及びログで確認

# ps -ef|grep ndb_mgmd|grep -v grep
root 2174 1 0 09:49 ? 00:00:00 /usr/local/mysql/libexec/ndb_mgmd -f /var/lib/ndb/config.ini

# tail /var/lib/mysql-cluster/ndb_1_out.log
NDB Cluster Management Server. Version 5.1.55
Id: 1, Command port: 1186
NDB Cluster Management Server. Version 5.1.55
Id: 1, Command port: 1186

(3)管理コンソールにログイン

今は、SQLノード、データノードを起動していないので「not connected」となる

# /usr/local/mysql/bin/ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> ; show
Connected to Management Server at: 192.168.24.150:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 (not connected, accepting connect from 192.168.24.151)
id=3 (not connected, accepting connect from 192.168.24.152)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.24.150 (Version: 5.1.55)

[mysqld(API)] 4 node(s)
id=4 (not connected, accepting connect from any host)
id=5 (not connected, accepting connect from any host)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)

データノードの起動 (データノード)

(1)データノードの起動

# /usr/local/mysql/libexec/ndbd --initial

※ 最初からはじめる場合か、管理サーバー上でconfig.iniを修正した場合のみ「–initial」のオプションを使用

(2)起動しているかプロセス及びログで確認

# ps -ef|grep ndbd|grep -v grep
root 4404 1 0 20:55 ? 00:00:00 /usr/local/mysql/libexec/ndbd --initial
root 4405 4404 1 20:55 ? 00:00:01 /usr/local/mysql/libexec/ndbd --initial

# tail /var/lib/mysql-cluster/ndb_2_out.log
RWPool::init(82, 13)
RWPool::init(a2, 18)
RWPool::init(c2, 13)
RWPool::init(122, 18)
RWPool::init(142, 15)
WOPool::init(41, 8)
RWPool::init(e2, 12)
RWPool::init(102, 51)
WOPool::init(21, 6)
m_active_buckets.set(0)

(3)管理コンソール側でデータノードの状態を確認

[ndbd(NDB)] が接続されていることを確認、192.168.24.151がMaster側となっている

# /usr/local/mysql/bin/ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> ; show
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.24.151 (Version: 5.1.55, Nodegroup: 0, Master)
id=3 @192.168.24.152 (Version: 5.1.55, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.24.150 (Version: 5.1.55)

[mysqld(API)] 4 node(s)
id=4 (not connected, accepting connect from any host)
id=5 (not connected, accepting connect from any host)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)

SQLノードの起動 (SQLノード)

(1)データノードの起動

# /etc/init.d/mysqld start
Starting MySQL. [ OK ]

(2)起動しているかプロセス及びログで確認

# ps -ef|grep mysql|grep -v grep
root 4407 1 0 20:55 ? 00:00:00 /usr/local/mysql/libexec/ndbd --initial
root 4408 4407 0 20:55 ? 00:00:07 /usr/local/mysql/libexec/ndbd --initial
root 4472 1 0 21:05 pts/0 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/ex-ms_sql2-lab.pid
mysql 4581 4472 0 21:05 pts/0 00:00:00 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql --log-error=/usr/local/mysql/var/ex-ms_sql2-lab.err --pid-file=/usr/local/mysql/var/ex-ms_sql2-lab.pid --socket=/tmp/mysql.sock --port=3306

(3)管理コンソール側でデータノードの状態を確認

[mysqld(API)] が接続されていることを確認

# /usr/local/mysql/bin/ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> ; show
Connected to Management Server at: 192.168.24.150:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 2 node(s)
id=2 @192.168.24.151 (Version: 5.1.55, Nodegroup: 0, Master)
id=3 @192.168.24.152 (Version: 5.1.55, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1 @192.168.24.150 (Version: 5.1.55)

[mysqld(API)] 4 node(s)
id=4 @192.168.24.151 (Version: 5.1.55)
id=5 @192.168.24.152 (Version: 5.1.55)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)

MySQL Cluster のコマンド

マネジメントノード

管理コンソールを起動

# /usr/local/mysql/libexec/ndb_mgmd -f /var/lib/ndb/config.ini
# /usr/local/mysql/bin/ndb_mgm

コンソールにログイン

# /usr/local/mysql/bin/ndb_mgm

コンソールでの操作

ndb_mgm> show 状況確認
ndb_mgm> start ノードの開始
ndb_mgm> all start 全ノードの開始
ndb_mgm> shutdown 全ノードの停止とクラスタリングの停止(nbdb,ndb_mgmdプロセスもいなくなる)

データノードの起動 (データノード)

データノードの起動

# /usr/local/mysql/libexec/ndbd --initial
or
# /usr/local/mysql/libexec/ndbd

SQLノード

データノードの起動

# /etc/init.d/mysqld start

スポンサーリンク