PR

3種類のノードをセットアップ!

2008年7月15日(火)
奥野 幹也

SQLノード

 SQLノードの実体はmysqldです。つまり、通常のMySQLサーバーに対してNDBストレージエンジンが使用できるような設定を行います。設定は通常のMySQLサーバーと同様、my.cnf/my.iniにおいて行います。[mysqld]セクションに必要な設定を記述しましょう。

 必要最低限の設定は、ndbclusterとconnect-stringです。前者はMySQL Clusterのストレージエンジン(NDB)を有効化するためであり、後者はデータノードと同様に管理ノードへの接続を確立するためのオプションです。my.cnfは次のようになります。

[mysqld]
ndbcluster
connect-string=192.168.1.40

 すべてのデータをMySQL Clusterへ格納するのであれば、skip-innodbオプションを使用して、InnoDBを無効化するといいでしょう。そうすることでMySQLサーバーの起動が早くなりますし、メモリやCPUの使用を抑えることが可能です。

 また、MySQL Clusterを使用する場合にはクエリキャッシュを無効にしておきましょう。MySQL Clusterのデータは複数のMySQLサーバーで共有されるのですが、クエリキャッシュは個別のMySQLサーバーだけで有効なのでデータの同期が取れない場合が生じるからです。

 MySQL Clusterにおいて使用するMySQLサーバーではあまり多くのメモリは必要ありません。ただしソートや結合を処理する必要があるので、接続ごとに必要なバッファ(ソートバッファなど)を適切に割り振りましょう。

 MySQLサーバーを実行するユーザーは、root以外のものを使用しましょう。前述と同じ手順でmysqlというユーザーを、sql1ゾーンとsql2ゾーンにおいて作成してください。

 準備が整ったらMySQLサーバーを起動しましょう。まずはグローバルゾーンからsql1ゾーンへ接続します。

shell# zlogin sql1

 今回は/var/lib/mysqlというディレクトリを、データディレクトリとして使用します。ここにはMySQL Clusterのデータは格納されませんが、各テーブルに対応した.frmファイルや、権限テーブルが格納されます。mysql_install_dbスクリプトを用いてデータディレクトリを初期化しましょう。

shell@sql1# su - mysql
shell@sql1> /user/local/mysql-cluster/scripts/mysql_install_db --datadir=/var/lib/mysql

 MySQLサーバーを起動するにはmysqld_safeスクリプトを使用します。通常の場合と全く同じ手順ですね。

shell@sql1> mysqld_safe &

 MySQLサーバーが起動したら、mysqlコマンドを使って接続しましょう。

shell@sql1> mysql -root

 SHOW ENGINESでndbclusterのサポートがYESになっていれば設定は成功です。また、SHOW ENGINE NDB STATUSコマンドを使用すると接続状態を確認することが可能です。

mysql> SHOW ENGINES;
mysql> SHOW ENGINE NDB STATUS\G

 管理クライアントでSHOWコマンド実行すると、SQLノードが接続している様子を見ることができます。

 同様に、sql2ゾーン上でもMySQLサーバーを起動しましょう。

テーブル操作

 MySQL Clusterを用いてテーブルを定義するのは非常に簡単です。ENGINE=NDBをテーブル定義の際に用いるだけです。例えば非常にシンプルなただ1つのカラムだけを持つテーブルを定義するには以下のように行います。

mysql> CREATE TABLE testdb.testtbl
-> (a BIGINT UNSIGNED NOT NULL PRIMARY KEY)
-> ENGINE=NDB;

 既存のテーブルをMySQL Clusterに変換するにはALTER TABLEを使用します。

mysql> ALTER TABLE existing.table ENGINE=NDB;

 MySQL Clusterのテーブルに対するデータ操作は、ほかのストレージエンジンと全く同じ方法で行います。

mysql> INSERT INTO testdb.teesttbl VALUES(1),(2),(3);
mysql> SELECT * FROM testdb.testttbl;

 MySQL ClusterではテーブルをSQLノード間で共有します。そのため、sql1で実行しているMySQLサーバーで行った変更は、sql2で実行しているMySQLサーバーからも確認できます。CREATE TABLEやINSERT文を実行した後、別のSQLノードでも変更が反映されていることを確認してください。

サン・マイクロシステムズ株式会社
MySQLサポートエンジニア。MySQLサーバー本体のほかにMySQL Cluster、DRBDなどを担当。障害解析からパフォーマンスチューニングまで幅広く対応。OSSの普及をライフワークとしている。http://nippondanji.blogspot.com/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています