MySQLをActive-Active構成で使う
1.MySQL Clusterアーキテクチャー概要
秋もたけなわ第3回を迎えた「データベース高速化」シリーズですが、今回はまだまだ一般に知られていないMySQL Clusterについて、アーキテクチャー概要からMySQL Enterprise Serverとの違い、さらには最新MySQL Cluster 7.0での高速化の取り組みまでを紹介していきます。
MySQL Clusterは、もともとは通信ネットワーク業界で求められる厳しい要求に対応するために開発された可用性の高いクラスタデータベースであり、拡張性に優れたハイパフォーマンスのクラスタデータベースです。MySQL Clusterは、共有ディスクを用いるOracle RACと異なり多数のノードで構成される独自のシェアードナッシング型のアーキテクチャーで構成されています。
MySQL Clusterは、独自のシェアードナッシング型のアーキテクチャーを用いることで、高価な共有ディスクを用いずに各ホストの持つメモリおよび、ディスク上にデータを分散させ、プロセス、ホスト、ネットワーク等の障害時にも単一点障害によりサービスが継続できなくなることがないように設計されています。
また、MySQL Clusterは複数のホスト上にプロセスを起動させて構成することができるため、CPU、メモリ、ディスクといったホスト側の提供するリソースを強化して性能を向上させるスケールアップ方式のほか、多数のホストを利用したスケールアウト方式によってもクラスタ全体の性能や格納するデータ容量を増強させることができるようになっています。
それでは、早速、MySQL Clusterの構成を紹介していきます。次の図は、
・管理サーバーノード×2
・データノード×4
・MySQLサーバーノード×5
の計11ノードで構成されたMySQL Clusterの構成図です。
2.MySQL Clusterを構成する3種類のノード
上記の図が示すように、MySQL Clusterは以下3種類のノードから構成されています。
2-1.管理サーバーノード(Management Server)
管理サーバーノードは起動時にクラスタ全体を構成する情報を保持し、クラスタ構成を変更する場合にも利用されます。管理サーバーノードは、MySQL Cluster起動後は必須ノードではないため1 ノードで構成される場合もありますが、バックアップなどのメンテナンスやログファイルへのアクセスの可用性を向上させる目的で冗長化することができます。
2-2.データノード(Data Node)
データノードは、MySQL Cluster が管理するすべてのデータを格納します。1つまたは複数のノードが停止しても継続したサービスが適用できるよう、これらのノード間では同期型でのデータ複製が行われています。データノードの複製数を増やすと、データの冗長性を向上させることができます。またデータノードは、データベーストランザクションも管理しています。
2-3.MySQL サーバーノード(MySQL Server)
MySQL サーバーノードは、クラスタ化されたデータノードに SQL文を用いてアクセスするために利用します。このため、開発者は標準SQLを利用できMySQL Cluster固有のAPIプログラムを記述する必要がありません。MySQL サーバーノードは、パフォーマンスを向上させるために追加することができ、クライアントアクセスの多重度を高めたスケールアウトに適しています。