単一ノードでMySQL Clusterを起動する

出典: MySQL Practice Wiki

目次

概要

MySQL Clusterは通常複数のノードで動かすのが常であるので「ちょっとテストしたいな!」などという時は非常に面倒であり、それがMySQL Clusterを使ってみようかな?という人々のやる気を削いでいるように思う。物理ホスト上に仮想ホストを構築するというのも実に面倒であったりする。が、実は適切に設定さえすれば、テスト的に単一ノードでMySQL Clusterを起動することが可能である。ちょっと使ってみようとか開発目的で使用するという人は、マシンが一台あればテストできるので、是非この設定を試して欲しい。

ただし実運用ではかならず複数の物理マシンを用いて構築すること!!でないとデータロスの可能性大!!

ポイント

単一のノードで複数のプロセスを動かす際に注意しなければいけないのは、リソースの競合である。同じファイルに複数のプロセスが同時に書き込むとか、そういう状況を避けなければいけない。また、各ndbdプロセスにおいて、見かけ上のIPアドレスがすべて同じになるので、ノードを識別するための方法が必要である。つまりまとめると下記のようになる。

  • DataDirを各データノードごとに個別に設定する。
  • connect-stringにノードIDを含める。

また、メモリが各データノードプロセスごとに必要になる点にも注意したい。各プロセスに1GBのメモリを割り当ててしまうと、ndbdを4つ起動すると4GBも消費してしまう。これでは現時点で販売されているラップトップはほぼすべて全滅である。

SQLノードはノードIDを指定しないというのが最も簡単で手っ取り早いであろう。各mysqldにおいても、ネットワークポートやソケットが被らないようにする必要があるのでmy.cnfで別々のものを指定しよう。

サンプル

ここでは、データノード2つ、SQLノード2つという構成のクラスタを起動するための設定ファイルと起動コマンドのサンプルを紹介する。

ディレクトリ構成

管理ノード

/var/lib/mysql-cluster/mgm

データノード

/var/lib/mysql-cluster/data1
/var/lib/mysql-cluster/data2

SQLノード

/var/lib/mysql-cluster/mysql1
/var/lib/mysql-cluster/mysql2

MySQL Clusterインストール先

/usr/local/mysql-cluster

config.ini

/var/lib/mysql-cluster/mgmに置く。

[MGM]
Id=1
DataDir=/var/lib/mysql-cluster/mgm
Hostname=127.0.0.1

[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=32M
IndexMemory=10M
LockPagesInMainMemory=1

MaxNoOfTables=256
MaxNoOfOrderedIndexes=512
MaxNoOfUniqueHashIndexes=256
MaxNoOfAttributes=8192
FragmentLogFileSize=16M
NoOfFragmentLogFiles=4
RedoBuffer=2M
ODirect=1

[NDBD]
Id=11
Hostname=127.0.0.1
DataDir=/var/lib/mysql-cluster/data1

[NDBD]
Id=12
Hostname=127.0.0.1
DataDir=/var/lib/mysql-cluster/data2

[MYSQLD]

[MYSQLD]

ndb_mgmd起動オプション

shell> ndb_mgmd -f /var/lib/mysql-cluster/mgm/config.ini

ndbd起動オプション

shell> ndbd -n -c 11,127.0.0.1
shell> ndbd -n -c 12,127.0.0.1

my.cnf

本サンプルではmy.cnfはそれぞれデータディレクトリに置くこととする。

SQLノード1

[mysqld]
datadir=/var/lib/mysql-cluster/mysql1
port=20001
socket=/var/lib/mysql-cluster/mysql1/mysql.sock
key_buffer=8M
character_set_server=utf8
ndbcluster
ndb-connectstring=127.0.0.1

[mysqld_safe]
ledir=/usr/local/mysql-cluster/bin
pid-file=/var/lib/mysql-cluster/mysql1/mysql.pid

SQLノード2

[mysqld]
datadir=/var/lib/mysql-cluster/mysql2
port=20002
socket=/var/lib/mysql-cluster/mysql2/mysql.sock
key_buffer=8M
character_set_server=utf8
ndbcluster
ndb-connectstring=127.0.0.1

[mysqld_safe]
ledir=/usr/local/mysql-cluster/bin
pid-file=/var/lib/mysql-cluster/mysql2/mysql.pid

mysqld起動オプション

shell> mysqld_safe --defaults-file=/var/lib/mysql-cluster/mysql1/my.cnf&
shell> mysqld_safe --defaults-file=/var/lib/mysql-cluster/mysql2/my.cnf&
個人用ツール