単一ノードで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&