ローリングリスタート!

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

データノードとSQLノードの共存

 本連載ではお手軽にMySQL Clusterを試してもらうために、Solarisゾーンを用いてセットアップを行いましたが、現実的にはそのように同じマシン上で複数のノードを動かすことはあまりありません。データノード同士でメモリを取り合うことになるので、同じマシンで複数のデータノードを動かすことはお勧めできません。

 性能を重視しない場合、データノードとSQLノードを同じマシン上で動かすことはまれにあります。そのような場合の注意点は、データノードとSQLノードでリソースを取り合わないようにすることです。

 特に、SQLノードは負荷に応じてメモリ使用量が増減するため、高負荷時にはCPUをすべて消費してしまいます。Solarisの場合にはリソース管理をしっかり行うことで、そのようなリソースの取り合いを防ぐことが可能です。次の点に注意してリソースを設定しましょう。

・データノードには1つまたは2つの専用CPUコアを割り当てる。
・データノードの設定においてLockPagesInMainMemory=1を使用する。
・SQLノードが利用できるメモリ量の上限を設定する。上限は少し余裕を持たせておく。

 このように設定すると、図2のように物理的なマシンが4台でデータノード4つ、SQLノード4つというシステムを構成することができます。管理ノードは別のマシンに設定する必要があります。

 Solarisにおいて、上記のようなリソース管理を行う方法については、Solaris Containerの解説ページ(http://jp.sun.com/products/software/solaris/10/containersLowRes.html)で詳しく説明されているので参照してください。

MySQL Clusterの制限事項

 ここではMySQL Clusterを利用する上で特に注意しなければならい制限事項について説明します。

 MySQL Clusterには2種類のインデックスがあります。ハッシュインデックスとオーダードインデックスです。オーダードインデックスは1つのテーブルにおいて複数作成することができますが、ハッシュインデックスはテーブルにつき1つだけしか作成できません。

 つまり、ハッシュインデックスとして構成されるのは主キーのみです。一方で、UNIQUEキー制約を利用する場合にはハッシュインデックスが必要です。そのため、MySQL ClusterではUNIQUEキーを定義した場合、内部的にサポートテーブルという別のテーブルが作成されることになります。サポートテーブルの分だけテーブルに対する参照が増えるため、UNIQUEキー制約を利用キーは性能がよくありません。

 データノードとSQLノードにおいて、異なる性能や種類のマシンを使うことが可能ですが、その際いくつか制限事項があります。

 まずエンディアンの異なるシステムは混在できません。例えばx86はリトルエンディアンで、SPARCはビッグエンディアンですが、この2種類のアーキテクチャを同一のMySQL Clusterにおいて混在させることはできません。

 また、データノードはすべて同じ容量/性能でなければなりません。データ量や負荷はハッシュにより均等に分散されるため、もし性能の異なるシステムを利用した場合、もっとも性能の低いマシンがボトルネックになります。

 トランザクションについても「第4回:データノード設定時のポイント!(http://www.thinkit.co.jp/article/95/4/)」で説明した制限事項(MySQL Clusterで利用できる分離レベルはREAD COMMITTEDのみで、トランザクションの途中でエラーが発生すると、内部的にトランザクションがロールバックしてしまう)があります。

 なお、最大の行サイズは8KB(MySQLのハードリミットは64KB)までなので、カラム数の多いテーブルを用いる場合には注意しましょう。BLOBやTEXTを用いた場合、データはほかの領域へ格納されるためのこの制限の限りではありませんが、先頭の255バイトは同じ8KBの領域に格納されるため、考慮する必要があります。

 MySQL Clusterではデータノードの数を動的に変更することはできません。データノードを追加するときには、データをバックアップしてからリストアする必要があります。データ容量や処理能力を向上させたい場合には、稼働するハードウエアを増強して、メモリ容量や処理能力を向上させるほうが簡単です。

 MySQL Clusterが扱えるデータノードの数は、最大で48、管理ノード、SQLノードを含めた合計は255です。そこまで大規模なクラスタを使う機会はそれほどないため、この制限はそれほど問題にはならないでしょう。

 MySQL Clusterのノード同士が通信する際、その内容は暗号化されません。また、管理ノードやデータノードへアクセスする際に認証はありません。MySQL Clusterを構築する際には、物理的に独立したネットワークを使いましょう。各ノードではOSレベルでセキュリティーを確保しましょう。

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

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

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

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

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