MySQL ClusterのAMIを公開しました

※Update! see http://d.hatena.ne.jp/winebarrel/20101023/p1


ap-southeastにMySQL ClusterのAMIを公開しました。
RightScaleのCentOS 5.4のAMIにMySQL Cluster 7.1.5をインストールしたモノです。
管理ノードとSQLノードとデータノードをひとまとめにして、単体で起動するようにしてます。

  • AMI ID: ami-39c0bf6b
  • Name: winebarrel's MySQL Cluster AMI Image 0.1.0
  • Description: CentOS 5.4 / MySQL Cluster 7.1.5

MySQL Clusterの起動方法

ログインしてndb_mgmdとndbdのプロセスを起動します。


[root@ip-XXX-XXX-XXX-XXX ~]# /etc/init.d/ndb_mgmd start
2010-08-08 21:19:54 [MgmtSrvr] INFO -- NDB Cluster Management Server. mysql-5.1.47 ndb-7.1.5
2010-08-08 21:19:54 [MgmtSrvr] INFO -- Reading cluster configuration from '/var/lib/mysql-cluster/config.ini'
[root@ip-XXX-XXX-XXX-XXX ~]# /etc/init.d/ndbd start
2010-08-08 21:20:00 [ndbd] INFO -- Angel connected to '127.0.0.1:1186'
2010-08-08 21:20:00 [ndbd] INFO -- Angel allocated nodeid: 21

ndb_mgmでndbdに接続されていることを確認して、ndbdをstartします。("Started"が出力されたらstart完了)


[root@ip-XXX-XXX-XXX-XXX ~]# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: localhost:1186
Cluster Configuration
---------------------
[ndbd(NDB)] 1 node(s)
id=21 @127.0.0.1 (mysql-5.1.47 ndb-7.1.5, not started)

[ndb_mgmd(MGM)] 1 node(s)
id=11 @127.0.0.1 (mysql-5.1.47 ndb-7.1.5)

[mysqld(API)] 2 node(s)
id=1 (not connected, accepting connect from any host)
id=31 (not connected, accepting connect from 127.0.0.1)

ndb_mgm> all start
NDB Cluster is being started.

ndb_mgm> Node 21: Start initiated (version 7.1.5)
Node 21: Started (version 7.1.5)

ndb_mgm> exit

mysqldを起動して、show enginesでndbclusterが確認できたら起動完了です。


[root@ip-XXX-XXX-XXX-XXX ~]# /etc/init.d/mysql-cluster start
[root@ip-XXX-XXX-XXX-XXX ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.1.47-ndb-7.1.5-cluster-gpl-log MySQL Cluster Server (GPL)

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
This software comes with ABSOLUTELY NO WARRANTY. This is free software,
and you are welcome to modify and redistribute it under the GPL v2 license

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show engines;
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine | Support | Comment | Transactions | XA | Savepoints |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
| ndbcluster | YES | Clustered, fault-tolerant tables | YES | NO | NO |
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
| ndbinfo | YES | MySQL Cluster system information storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| InnoDB | NO | Supports transactions, row-level locking, and foreign keys | NULL | NULL | NULL |
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO |
| BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
+------------+---------+----------------------------------------------------------------+--------------+------+------------+
10 rows in set (0.00 sec)

mysql>

設定ファイル

  • /var/lib/mysql-cluster/{config.ini,my.cnf}

データのメモリ容量を大きくするには、config.iniの以下の項目を設定して下さい。

DataMemory=128M
IndexMemory=20M

設定を変更したら、以下の手順で設定を反映させます。

  1. /etc/init.d/mysql-cluster stop
  2. ndb_mgmを立ち上げてshutdownと入力
  3. プロセスが全て停止するのを待つ
  4. /etc/init.d/ndb_mgmd init
  5. /etc/init.d/ndbd start
  6. ndb_mgmでndbdをstart
  7. /etc/init.d/mysql-cluster start

DataMemoryを大きくするとディスクのサイズもそれなりに必要なので*1、サイズが大きくなるようなら新しくEBS Volumeをマウントしてそっちに/var/lib/mysql*を移して、/var/lib/にシンボリックリンクを張ると良いです。

容量見積もり

既存のテーブルにどれだけのメモリサイズが必要かは、ndb_size.plで見積もれます。*2
ndb_size.plの実行にはCPANモジュールが必要です。


cpan> install DBI
cpan> force install DBD::mysql
cpan> install Class::MethodMaker

[root@ip-XXX-XXX-XXX-XXX ~]# ndb_size.pl --hostname=127.0.0.1 --database=mysql
ndb_size.pl report for database: 'mysql' (0 tables)
-------------------------------------------------------
Connected to: DBI:mysql:host=127.0.0.1

Including information for versions: 4.1, 5.0, 5.1




Parameter Minimum Requirements
------------------------------

* indicates greater than default

Parameter Default 4.1 5.0 5.1
DataMemory (KB) 81920 0 0 0
NoOfOrderedIndexes 128 0 0 0
NoOfTables 128 0 0 0
IndexMemory (KB) 18432 0 0 0
NoOfUniqueHashIndexes 64 0 0 0
NoOfAttributes 1000 0 0 0
NoOfTriggers 768 0 0 0

*1:はだいたい10倍くらいのディスクサイズが必要になると考えています

*2:のはずなんですが、うまくいかないことが。。。