MySQL Cluster:NoSQL+SQL、NoSQLも使える高可用性インメモリRDBMS

2014年2月25日(火)
山﨑 由章

MySQL Clusterのアーキテクチャ概要

MySQL Clusterのアーキテクチャを解説します。

3つのノードで構成

MySQL Clusterは、データノード、SQLノード、管理ノード、という3種類のノードから構成されます。

データノード 名前の通りですが、データを格納するノードです。MySQL Clusterの中心となるノードです。
SQLノード MySQLサーバーです。クライアントから発行されたSQLを解析し、データノードへアクセスして応答を返します。
管理ノード データノードとSQLノードを管理するためのノードです。クラスタの起動/停止や状態の確認、オンラインバックアップなどの操作を実行します。

データノードでは、複数のノードで同じデータを保持

データノードでは、データを各テーブルの主キーのハッシュ値に基づいて水平分割(行単位で分割)して格納します。更に、分割したデータを同じグループ内のデータノードに複製して持つことで、データが冗長化されます。

図3を例にすると、あるテーブルのデータがF1、F2、F3、F4という4つのフラグメントに分割され、4つのノードに分散して格納されています。そして、各フラグメントの複製が同じグループ内の別のノードに保持されるため、ノード1はF1のデータだけではなくF3の複製を保持しています。また、同様にノード2はF3のデータだけではなくF1の複製を保持しています。

図3:MySQL Clusterのアーキテクチャ概要図(クリックで拡大)

同じデータを複数のノードで保持することにより、あるノードに障害が発生した場合でも、別のノードで処理を継続可能です。また、障害が発生したノードを復旧する際も、オンラインでノードをクラスタに戻すことができます。

データノードへのアクセスがボトルネックになっている場合は、データノードの台数を増加することで1ノードあたりが持つデータ量が少なくなり、負荷分散によって性能を向上できます(前ページのベンチマーク結果参照)。

SQLノードや管理ノードも複数台で構成可能

SQLノードや管理ノードについても、冗長化のために複数台で構成可能です。また、SQLノードへのアクセスがボトルネックになる場合は、SQLノードの台数を増加することで負荷分散でき、性能を向上できます。

各種のNoSQLインターフェース

データノード上のデータは、NoSQLによっても読み込み/書き込み可能です。MySQL Clusterの基礎となっているEricsson Network DataBase(NDB)では、C++のAPIを使ってデータを読み書きしていましたが、現在ではC++のNDB API以外にも各種のNoSQLインターフェースが用意されています。NoSQLインターフェースを使用した場合はキー・バリュー型データストア(KVS)のように利用できますが、KVSとしてMySQL Clusterをとらえると、他のKVSと比較して多数のメリットがあります。

  • ACID準拠のトランザクションをサポート
  • データの永続化と冗長化が担保されている
  • 障害発生時の自動フェイルオーバー機能
  • オンラインバックアップ機能
  • NoSQLだけでなく、SQL文も利用可能
  • SQLノード経由でレプリケーション機能も使用可能

レプリケーション機能も使用可能 (災害対策やMySQLサーバーとの連携)

MySQL Clusterでは、MySQLサーバーのレプリケーション機能も使用できます。レプリケーションを使うことで、MySQL ClusterからMySQL Clusterへデータを複製できるため、データセンターをまたいでディザスタリカバリ構成を組むことでシステムの信頼性を更に高めることができます。

また、MySQL Clusterと通常のMySQLサーバーの間でもレプリケーションを設定できます。そのため、高可用性が求められる大量のトランザクションをMySQL Clusterで処理し、分析処理などアーキテクチャ上MySQL ClusterよりもMySQLの方が向いている処理はMySQLサーバーで処理する、という風にMySQLサーバーと組み合わせて利用することもできます。

図4:レプリケーションの柔軟性(クリックで拡大)

MySQL Clusterでは複数のSQLノードからデータが更新されますが、バイナリログ・インジェクションという仕組みによって、データノードでのデータ変更が完了した時点で、
他のSQLノードから実行されたデータ更新についても、バイナリログにシリアライズ化された上で書き込まれます。また、NoSQLインターフェースを使用してデータを更新した場合でも、同様の仕組みで更新データがバイナリログに記録されるため、NoSQL経由で変更したデータをRDBMSにレプリケーションする、といった使い方も可能です。

日本オラクル株式会社

MySQLのセールスコンサルタント。元々はOracleデータベースのコンサルティング、サポート等に従事していたが、オープンソースとフリーソフトウェア(自由なソフトウェア)の世界に興味を持ち、MySQLの仕事を始める。趣味は旅行と美味しいものを食べること。

連載バックナンバー

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

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

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

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